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)函数来实现,转换后得到的图像为: