图像处理作业.docx
《图像处理作业.docx》由会员分享,可在线阅读,更多相关《图像处理作业.docx(19页珍藏版)》请在冰豆网上搜索。
图像处理作业
灰度图像处理
在本文中,将探讨利用图像处理工具进行灰度图像处理的基本原理,介绍了如何利用MATLAB及其图像处理工具箱进行数字图像处理,并通过一些例子来说明利
用MATLAB图像处理工具箱进行图像处理的方法。
关键词:
MATLAB;图像处理;
1.图像的读取和显示
程序:
I=imread('D:
\hanxu\Documents\mas\Boy.bmp');%读取图像
>>whosI
NameSizeBytesClassAttributes
I256x25665536uint8
>>imshow(I)
2.
(1)计算并绘制其直方图
在对图像进行处理之前,了解图像整体或局部的灰度分布情况是非常必要。
对图像的灰度分布进行分析的重要手段就是建立图像的灰度直方图,利用图像灰度直方图,可以直观的看出图像中的像素亮度分布情况;通过直方图均衡化,归一化等处理,可以对图像的质量进行调整。
确切地说,直方图就是图像中一个随机变量——像素亮度(灰度级别)的分布情况的统计特性。
设r表示图像中像素的灰度级,假定对每一个瞬间,它们是连续的随机变量,那么就可以用概率密度函数P(ri)表示原始图像的灰度分布,则
P(ri)=ni/N
式中,N为一幅图像中像素的总数;ni为第i级灰度的像素;ri为第i个灰度级;P(ri)表示该灰度级出现的概率。
下面通过例子观察图像的直方图:
程序:
I=imread('D:
\hanxu\Documents\mas\Boy.bmp');%读取图像
>>whos
NameSizeBytesClassAttributes
I256x25665536uint8
>>imshow(I)
>>bar(1:
10:
256,1:
10:
256)
(2)直方图均衡化
对上面图像图像进行均衡化:
程序:
>>I=imread('D:
\hanxu\Documents\mas\Boy.bmp');%读取图像
>>figure
>>subplot(221);imshow(I);
>>subplot(222);imhist(I)
>>I1=histeq(I);
>>figure;
>>subplot(221);imshow(I1)
>>subplot(222);imshow(I1)
3.图像的二维快速傅立叶变换
这里以快速傅立叶变换为例,说明图像变换的效果及如何编程实现。
程序:
I=imread('D:
\hanxu\Documents\mas\Boy.bmp');%读取图像
>>figure
>>subplot(221);imshow(I);
>>subplot(222);imhist(I)
>>I1=histeq(I);
>>figure;
>>subplot(221);imshow(I1)
>>subplot(222);imshow(I1)
>>I=imread('D:
\hanxu\Documents\mas\Boy.bmp');%读取图像
>>imshow(I)
>>d=zeros(32,32);
>>d(13:
20,13:
20)=1;
>>figure
(2);
>>imshow(d,'notruesize');
Warning:
IMSHOW(...,'notruesize')isanobsoletesyntax.
UseIMSHOW(...,'InitialMagnification','fit')instead.
>Inimshow>preParseInputsat372
Inimshowat195
>>D=fft2(d);
>>figure(3);
>>imshow(abs(D),[-15],'notruesize');
Warning:
IMSHOW(...,'notruesize')isanobsoletesyntax.
UseIMSHOW(...,'InitialMagnification','fit')instead.
>Inimshow>preParseInputsat372
Inimshowat195
效果图:
4.图像的中值滤波
中值滤波:
基于排序统计理论的一种能有效抑制噪声的非线性平滑滤波信号处理技术。
中值滤波的特点即是首先确定一个以某个像素为中心点的邻域,一般为方形邻域,也可以为圆形、十字形等等,然后将邻域中各像素的灰度值排序,取其中间值作为中心像素灰度的新值,这里领域被称为窗口,当窗口移动时,利用中值滤波可以对图像进行平滑处理。
其算法简单,时间复杂度低,但其对点、线和尖顶多的图像不宜采用中值滤波。
很容易自适应化。
中值滤波是用一个有奇数点的滑动窗口,将窗口中心点的值用窗口各点的中值代替。
具体操作步骤如下:
(1)将模板在图中漫游,并将模板中心与图中某个象素位置重合。
(2)读取模板下各对应象素的灰度值。
(3)将这些灰度值从小到大排成1列。
(4)找出这些值里排在中间的1个。
(5)将这个中间值赋给对应模板中心位置的象素。
程序:
I=imread('D:
\hanxu\Documents\mas\Boy.bmp');%读取图像
I=imread('D:
\hanxu\Documents\mas\Boy.bmp');%读取图像
J=imnoise(I,'salt&pepper',0.02);
subplot(231),imshow(I);title('pic1');
>>subplot(232),imshow(J);title('pic2');
>>k1=medfilt2(J);
>>k2=medfilt2(J,[55]);
>>k3=medfilt2(J,[77]);
>>k4=medfilt2(J,[99]);
>>subplot(233),imshow(k1);title('3*3mobanzhongzhilvbo')
>>subplot(234),imshow(k2);title('5*5mobanzhongzhilvbo')
>>subplot(235),imshow(k2);title('7*7mobanzhongzhilvbo')
>>subplot(236),imshow(k2);title('9*9mobanzhongzhilvbo')
效果图:
5.图像的锐化
在图像的判读或识别中常需要突出边缘和轮廓信息。
图像锐化就是增强图像的边缘或轮廓。
图像平滑是通过积分过程使得图像边缘模糊,那么图像锐化则是通过微风而使图像边缘突出,清晰。
程序:
I=imread('D:
\hanxu\Documents\mas\Boy.bmp');%读取图像
subplot(131),imshow(I)
H=fspecial('Sobel');
H=H';
TH=filter2(H,I);
subplot(132),imshow(TH,[]);
H=H';
TH=filter2(H,I);
>>subplot(133),imshow(TH,[])
效果图:
6.频域图像增强:
f(x,y)和h(x,y)卷积定义为:
有:
设:
则:
频率域增强主要步骤:
(1)计算需要增强图的傅里叶变换;
(2)将其与1个转移函数相乘;
(3)再将结果傅里叶反变换以得到增强的图像。
常用的频域增强方法有:
低通滤波、高通滤波、
带通和带阻滤波、同态滤波等
1)频域低通滤波器增强
理想低通滤波器:
理想低通滤波器剖面图和透视图
设:
图像能量百分比:
低通滤波实例:
程序:
I=imread('D:
\hanxu\Documents\mas\Boy.bmp');%读取图像
subplot(331);imshow(I);
I=double(I);
f=fft2(I);
g=fftshift(f);
subplot(332);imshow(log(abs(g)),[]),color(jet(64));
[M,N]=size(f);
n1=floor(M/2);
n2=floor(N/2);
>>d0=5;
>>fori=1:
M
forj=1:
N
d=sqrt((i-n1)^2+(j-n2)^2);
ifd<=d0
h=1;
else
h=0;
end
g(i,j)=h*g(i,j);
end
end
>>g=ifftshift(g);
>>g=uint8(real(ifft2(g)));
>>subplot(333);
>>imshow(g);
效果图:
2)频域高通滤波器增强
理想高通滤波器:
理想高通滤波器剖面图和透视图
高通滤波实例:
程序如下:
I=imread('D:
\hanxu\Documents\mas\Boy.bmp');%读取图像
imshow(uint8(I));title('模糊图像');
I=double(I);
f=fft2(I);
g=fftshift(f);
[M,N]=size(f);
n1=floor(M/2);
n2=floor(N/2);
d0=20;
fori=1:
M
forj=1:
N
d=sqrt((i-n1)^2+(j-n2)^2);
ifd>=d0
h1=1;
h2=1+0.5;
else
h1=0;
h2=0.5;
end
g1(i,j)=h1*g(i,j);
g2(i,j)=h2*g(i,j);
end
end
g1=ifftshift(g1);
g1=uint8(real(ifft2(g1)));
subplot(221);imshow(g1);
title('理想高通滤波结果');
g2=ifftshift(g2);
g2=uint8(real(ifft2(g2)));
subplot(222);imshow(g2);
title('理想高通高强滤波结果');
n=2;
d0=20;
fori=1:
M
forj=1:
N
d=sqrt((i-n1)^2+(j-n2)^2);
ifd==0
h1=0;
h2=0.5;
else
h1=1/(1+(d0/d)^(2*n));
h2=1/(1+(d0/d)^(2*n))+0.5;
end
gg1(i,j)=h1*g(i,j);
gg2(i,j)=h2*g(i,j);
end
end
>>gg1=ifftshift(gg1);
>>gg1=uint8(real(ifft2(gg1)));
>>subplot(224);imshow(gg2);
Warning:
Displayingrealpartofcomplexinput.
>Inimuitools\private\imageDisplayValidateParams>validateCDataat149
Inimuitools\private\imageDisplayValidateParamsat31
Inimuitools\private\imageDisplayParseInputsat79
Inimshowat199
>>title('巴特沃斯高通加强滤波结果');
效果图: