资源描述
实验二 Matlab图像代数运算和几何变换
一、实验目的
1、掌握不同图像类型的转换
2、掌握图像代数运算和几何变换的方法;
3、掌握灰度级插值法的实验方法。
二、实验内容
1、练习图像类型转换的相关命令(ind2rgb,mat2gray,grayslice,rgb2gray,rgb2ind,im2bw,ind2gray,dither)(p69-73);
2、练习课本6.3.2(p139-p143)图像代数运算的内容;
3、练习图像平移 (p148),图像比例变换(p153),图像旋转(p156),图像镜像变换(p158),图像切割(p160)Matlab实现例题;
4、练习灰度级插值法(p171)。
三、实验步骤和结果
1、练习图像类型转换的相关命令(ind2rgb,mat2gray,grayslice,rgb2gray,rgb2ind,im2bw,ind2gray,dither)
(1)mat2gray()函数
I=imread('rice.png');
>> J=filter2(fspecial('sobel'),I);
>> K=mat2gray(J);
>> imshow(I);
>> figure,imshow(K)
(2)、grayslice()函数
>> I=imread('snowflakes.png');
>> X=grayslice(I,16);
>> imview(I)
imview(X,jet(16))
(3)、rgb2ind()函数
> RGB=imread('peppers.png');
>> imshow(RGB);
>> figure,imshow(RGB)
>> [X,map]=rgb2ind(RGB,128);
>> figure,imshow(X,map)
(4)、im2bw()函数
>> load trees
>> BW=im2bw(X,map,0.4);
>> figure,imshow(X,map)
>> figure,imshow(BW)
(5)、ind2gray()函数
load trees
>> I=ind2gray(X,map);
>> figure,imshow(X,map)
>> figure,imshow(I)
(6)、dither()函数
>> RGB=imread('peppers.png');
>> [X,map]=rgb2ind(RGB,256);
>> I=dither(RGB,map);
>> BW=dither(I);
>> imshow(RGB,map);
>> figure,imshow(RGB,map);
>> figure,imshow(BW)
Result:
(1)转换后图像 (2)索引色图像
(3)索引色图像 (4)索引色图像 (4)二值化后的图像
(5)转换后的灰度图像 (6)索引色图像 (6)抖动转换图像
2、练习课本6.3.2(p139-p143)图像代数运算的内容
(1)加法运算
I=imread('rice.png');
>> figure(1),imshow(I,[])
>> I2=imread('cameraman.tif')
>> figure(2),imshow(I2,[])
>> K=imadd(I,I2,'uint16');
>> figure(3),imshow(K,[])
>> I=imread('lena.bmp');
>> I2=imadd(I,50);
>> figure(1),imshow(I)
>> figure(2),imshow(I2)
(2)、减法运算
>> I=imread('rice.png');
>> I2=imread('cameraman.tif');
>> I3=imsubtract(I,I2);
>> figure,imview(I3)
(3)乘法&除法运算
>> I=imread('lena.bmp');
>> I2=immultiply(I,0.5);
>> figure,imshow(I)
>> figure,imshow(I2)
>> I3=immultiply(I,1.5);
>> figure,imshow(I3)
>> I4=imdivide(I,0.5);
>> figure,imshow(I4)
>> I5=imdivide(I,1);
>> figure,imshow(I5)
Result:
(1)加法运算后的图像 (1)加入常数后的图像 (2)减法运算
(3)乘以0.5后的图像 乘以1后的图像 除以0.5后的图像 除以1后的图像
3、练习图像平移 (p148),图像比例变换(p153),图像旋转(p156),图像镜像变换(p158),图像切割(p160)Matlab实现例题;
(a)图像平移
>> I=imread('trees.tif');
>> figure,imshow(I)
>> I=double(I);
>> I_movesult=zeros(size(I));
>> H=size(I);
>> Move_x=50;
>> Move_y=50;
>> I_movesult(Move_x+1:H(1),Move_y+1:H(2))=I(1:H(1)-Move_x,1:H(2)-Move_y);
>> figure,imshow(uint8(I_movesult))
(b)图像比例变换
J=imread('trees.tif');
>> figure,imshow(J);
>> X1=imresize(J,2);
>> X2=imresize(J,0.5);
>> figure,imshow(X1)
>> figure,imshow(X2)
(C)图像旋转变换
>> I=imread('peppers.png');
>> figure,imshow(I)
>> X1=imrotate(I,30,'nearest');
>> figure,imshow(uint8(X1))
>> X2=imrotate(I,45,'nearest');
>> figure,imshow(uint8(X2))
>> X3=imrotate(I,60,'nearest');
>> figure,imshow(uint8(X3))
>> X4=imrotate(I,90,'nearest');
>> figure,imshow(uint8(X4))
(d)图像镜像变换
>> I=imread('forest.tif');
>> I=double(I);
>> figure,imshow(uint8(I));
>> H=size(I);
>> figure(2),
>> I2(1:H(1),1:H(2))=I(H(1):-1:1,1:H(2));
>> imshow(uint8(I2));
>> figure,imshow(uint8(I2));
>> I3(1:H(1),1:H(2))=I(1:H(1),H(2):-1:1);
>> figure,imshow(uint8(I3));
>> I4(1:H(1),1:H(2))=I(H(1):-1:1,H(2):-1:1);
>> figure,imshow(uint8(I4));
(e)图像切割
>> I1=imread('peppers.png');
>> I2=imcrop(I1,[75 68 220 100]);
>> imview(I2)
I3=imcrop(I1,[30 40 120 100]);
>> imview(I3)
(a)平移后的图像 (b)放大后图像 (b)缩小后的图像
(c)旋转30°后的图像 旋转45°后的图像 旋转60°后的图像 旋转90°后的图像
(d)原始图像 垂直镜像 水平镜像 对角镜像
(e)原始图像 一次切割后图像 二次切割后图像
4、练习灰度级插值法(p171)
>> I=imread('lena.bmp');
>> X1=imresize(I,1);
>> X2=imresize(I,1,'bilinear');
>> X3=imresize(I,1,'bicubic');
>> figure,imshow(X1)
>> figure,imshow(X2)
>> figure,imshow(X3)
最近邻差值法 双线性插值法 三次插值法
四、实验体会
在本次实验中掌握不同图像类型的转换,掌握了转换函数及其语法格式,如ind2rgb()函数将索引图像转换成真彩色。掌握图像代数运算和几何变换的方法,并通过多次不同的练习,明白了各种代数运算的差别像在乘法运算中如果使用的因数大于1,将会增强图像的亮度;如果缩放因数小于1,则会使图像变暗。掌握了灰度级插值法的实验方法并从图像中可以看出三次插值法的效果最好。
展开阅读全文