基于MATLAB的图像处理的课程设计论文 下载本文

6.3.1、上下翻转

函数flipud是实现一个二维矩阵的上下翻转,如

a=[1 2;3 4],经过该函数处理后,原矩阵变为[3 4;1 2];所以利用该函数也可以对图像进行上下翻转处理,但由于该函数针对二维数据的处理,所以在写程序时,要对RGB图像和灰度图像分开处理,这就要用到isrgb函数来判断,如果是灰度图像,

则可以直接用这个函数进行处理,否则就要对RGB图像进行降维处理, for k=1:3

y(:,:,k)=flipud(x(:,:,k)); end

处理结果如图:

6.3.2、左右翻转

对图像的左右翻转也可以用fliplr函数来处理,同样的,也要对灰度和彩色图像分开处理,处理结果如图:

6.3.3任意角度翻转

用函数imrotate来实现对图像的插值旋转。 该函数的调用格式如下:

B=imrotate(A,angle,method,’crop’)

其中,参数method用于指定插值的方法,可选的值可以有三种,分别为邻近插值,双线性插值,双三次插值,缺省时为邻近插值,参数angle代表旋转的角度。

一般来说,旋转后的图像会比原图大,用户可以指定“crop”参数对旋转后

9

的图像进行剪切(取图像的中间部分),使返回的图像与原图大小相同。执行结果为:

6.4、 噪声

经常用到的噪声有三种,高斯噪声,椒盐噪声,乘性噪声,可以通过以下三个函数来实现:

y=imnoise(handles.img,'gaussian',p1,p2);%高斯噪声 y=imnoise(x,'salt & pepper',p1); %椒盐噪声 y=imnoise(handles.img,'speckle',p1); %乘性噪声

p1,p2的参数也通过输入对话框的形式得到,原图加入高斯噪声后结果如下所示:

6.5、 滤波

这里选择三种滤波方法,

k=medfilt2(handles.noise_img);%中值滤波

k=wiener2(handles.noise_img,[5,5]);%自适应滤波

k=filter2(fspecial('average',3),handles.noise_img)/255;%平滑滤波

同样的,这些函数也是针对二维数据,所以要先判断是彩色图像还是灰度图像,然后分别进行处理,下面是对彩色图像的自适应滤波处理: i=handles.noise_img;

10

if isrgb(i)

a=handles.noise_img(:,:,1); b=handles.noise_img(:,:,2); c=handles.noise_img(:,:,3);

k(:,:,1)=wiener2(a,[5,5]); k(:,:,2)=wiener2(b,[5,5]); k(:,:,3)=wiener2(c,[5,5]); imshow(k); 执行结果如图:

对其他方法的滤波程序也类似,由于把各个滤波方法放在一个选择框里,所以程序要用以下的选择语句:

switch str

case '中值滤波' case '自适应滤波' case '平滑滤波'

end

6.6、 直方图统计

用imhist函数对图像数据进行直方图统计,

x=imhist(handles.img(:,:,1)); bar(horz,x);

其中,x矩阵的数据是0~255灰度值的统计个数,如果直接对x矩阵数据进行图形图显示,由于有256个数据,在坐标系中就会很密集,为了更清楚的显示条形图,所以在程序设计时,把x数据进行部分提取,

x1=x(1:10:256); horz=1:10:256; bar(horz,x1);

除了显示数据的直方图统计外,还可以对图像进行均衡处理,所用到的函数是histeq,这两个函数同样只使用于二维数据,所以也要对二维和三维数据分开处理。

直方图显示和均衡后的图像分别如下图所示

11

6.7、 频谱分析 6.7.1、频谱图

为了得到图像的频谱图,先要对数据进行傅里叶变换,用fft2函数对二维数据进行快速傅里叶变换,同时为了更好的观察频谱图,需要把fft2变换后的数据进行平移,利用fftshift函数,把快速傅里叶变换的DC 组件移到光谱中心。这样图像能量的低频成分将集中到频谱中心,图像上的边缘、线条细节信息等高频成分将分散在图像频谱的边缘。如下图所示:

6.7.2、通过高通滤波器

axes(handles.axes2); x=(handles.img); if isrgb(x)

msgbox('这是彩色图像,不能通过高通滤波器','失败'); else

y1=imnoise(x,'gaussian'); %加高斯噪声 f=double(y1); % 数据类型转换 k=fft2(f); % 傅立叶变换 g=fftshift(k); % 转换数据矩阵 [M,N]=size(g); nn=2;

d0=3; %截止频率为3 m=fix(M/2); n=fix(N/2); for i=1:M

12