数字图像的变换(实验报告)

  • 格式: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变化