数字图像的变换(实验报告)
- 格式:docx
- 大小:3.09 MB
- 文档页数:19
数字图像处理
——第二次作业
【摘要】本次作业通过对图像的灰度级数以及对其像素的点运算,算术运算、几何变换等,学习了MATLAB在数字图像处理中的运用,更深的理解了数字图像处理的原理和方法。 1. 把lena 512*512图像灰度级逐级递减8-1显示;
实验原理:根据图像分类原理,将给出的实验图像变换成为不同类型的图像。
处理结果如下图所示:
128级灰度图 64级灰度图32级灰度图16级灰度图8级灰度图 4级灰度图2级灰度图实验结果分析:
由实验结果可知,在图像灰度转换过程中,其图像的清晰度随着灰度级的降低而降低。
2、 把elain图像和lena图像进行加减乘除运算,并按0-255灰度级显示;
实验原理:图像的加减乘除运算,即图像的代数运算,是指对两幅或两幅以上的图像进行点对点加、减、乘、除运算而得到目标图像的运算。图像处理代数运算的4种基本形式分别如下:
C(x,y)=A(x,y)+B(x,y)
C(x,y)=A(x,y)-B(x,y)
C(x,y)=A(x,y)*B(x,y)
C(x,y)=A(x,y)/B(x,y)
式中,A(x,y)和B(x,y)为输入图像表达式;C(x,y)为输出图像表达式。
处理结果如下图:
相加后的图相减后的图相乘后的图
结果分析:由所得结果可知,两幅图像进行相加运算可以实现图像的叠加,而通过减法运算可以实现混合图像的分离。乘法运算可以用来获取对图像感兴趣的部分,对于需要保留下来的区域,掩膜图像的值置为1,而在需要被抑制掉的区域,掩膜图像的值置为0。
3.计算lena图像的均值方差;
MATLAB提供了计算均值和标准差的函数,分别为函数mean()和函数std()。在计算得标准差后,再平方可得方差值。
计算结果为:
均值=99.0512
方差=2796
4.把lena图像用近邻、双线性和双三次插值法zoom到2048*2048;
原理:插值算法是估计在图象像素间的某个位置的像素的取值方法。
1)最近邻点插值法:
在待插像素的周围四邻像素中,距离待求插像素最近的像素灰度赋给待插像素。该方法最简单,但校正后存在灰度不连续性,图像有明显锯齿状。
2)双线性插值算法
双线性插值算法输出的图像的每个像素都是原图中四个像素(2×2)运算的结果,相除后的图这种算法极大地消除了锯齿现象。
3)双三次插值算法
双三次插值算法是上一种算法的改进算法,它输出图像的每个像素都是原图16个像素(16×16)运算的结果。这种算法是一种很常见的算法,普遍用在图像编辑软件、打印机驱动和数码相机上。
我们用MATLAB提供的interp()函数来进行插值,其调用格式为:
ZI=interp2(Z,ntimes,method) 或ZI=interp2(Z,[ ],method)
其中,Z为原图像,Z1为插值后的图像,method为插值算法,ntimes为缩放倍数。也可以直接在方括号中输入插值后图像的大小,如ZI=interp2(Z,[2048*2048],’nearest’);
处理结果如下图所示:
近邻插值法ZOOM到2048*2048 双线性插值法ZOOM到2048*2048双三次插值法ZOOM到2048*20485、 把lena和elain图像分别进行水平shear(参数可设置为1.5,或者自行选择)和旋转30度,并采用用近邻、双线性和双三次插值法zoom到2048*2048;
原理分析:
①这里我们采用仿射变换(affine transformation)来进行水平裁剪。仿射变换是空间直角坐标变换的一种,它是一种二维坐标到二维坐标的线性变换,保持二维图形的“平直线”和“平行性”,可以通过一系列的原子变换的复合来实现,包括平移、缩放、翻转、旋转和剪切。
“剪切变换”又称“错切变换”,类似于四边形不稳定性的性质。
其中剪切仿射变换的变换矩阵为:
1010001shxshy
相当于一个横向剪切10010001shy与一个纵向剪切10010001shx的复合。
②对图像的“旋转”操作,我们直接调用MATLAB的imrotate()函数即可。
y2=imrotate(Y,angle,'crop');
其中,angle为旋转角度(默认为逆时针),crop代表旋转后裁剪,即将旋转后的图像超出原图像大小范围的部分裁剪掉。如果缺省则默认为不裁剪。
处理结果如下图示:
水平shear后的lena.bmp水平shear后用近邻插值法放大到2048*2048的lena.bmp水平shear后用双线性插值法放大到2048*2048的lena.bmp 水平shear后用双三次插值法放大到2048*2048的lena.bmp用近邻法旋转30度的lena.bmp用近邻法旋转30度并经过裁剪的lena.bmp旋转30度后用近邻插值法放大到2048*2048的.elain.bmp 旋转30度后用双线性插值法放大到2048*2048的elain.bmp旋转30度后用双三次插值法放大到2048*2048的elain.bmp【附录】
1. 参考文献:
[1] 杨杰:《数字图像处理及MATLAB实现——学习与实验指导》,北京,电子工业出版社,2010年版。
[2]冈萨雷斯:《数字图像处理(第三版)》,北京,电子工业出版社,2010年版。
[3] /s/blog_4af655c30100d7ed.html
2.源代码:
第一题:
>> X=imread('E:\大三下\图像处理课件\作业\第二次作业\lena.bmp','bmp');
>> [wid,hei]=size(X);
>> img2=zeros(wid,hei);
>> img4=zeros(wid,hei);
>> img8=zeros(wid,hei);
>> img16=zeros(wid,hei);
>> img32=zeros(wid,hei);
>> img64=zeros(wid,hei);
>> img128=zeros(wid,hei);
>> for i=1:wid
for j=1:hei
img128(i,j)=floor(X(i,j)/2);
end
end
>> figure
>> imshow(uint8(img128),[0,127])
>> title(‘128级灰度图’)
>> for i=1:wid
for j=1:hei
img64(i,j)=floor(X(i,j)/4);
end
end
>> figure
>> imshow(uint8(img64),[0,63])
>> title(‘64级灰度图’)
>> for i=1:wid
for j=1:hei
img32(i,j)=floor(X(i,j)/8);
end
end
>> figure
>> imshow(uint8(img32),[0,31])
>> title(‘32级灰度图’) >> for i=1:wid
for j=1:hei
img16(i,j)=floor(X(i,j)/16);
end
end
figure
>> imshow(uint8(img16),[0,15])
>> title(‘16级灰度图’)
>> for i=1:wid
for j=1:hei
img8(i,j)=floor(X(i,j)/32);
end
end
>> figure
>> imshow(uint8(img8),[0,7])
>> title(‘8级灰度图’)
>> for i=1:wid
for j=1:hei
img4(i,j)=floor(X(i,j)/64);
end
end
>> figure
>> imshow(uint8(img4),[0,3])
>> title(‘4级灰度图’)
>> for i=1:wid
for j=1:hei
img2(i,j)=floor(X(i,j)/128);
end
end
figure
>> imshow(uint8(img2),[0,1])
>> title(‘2级灰度图’)
第二题:
MATLAB处理程序如下:
>> X=imread('E:\大三下\图像处理英文课件\作业\第二次作业\lena.bmp','bmp');
>> Y=imread('E:\大三下\图像处理英文课件\作业\第二次作业\elain1.bmp','bmp');
>> A=X+0.7*Y;
>>figure
>> imshow(A);
>> title('相加后的图')
>> S=X-0.3*Y;
>>figure >> imshow(S);
>> title('相减后的图')
>> M=0.01*X.*Y;
>>figure
>> imshow(M);
>> title('相乘后的图')
>> D=X./(0.01*Y);
Warning: Divide by zero.
>> figure
>> imshow(D);
>>title('相除后的图')
第三题:
MATLAB处理程序如下:
>> [X,MAP]=imread('E:\大三下\图像处理英文课件\作业\第二次作业\lena.bmp','bmp');
>> average=mean2(X) %求均值
average =
99.0512
>> j=std2(X) %求标准差
j =
52.8776
>> D=j^2 %求方差
D =
2.7960e+003
第四题:
MATLAB处理程序如下:
>> X=imread('E:\大三下\图像处理英文课件\作业\第二次作业\lena.bmp','bmp');
>> X1=imresize(X,4,'nearest');
>> X2=imresize(X,4,'bilinear');
>> X3=imresize(X,4,'bicubic');
>> figure(1)
>> imshow(X1);
Warning: Image is too big to fit on screen; displaying at 25%
>> title('近邻插值法ZOOM到2048*2048')
>> figure(2)
>> imshow(X2);
Warning: Image is too big to fit on screen; displaying at 25%
>> title('双线性插值法ZOOM到2048*2048')
>> figure(3)
>> imshow(X3);
Warning: Image is too big to fit on screen; displaying at 25%
>> title('双三次插值法ZOOM到2048*2048')
第五题:
(1) 关于lena.bmp的shear及ZOOM变化