东北大学计算机图像处理实验报告Word下载.docx
《东北大学计算机图像处理实验报告Word下载.docx》由会员分享,可在线阅读,更多相关《东北大学计算机图像处理实验报告Word下载.docx(30页珍藏版)》请在冰点文库上搜索。
subplot(1,2,2);
subimage(graycartoon);
(3)、RGB转索引图像
[indcartoon,map]=rgb2ind(I,0.7);
%彩色图像转换为索引图像
subimage(indcartoon,map);
(4)、索引图像转RGB
I1=ind2rgb(indcartoon,map);
%索引图像转换为彩色图像
subplot(1,2,1);
subimage(indcartoon,map);
subplot(1,2,2);
subimage(I1);
(5)、索引转灰度图像
i2gcartoon=ind2gray(indcartoon,map);
%索引图像转换为灰度图像
subimage(i2gcartoon);
(6)、灰度转索引图像
[g2icartoon,map]=gray2ind(graycartoon,64);
%灰度转索引图像
subimage(graycartoon);
subimage(g2icartoon,map);
(7)、RGB转二值图像
r2bwcartoon=im2bw(I,0.5);
subimage(I);
subimage(r2bwcartoon);
(8)灰度转二值图像
g2bwcartoon=im2bw(graycartoon,0.5);
subimage(g2bwcartoon);
(9)、索引转二值图像
i2bwcartoon=im2bw(indcartoon,map,0.7);
subimage(i2bwcartoon);
2、应用MATLAB工具箱演示一幅图像的傅里叶变换、离散余弦变换,观察其频谱图。
然后将它们进行逆变换,观察逆变换后的图像;
(1)傅里叶正变换
F=fft2(graycartoon);
subimage(log(abs(F)),[3,10]);
(2)傅里叶反变换
IF=ifft2(F);
subimage(uint8(IF));
(3)DCT变换
B=dct2(graycartoon);
subimage(log(abs(B)),[3,5]);
(4)iDCT变换
iB=idct2(B);
subimage(uint8(iB));
3.应用MATLAB语言编程来实现一幅图像的增强。
(1)取一幅灰度图像,对其进行线性点运算,即
(α,β)分别取(1.5,1.2)、(0.7,1.2),分析变化后图像,并分析直方图。
graycartoon=double(graycartoon);
graycartoon1=1.5*graycartoon+1.2;
subplot(2,2,1);
subimage(uint8(graycartoon));
subplot(2,2,2);
imhist(uint8(graycartoon));
subplot(2,2,3);
subimage(uint8(graycartoon1));
subplot(2,2,4);
imhist(uint8(graycartoon1));
代码2:
graycartoon1=0.7*graycartoon+1.2;
分析:
a=0.7的时候由于图像对比度的下降所以导致灰度值范围的减小;
a=1.5的时候图像对比度增大,故使输出的灰度值范围增大。
(2)取一幅灰度图像,对其进行直方图均衡化处理,再对其进行规定化处理,并对结果进行分析。
graycartoon=uint8(graycartoon);
eqcartoon=histeq(graycartoon);
imhist(graycartoon);
subimage(eqcartoon);
imhist(eqcartoon);
规定化代码:
hgram=50:
2:
250;
speciacartoon=histeq(graycartoon,hgram);
subplot(2,2,1);
subplot(2,2,2);
imhist(graycartoon);
subplot(2,2,3);
subimage(speciacartoon);
subplot(2,2,4);
imhist(speciacartoon);
直方图规定化的优点是能够自动增强整个图像的对比度,缺点是它的具体增强效果不容易控制处理的结果是得到的全局的均衡化直方图。
相比这些图像均衡化就有其优势所在:
图像均衡化是把一个已知灰度概率密度分布的图像经过某种变化,使其成为一个具有均匀灰度概率密度的分布新图像。
其结果的扩展了像元取值的动态范围,从而达到了增强图像整体的对比度。
思考题:
如果将一幅图像进行一次直方图均衡化处理后,再进行一次直方图均衡化处理,结果会发生变化吗?
观察两次均衡化的直方图是否一样。
答:
A=imread('
B=rgb2gray(A);
I=histeq(B);
%第一次均衡化
I1=histeq(I);
%第二次均衡化
subplot(121);
imshow(I1);
subplot(122);
imhist(I1)
通过实验分析两次均衡化的直方图一样,不会发生变化,
(3)取一幅灰度图像,加入噪声后对其进行平滑滤波(均值滤波、中值滤波),并观察不同滤波方式下的效果。
noisecartoon=imnoise(graycartoon,'
salt&
pepper'
avecartoon=filter2(fspecial('
average'
3),noisecartoon)/255;
medcartoon=medfilt2(noisecartoon,[3,3]);
title('
原图'
subimage(noisecartoon);
加噪声图'
subimage(avecartoon);
均值平滑图'
subimage(medcartoon);
中值滤波图'
中值滤波是一种非线性滤波所以可以克服线型滤波器所带来的图像细节模糊问题,对滤波脉冲干扰及颗粒噪声效果最好。
均值滤波的效果与所使用领域半径的大小有关,半径越大像素点越多,则信噪比提高的越大,平滑效果越好,缺点是平滑图像的模糊程度越大。
(4)取一幅灰度图像,采用不同的算子对其进行边缘锐化,并分析结果。
sobelcartoon=filter2(fspecial('
sobel'
),graycartoon);
prewittcartoon=filter2(fspecial('
prewitt'
laplaciancartoon=filter2(fspecial('
laplacian'
subimage(sobelcartoon);
sobel警察'
subimage(prewittcartoon);
prewitt警察'
subimage(laplaciancartoon);
laplacian警察'
Prewitt算子:
一种一阶微分算子的边缘检测,利用像素点上下,左右邻点的灰度差,在边缘处达到极值检测边缘,去掉部分伪边缘,对噪声具有平滑作用。
sobel算子:
对称的一阶差分,对中心加权具有一定的平滑作用。
Laplacian算子:
二次微分算子,满足不同走向的图像边缘锐化要求,对噪声的增强作用较弱,一半用它进行边缘增强时,有必要将图像先进行平滑处理。
为了达到边缘锐化的反差增强效果,实际应用中将高频增强和直方图均衡化结合起来使用,这两个操作的次序能互换吗?
效果一样吗?
I=rgb2gray(I);
subplot(241),imshow(I);
原始图像'
I1=[0,-1,0;
-1,5,-1;
0,-1,0];
I3=imfilter(I,I1);
subplot(242),imshow(uint8(I3));
拉普拉斯算子锐化图像'
h=ones(size(I3));
[f1,f2]=freqspace(size(I3),'
meshgrid'
r=sqrt(f1.^2+f2.^2);
h(r<
0.3)=0;
Y=fft2(double(I3));
Y=fftshift(Y);
y=Y.*h;
y=ifftshift(y);
I4=ifft2(y);
subplot(243),imshow(uint8(I4));
高频增强图像'
I5=histeq(I4);
subplot(244),imshow(I5);
均衡化图像'
P=imread('
P=rgb2gray(P);
subplot(245),imshow(P),title('
ii=[0,-1,0;
P1=imfilter(P,I1);
subplot(246),imshow(uint8(P1));
P2=histeq(P1);
subplot(248),imshow(P2);
J=ones(size(P2));
[f3,f4]=freqspace(size(P2),'
r1=sqrt(f3.^2+f4.^2);
J(r1<
Y=fft2(double(P2));
P3=ifft2(y);
subplot(247),imshow(uint8(P3));
结论:
经过上面的对比可以看出不能互换,效果不同。
4、对一幅灰度图像进行模糊处理,然后进行逆滤波、维纳滤波与约束最小二乘方滤波复原实验。
PSF=fspecial('
motion'
30,45);
blurcartoon=imfilter(graycartoon,PSF,'
circular'
'
conv'
subimage(blurcartoon);
运动糊化的图'
逆滤波代码:
noise=0.1*randn(size(graycartoon));
blurnoicartoon=imadd(blurcartoon,im2uint8(noise));
subplot(1,3,3);
subimage(blurnoicartoon);
wnr1cartoon=deconvwnr(blurcartoon,PSF);
%逆滤波
wnr1cartoon1=deconvwnr(blurnoicartoon,PSF);
figure
(2);
subimage(wnr1cartoon);
subimage(wnr1cartoon1);
维纳滤波代码:
wnr2cartoon=deconvwnr(blurnoicartoon,PSF);
NSR=sum(noise(:
).^2)/sum(im2double(graycartoon(:
)).^2);
wnr3cartoon=deconvwnr(blurnoicartoon,PSF,NSR);
subplot(1,3,1);
运动加噪声警察'
subplot(1,3,2);
subimage(wnr2cartoon);
维纳滤波警察'
subplot(1,3,3);
subimage(wnr3cartoon);
真实信噪比维纳恢复警察'
5、应用MATLAB语言编写实现一幅图像的旋转、剪切和缩放;
旋转代码:
rotatcartoon=imrotate(graycartoon,45,'
nearest'
rotatcartoon1=imrotate(graycartoon,45,'
bilinear'
rotatcartoon2=imrotate(graycartoon,45,'
bicubic'
原警察'
subimage(rotatcartoon);
最邻域旋转警察'
subimage(rotatcartoon1);
双线性旋转警察'
subimage(rotatcartoon2);
双立方旋转警察'
剪切代码:
imshow(graycartoon);
cropcartoon=imcrop(graycartoon,[100,100,200,200]);
警察叔叔'
imshow(cropcartoon);
剪切警察'
缩放代码:
minimizecartoon=imresize(graycartoon,0.2,'
magnifycartoon=imresize(minimizecartoon,3,'
imshow(minimizecartoon);
imshow(magnifycartoon);
6、应用MATLAB语言编程来实现一幅图像的边缘检测。
cartoonedge=edge(graycartoon,'
canny'
subimage(cartoonedge);
imshow(cartoonedge);
实验感悟:
这次实验,我的收获很大。
虽说数字图像处理学了这么久,但是开始编程读取图像和图像直方图对我来说还是比较生疏的,不过通过实验对MatLab软件的使用有了基本的了解,学会了使用MatLab软件来读取一个特定格式的图像,并通过相关的命令语句对图像进行格式转换、图像压缩、二值化等的处理,掌握了利用MATLAB来获取图像的大小、颜色、高度、宽度等等相关信息,掌握在MATLAB中如何通过imshow()语句来读取图像等等。
对图像的四则运算了结图像的不同变化过程,对软件的进一步使用也有了更加深刻的认识。