一、图像颜色模型处理
1.读入一幅彩色图像,显示图像以及R、G、B三个分量的图像。
2.把原图像转为HSV模型,显示H、S、V三个分量的图像。
3.把原图像转为灰度图像,显示灰度图像及其灰度直方图,并以bmp文件格式保存灰度图像。
img=imread('peppers.JPG');
subplot(2,2,1);
imshow(img)
subplot(2,2,2);imshow(img(:,:,1));%显示图像R分量
subplot(2,2,3);imshow(img(:,:,2));%显示图像G分量
subplot(2,2,4);imshow(img(:,:,3));%显示图像B分量
figure
subplot(2,2,1);
imshow(img)
img_hsv=rgb2hsv(img);%将RGB转换为HSV
subplot(2,2,2);imshow(img_hsv(:,:,1));%显示图像H分量
subplot(2,2,3);imshow(img_hsv(:,:,2));%显示图像S分量
subplot(2,2,4);imshow(img_hsv(:,:,3));%显示图像V分量
img_gray=rgb2gray(img);%将RGB转化成灰度图
figure,imshow(img_gray);%显示灰度图像
imhist(img_gray);%显示灰度直方图
imwrite(img_gray,'peppers_gray.bmp');%将灰度图像保存为bmp格式
二、图像逻辑运算
1.实现car.jpg和dessert.jpg两幅图像相加;实现hallforeground.bmp和hallback.bmp两幅图像相减;实现bird.jpg和birdtemplet.bmp两幅图像相乘。
2.读入一幅图像,对其进行平移、旋转、错切变换。
img_car=imread('car.jpg');
img_desert=imread('desert.jpg');
img_hallforeground=imread('hallforeground.bmp');
img_hallback=imread('hallback.bmp');
img_bird=imread('bird.jpg');
img_birdtemplet=imread('birdtemplet.bmp');
%相加
img_car_add_desert=imadd(img_car,img_desert);%将两幅图像相加
subplot(2,3,1)
imshow(img_car_add_desert);%显示相加后的照片
%相减
img_hallforeground_sub_hallback=imsubtract(img_hallback,img_hallforeground);%将两幅图像相减
subplot(2,3,2)
imshow(img_hallforeground_sub_hallback);%显示相减后的图片
%相乘
img_bird_mul_birdtemplet=immultiply(img_bird,img_birdtemplet);%将两幅图相乘
subplot(2,3,3)
imshow(img_bird_mul_birdtemplet);%显示相乘后的图片
%平移
img_translation=imtranslate(img_car,[-200,-50]);%对图像进行平移
subplot(2,3,4)
imshow(img_translation);%显示平移后的图片
%旋转
img_bird_rotation=imrotate(img_bird,45);%将图片旋转45度
subplot(2,3,5)
imshow(img_bird_rotation);%显示旋转后的图片
%图像错切
tform = maketform('affine',[1,0,0;0,1,0;50,100,1]); % 创建tform结构
% 对图片进行平移,这里需要指定图像范围,否则观察不出效果
img_translation = imtransform(img_bird,tform,'XData',[1 size(img_bird,2)],'YData',[1 size(img_bird,1)]);
figure
subplot(3,1,1)
imshow(img_translation) % 显示平移后的图片
tform = maketform('affine',[sqrt(2)/2 sqrt(2)/2 0;-sqrt(2)/2 sqrt(2)/2 0;0 0 1]); % 创建tform结构
img_rotation = imtransform(img_bird, tform); % 对图片进行旋转45°
subplot(3,1,2)
imshow(img_rotation) % 显示旋转后的图片
tform = maketform('affine',[1 0 0; 0.5 1 0;0 0 1]); % 创建tform结构
img_shear = imtransform(img_bird, tform); % 对图片进行水平错切
subplot(3,1,3)
imshow(img_shear) % 显示错切后的图片
三、图像离散傅里叶变换处理
1.产生如图1所示图像,其中图像大小为256×256,中间亮条为128×32,暗处=0,亮处=100。对其进行二维离散傅里叶变换,显示变换后的频谱和能量谱。
图 1
2.把图1中的中间亮条顺时针旋转45度,图像大小仍然为 256×256。对其进行二维离散傅里叶变换,显示变换后的频谱和能量谱。
3.对图1进行二维离散余弦变换,显示变换后的频谱。
img_prospect = 100*ones(128,32); % 生成前景
tform = maketform('affine',[1 0 0;0 1 0;112 64 1]); % 创建平移tform
img = imtransform(img_prospect,tform,'XData',[1 256],'YData',[1 256]); % 对前景平移,并产生背景
figure
subplot(1,3,1)
imshow(img) % 显示图片
%图像离散傅里叶变换
img_fft = fft2(img); % 对图片进行离散傅里叶变换
fshift = fftshift(img_fft); % 直流分量移到频谱中心
spectrum = log(1+abs(fshift));