判断噪声类型,选择合适的滤波器对图像进行复原

判断噪声类型,选择合适的滤波器对图像进行复原

   提取图像的一部分进行直方图统计,判断出噪声的类型并选择合适的滤波器对这幅图像进行复原。

算法思想
通过roipoly函数动态获取图像的局部图像,再通过histroi函数统计选取的局部图像的直方图存储到p向量中,用bar画图函数画出局部图像的直方图,通过直方图的密度函数图形判断为高斯噪声,用谐波均值滤波器处理的图像,谐波均值滤波器适合于处理高斯等随机噪声。谐波均值滤波器根据它的定义实现滤波函数。

画直方图函数

function [p, npix] = histroi(f, c, r)
%计算被选取区域的直方图,p是直方图
B = roipoly(f, c, r);%生成二进制掩码图像
p = imhist(f(B)); %计算该区域的直方图
if nargout > 1  %获取图像中的像素数
   npix = sum(B(:)); 
end
end

谐波均值滤波函数

function harmeanf = harmeanfil(I,n)
%I为原图,n为滤波器的大小,谐波均值滤波器
[r,c]=size(I);  %图像的行和列
dI=double(I);
dt=n-1;  %边缘需要扩充的距离
f=zeros(r+dt,c+dt);  %对边缘进行0值处理,根据滤波器的大小把图像扩大
fi=zeros(r+dt,c+dt);
for i=1:r  
    for j=1:c
      f((i+dt/2),(j+dt/2))=dI(i,j);
    end
end
for i=1+dt/2:r+dt/2  %对中心元素进行均质化
    for j=1+dt/2:c+dt/2
        w=f((i-dt/2):(i+dt/2),(j-dt/2):(j+dt/2)); %滤波器选中元素
        sumw=sum(sum(1./w));
        fi(i,j)=n*n/sumw; %将与模板运算后的各元素的均值赋给模板中心位置的元素
    end
end
harmeanf=zeros(r,c); %裁剪
for i=1:r
    for j=1:c
        harmeanf(i,j)=fi(i+dt/2,j+dt/2);  %将扩大的图像转变为原图大小
    end
end
end

测试代码

I=imread('original.bmp');
imshow(I);title('原图');
[B,c,r] = roipoly(I);  %交互选取roi
figure,imshow(B);title('选取的roi图像');
[p npix] = histroi(I,c,r); %计算选取图像的直方图
subplot(221),bar(p,1);title('选中区域的直方图'); %根据计算的元素个数画直方图
axis tight;%使直方图紧凑
hI=uint8(harmeanfil(I,7));
subplot(223);imhist(I);title('原图的直方图');
subplot(222);imshow(hI);title('滤波处理后的图');
subplot(224);imhist(hI);title('滤波处理后图的直方图');

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
通过选中的区域画出直方图,判断它的概率密度函数于高斯噪声的密度函数分布较相近,则选择使用谐波均值滤波器处理图像,处理后的图像高斯噪声减弱。

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值