基于MATLAB_GUI的数字图像处理程序设计课程设计 联系客服

发布时间 : 星期二 文章基于MATLAB_GUI的数字图像处理程序设计课程设计更新完毕开始阅读

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; 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

3.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,这两个函数同样只使用于二维数据,所以也要对二维和三维数据分开处理。

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

3.7、频谱分析

3.7.1、频谱图

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

3.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

for j=1:N

d=sqrt((i-m)^2+(j-n)^2); % 计算高通滤波器传递函数 if d<=d0 h=0; else h=1; end

result(i,j)=h*g(i,j); end end

result=ifftshift(result); y2=ifft2(result); y3=uint8(real(y2)); imshow(y3); end

3.7.3、通过低通滤波器

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

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

y1=imnoise(x,'salt & pepper'); % 叠加椒盐噪声

f=double(y1); % 数据类型转换,不支持图像的无符号整型的计算 g=fft2(f); % 傅立叶变换 g=fftshift(g); % 转换数据矩阵 [M,N]=size(g);

nn=2; % 二阶巴特沃斯(Butterworth)低通滤波器 d0=10; %截止频率为10 m=fix(M/2); n=fix(N/2);

for i=1:M

for j=1:N

d=sqrt((i-m)^2+(j-n)^2);

h=1/(1+0.414*(d/d0)^(2*nn));% 计算低通滤波器传递函数 result(i,j)=h*g(i,j); end end

result=ifftshift(result); y2=ifft2(result); y3=uint8(real(y2));

imshow(y3); % 显示滤波处理后的图像 end

3.8、灰度图像处理

3.8.1、二值图像

用j=im2bw(x);来对灰度图像到二值图像的转换。转换结果为:

3.8.2、创建索引图像

用X = grayslice(I,n)函数来实现,转换后得到的图像为: