数字图像处理实验matlab.docx
《数字图像处理实验matlab.docx》由会员分享,可在线阅读,更多相关《数字图像处理实验matlab.docx(32页珍藏版)》请在冰点文库上搜索。
数字图像处理实验matlab
数字图像处理实验matlab
计算机图像处理
姓名:
学号:
班级:
实验一:
了解数字图像处理平台
一、实验目的
(1)学会使用扫描仪;
(2)熟悉MATLAB软件。
二、实验内容
(1)用扫描仪扫一幅彩色图片;一幅灰度图片。
(2)熟悉MATLAB的主界面窗口中各个窗口的功能,利
用不同的矩阵输入方式给矩阵赋值,了解MATLAB
的简单编程及矩阵基本知识;
(3)掌握使用MATLAB的帮助来获得更多的信息。
三、实验仪器设备
扫描仪、计算机和MATLAB应用软件。
实验二:
图像处理
一、实验目的
(1)通过应用MATLAB语言编程实现对图像的处理,
进一步熟悉MATLAB软件的编程及应用;
(2)通过实验进一步掌握图像处理的基本技术和方
法。
二、实验内容
1.应用MATLAB语言编写显示一幅灰度图像、二值图像、索引图像及彩色图像的程序,并进行相互之间的转换。
显示原始图像:
>>I=imread('D:
\tu.jpg');
>>imshow(I);
RGB灰度图像:
代码:
>>I=imread('D:
\tu.JPEG');
>>imshow(I)
>>graytu=rgb2gray(I);
>>subplot(1,2,1);
>>subimage(I);
>>subplot(1,2,2);
>>subimage(graytu)
效果:
RGB转二值图像:
代码:
>>[indtu,map]=rgb2ind(I,0.5);
>>subplot(1,2,1);
>>subimage(I);
>>subplot(1,2,2);
>>subimage(indtu,map)
效果:
索引转RGB图像:
代码:
>>I1=ind2rgb(indtu,map);
>>subplot(1,2,1);
>>subimage(indtu,map);
>>subplot(1,2,2);
>>subimage(I1)
效果:
索引转灰度图像:
代码:
>>I2gtu=ind2gray(indtu,map);
>>subplot(1,2,1);
>>subimage(indtu,map);
>>subplot(1,2,2);
>>subimage(I2gtu)
效果:
灰度转索引图像:
代码:
[g2itu,map]=gray2ind(graytu,64);
>>subplot(1,2,1);
>>subimage(graytu);
>>subplot(1,2,2);
>>subimage(g2itu,map)
效果:
RGB转二值图像:
代码:
>>r2bwtu1=im2bw(I,0.8);
>>subplot(1,2,1);
>>subimage(I);
>>subplot(1,2,2);
>>subimage(r2bwtu1)代码:
效果:
灰度转二值图像
代码:
g2bwtu1=im2bw(graytu,0.8);
>>subplot(1,2,1);
>>subimage(graytu);
>>subplot(1,2,2);
>>subimage(g2bwtu1)
效果:
索引转二值图像
代码:
>>i2bwtu=im2bw(indtu,map,0.5);
>>subplot(1,2,1);
>>subimage(indtu,map);
>>subplot(1,2,2);
>>subimage(i2bwtu)
效果:
2.应用MATLAB工具箱演示一幅图像的傅里叶变换、离散余弦变换,观察其频谱图,然后将它们进行逆变换,观察逆变换后的图像
(1)傅里叶正变换
代码:
>>F=fft2(graytu);
>>subplot(1,2,1);
>>subimage(graytu);
>>subplot(1,2,2);
>>subimage(log(abs(F)),[3,10])
效果:
(2)傅里叶反变换
代码:
>>IF=ifft2(F);
>>subplot(1,2,1);
>>subimage(log(abs(F)),[3,10]);
>>subplot(1,2,2);
>>subimage(uint8(IF))
效果:
(3)DCT变换
代码:
>>B=dct2(graytu);
>>subplot(1,2,1);
>>subimage(graytu);
>>subplot(1,2,2);
>>subimage(log(abs(B)),[3,5])
效果:
(4)IDCT变换
代码:
>>iB=idct2(B);
>>subplot(1,2,1);
>>subimage(log(abs(B)),[3,5]);
>>subplot(1,2,2);
>>subimage(uint8(iB))
效果:
总结:
傅里叶变化:
傅里叶变换是一种特殊的积分变换。
它能将满足一定条件的某个函数表示成正弦基函数的线性组合或者积分。
DCT变换:
离散余弦变换的重要特点是能量集中,信号常将其能量的大部分集中于频率域的一个小范围内,这样描述不重要的分量只需要很少的比特数;频率域分解映射了人类感觉系统的处理过程,并允许后继的量化过程满足其灵敏度的要求。
变化后,能量集中的范围可以精细的量化,其他的范围可以粗糙量化,这样处理,不会引起太大的精度问题,符合人体的听觉,视觉需要。
这样量化后,可以用小的数据量来保存采集的数据,对处理音频,视频等数据非常有效。
3.应用MATLAB语言编程来实现一幅图像的增强
(1)取一幅灰度图像,对其进行线性点运算,要求:
要求线性函数为Y=aX+b, (a,b)分别取(1.5,1.2)、(0.7,1.2),分析变化后图像,并分析直方图。
代码:
>>graytu=double(graytu);
>>graytu1=1.5*graytu+1.2;
>>subplot(2,2,1);
>>subimage(unit8(graytu));
>>subimage(uint8(graytu));
>>subplot(2,2,2);
>>imhist(uint8(graytu));
>>sublpot(2,2,3);
>>subplot(2,2,3);
>>subimage(uint8(graytu1));
>>subplot(2,2,4);
>>imhist(uint8(graytu1))
效果:
代码2:
>>graytu=double(graytu);
>>graytu1=0.7*graytu+1.2;
>>subplot(2,2,1);
>>subimage(uint8(graytu));
>>subplot(2,2,2);
>>imhist(uint8(gtaytu));
>>imhist(uint8(graytu));
>>subplot(2,2,3);
>>subimage(uint8(graytu1));
>>subplot(2,2,4);
>>imhist(uint8(graytu1))
效果:
总结:
当a=0.7时,图像对比度减小,输出灰度值范围减小;
当a=1.5时,图像对比度增大,输出灰度值范围增大。
(2)取一幅灰度图像,对其进行直方图均衡化处理,再对其进行规定化处理,并对结果进行分析
代码:
>>graytu=uint8(graytu);
>>eqtu=histeq(graytu);
>>subplot(2,2,1);
>>subimage(graytu);
>>subplot(2,2,2);
>>imhist(graytu);
>>subplot(2,2,3);
>>subimage(eqtu);
>>subplot(2,2,4);
>>imhist(eqtu)
效果:
规定化代码:
代码:
>>hgram=50:
2:
250;
>>speciatu=histeq(graytu,hgram);
>>subplot(2,2,1);subimage(graytu);
>>subplot(2,2,2);imhist(graytu);
>>subplot(2,2,3);subimage(speciatu);
>>subplot(2,2,4);imhist(speciatu)
效果:
总结:
图像均衡化将一已知灰度概率密度分布的图像经过某种变换,变成一具具有均匀灰度概率密度分布的新图像。
其结果扩展了像元取值的动态范围,从而到达了增强图像整体效果的对比。
直方图规定化能自动增强整个图像的对比度,但它的具体增强效果不易控制,处理的结果总是得到全局的均衡化直方图。
思考题:
如果将一幅图像进行一次直方图均衡化处理后,再进行一次直方图均衡化处理,结果会发生变化吗?
观察两次均衡化的直方图是否一样。
答:
2次均衡化的结果是一样的
代码:
>>subplot(2,2,1);
>>J=histeq(graytu);
>>JJ=histeq(J);
>>imhist(J);
>>subplot(2,2,2);
>>imhist(JJ);
>>subplot(2,2,3);
>>imshow(J);
>>subplot(2,2,4);
>>imshow(JJ)
效果:
(3)取一幅灰度图像,加入噪声后对其进行平滑滤波(均值滤波、中值滤波),并观察不同滤波方式下的效果
代码:
>>noisetu=imnoise(graytu,'salt&pepper',0.02);
>>avetu=filter2(fspecial('average',3),noisetu)/255;
>>metu=mefilt2(noisetu,[3,3]);
>>metu=medfilt2(noisetu,[3,3]);
>>subplot(2,2,1);subimage(graytu);title('原图');
>>subploy(2,2,2);sunimage(noisetu);title('加椒盐噪声');
>>subplot(2,2,2);subimage(noisetu);title('加椒盐噪声图');
>>subplot(2,2,3);subimage(avetu);titlt('均值平滑图');
>>subplot(2,2,3);subimage(avetu);title('均值平滑图');
>>subplot(2,2,4);subimage(medtu);title('中值滤波图')
>>subplot(2,2,4);subimage(metu);title('中值滤波图')
效果:
总结:
均值滤波的效果与所使用的领域半径大小有关,半径越大,像素点越多,则信噪比提高越大,平滑效果越好,但是平滑图像的模糊程度越大。
中值滤波是一种非线性滤波,可以克服整形滤波器所带来的图像细节模糊,对滤波脉冲干扰及颗粒噪声最为有效。
(4)取一幅灰度图像,采用不同的算子对其进行边缘锐化,并分析结果
代码:
>>sobeltu=filter2(fspecial('sobel'),graytu);
>>prewitttu=filter2(fspecial('prewitt'),graytu);
>>laplaciantu=filter2(fspecial('laplacian'),graytu);
>>subplot(2,2,1);subimage(graytu);title('原图');
>>subplot(2,2,2);subimage(sobeltu);title('sobel图');
>>subplot(2,2,3);subimage(prewitttu);title('prewitt图');
>>subplot(2,2,4);subimage(laplaciantu);title('laplacian图')
效果:
总结:
Sobel算子:
对称的一阶差分,对中心加权具有一定的平滑作用
Prewitt算子:
一种一阶微分算子的边缘检测,利用像素点上下,左右邻点的灰度差,在边缘出到达到极值检测边缘,去掉部分伪边缘,对噪声具有边缘作用。
Lanplacian算子:
做二次微分算子,满足不同走向的图像边缘锐化要求,对噪声的增强作用减弱,一半用它进行边缘增强时,有必要将将图像先进性平滑处理。
思考题:
为了达到边缘锐化的反差增强效果,实际应用中将高频增强和直方图均衡化结合起来使用,这两个操作的次序能互换吗?
效果一样吗?
答:
不能互换,应该先进行锐化,然后再进行均衡化。
因为直方图均衡化是把原始图像的灰度直方图从某个灰度区间变成在全部灰度范围内的均匀分布,而将高频增强明显的意思是对图像进行高通滤波,所以如果两个处理次序互换的话不同频率成分产生影响,而使效果不一样,但都可增强反差。
代码:
>>imshow(graytu);
>>h=fspecial('sobel');
>>J=histeq(graytu);
>>I3=filter2(h,graytu);
>>subplot(1,2,1);
>>imshow(I3);
>>I3=filter2(h,graytu);
>>subplot(1,2,2);
>>J=histeq(I3);
>>imshow(J)
效果:
4.对一幅灰度图像进行模糊处理,然后进行逆滤波、维纳滤波与约束最小二乘方滤波复原实验
代码:
>>PSF=fspecial('motion',30.45);
>>blurtu=imfilter(graytu,PSF,'circular','conv');
>>subplot(1,2,1);subimage(graytu);title('原图');
>>subplot(1,2,2);subimage(blurtu);title('运动模糊图');
效果:
逆滤波代码:
>>wnr1tu=deconvwnr(blurtu,PSF);
>>subplot(1,2,1);subimage(blurtu);
>>subplot(1,2,2);subimage(wnr1tu)
效果:
维纳滤波代码:
>>wnr3tu=deconvwnr(blurtu,PSF,NSR);
>>subplot(1,3,1);subimage(blurtu);title('运动加噪声图');
>>subplot(1,3,2);subimage(wunr2tu);title('维纳滤波图');
>>subplot(1,3,2);subimage(wnr2tu);title('维纳滤波图');
>>subplot(1,3,3);subimage(wnr3tu);title('真实信噪比恢复图');
效果:
5.应用MATLAB语言编写实现一幅图像的旋转、剪切和缩放
代码:
>>rotattu=imrotate(graytu,45,'nearest');
>>rotattu2=imrotate(graytu,45,'bilinear');
>>rotattu3=imrotate(graytu,45,'bicubic');
>>subplor(2,2,1);subimage(graytu);
>>subplot(2,2,1);subimage(graytu);title('原图');
>>subplot(2,2,2);subimage(rotate);title('最邻域旋转图');
>>subplot(2,2,3);subimage(rotate1);title('双线性旋转图');
>>subplot(2,2,3);subimage(rotattu2);title('双线性旋转图');
>>subplot(2,2,4);subimage(rotattu3);title('双立方旋转图')
效果:
剪切代码:
>>croptu=imcrop(graytu,[100,100,200,200]);
>>subplot(1,2,1);imshow(graytu);title('原图');
>>subplot(1,2,2);imshoe(croptu);title('剪切图')
>>subplot(1,2,2);imshow(croptu);title('剪切图')
效果:
缩放代码:
>>minimizetu=imresize(graytu,0.2,'nearest');
>>magnifytu=imresize(minimizetu,3,'bilinear');
>>imshow(minimizetu)
>>imshow(minimizetu)
>>imshow(magnifytu)
效果:
6.对一幅图像进行几何失真处理后利用连接点实施图像配准复原
代码:
>>C=imrotate(B,45,'bilinear');
>>cpselect(C,B);
>>input_points_corr=cpcorr(input_points,base_points,C,B);
>>Tlinear=cp2tform(input_points,base_points,'linear conformal');
>>Tpolynomial2=cp2tform(input_points,base_points,'polynomial',2);
>>subplot(131);imshow(B)
>>subplot(132);imshow(C)
>>subplot(133);imshow(imtransform(C,Tpolynomial2))
效果:
7.应用MATLAB语言编程来实现一幅图像的边缘检测
代码:
>>BW1=edge(graytu,'canny');
>>subplot(1,2,1);subimage(graytu);
>>subplot(1,2,2);subimage(BW1)
效果: