六、图像的重建与复原(MATLAB)下

一、仅有噪声的复原——空间滤波

如果出现的退化仅是噪声,所选择的方法是空间滤波。
1,空间噪声滤波器
根据各种类型滤波器公式,定义M函数,实现各种滤波器

function f=gmean(g,m,n)
%几何平均滤波器
[g,revertclass]=tofloat(g);
f=exp(imfilter(log(g),ones(m,n),'replicate')).^(1/m/n);
f=revertclass(f);

function f=harmean(g,m,n)
%调和均值滤波器
[g,revertclass]=tofloat(g);
f=m*n./imfilter(1./(g+eps),ones(m,n),'replicate');
f=revertclass(f);

function f=charmean(g,m,n,q)
%逆调和均值滤波器
[g,revertclass]=tofloat(g);
f=imfilter(g.^(q+1),ones(m,n),'replicate');
f=f./(imfilter(g.^q,ones(m,n),'replicate')+eps);
f=revertclass(f);

function f=alphatrim(g,m,n,d)
%修正的alpha均值滤波器
if (d<=0)||(d/2~=round(d/2))%round 四舍五入函数
    error('d must be a positive,even integer')
end
[g,revertclass]=tofloat(g);
f=imfilter(g,ones(m,n),'symmetric');
for k=1:d/2
    f=f-ordfilt2(g,k,ones(m,n),'symmetric');
end
for k=(m*n-(d/2)+1):m*n
    f=f-ordfilt2(g,k,ones(m,n),'symmetric');
end
f=f/(m*n-d);
f=revertclass(f);

定义spfilt函数执行执行上述空间滤波

function f=spfilt(g,type,varargin)
[m,n,Q,d]=processInputs(varargin{:});
switch type
    case 'amean'
        w=fspecial('average',[m,n]);
        f=imfilter(g,w,'replicate');
    case 'gmean'
        f=gmean(g,m,n);
    case 'hmean'
        f=harmean(g,m,n);
    case 'chmean'
        f=charmean(g,m,n,Q);
    case 'median'
        f=medfilt2(g,[m,n],'symmetric');
    case 'max'
        f=imdilate(g,ones(m,n));
    case 'min'
        f=imerode(g,ones(m,n));
    case 'midpoint'
        f1=ordfilt2(g,1,ones(m,n),'symmetric');
        f2=ordfilt2(g,m*n,ones(m,n),'symmetric');
        f=imlincomb(0.5,f1,0.5,f2);
    case 'atrimmed'
        f=alphatrim(g,m,n,d);
    otherwise
        error('错误的类型')
end

对被椒盐噪声污染的图像进行滤波,选取Q为负值 的逆调和滤波:

>> fs=spfilt(gp,'chmean',3,3,-1.5);

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
盐粒噪声污染图像后,图像出现大量盐粒状白色斑点,对深色图像影响较大,使用Q为负值的逆调和滤波器后,盐粒噪声被剔除,得到图像效果较好。

对被椒盐噪声污染的图像进行滤波,选取Q为正值的逆调和滤波:

>>fp=spfilt(gp,'chmean',3,3,1.5);

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
胡椒噪声污染图像后,图像出现大量胡椒状黑色斑点,对浅色图像影响较大,使用Q为正值的逆调和滤波器后,胡椒噪声被剔除,得到图像效果较好。
2.自适应空间滤波器
考虑到图像中不同位置的不同特性,需要一个能够根据被滤波区域的图像特性而自适应其特性的滤波器来改进结果。对于一个自适应中值滤波器,Sxy表示一幅子图像,子图像的中心位于将被处理图像中的位置的(x,y)处。
令Zmin=Sxy中最小的灰度值,Zmax=Sxy中最大的灰度值,Zmed=Sxy中的灰度中值,Zxy=坐标(x,y)处的灰度值。
自适应中值滤波算法使用两个处理层次,表示为层次A和层次B:
层次A:如果,Zmin<Zmed<Zmax,转到层次B
否则增大窗口尺寸
如果窗口尺寸<=Smax,重复A
否则输出Zmed
层次B:如果,Zmin<Zxy<Zmax,输出Zxy
否则输出Zmed
Smax表示自适应滤波器窗口允许的最大尺寸。
算法实现:

 g = imnoise(f,'salt & pepper',0.25);
>> f1=medfilt2(g,[7 7],'symmetric');
>> f2=adpmedian(g,7);
>> imshow(f1)
>> figure,imshow(f2)
>> figure,imshow(f)

在这里插入图片描述
在这里插入图片描述
将中值滤波与自适应中值滤波得到的结果进行比较,两者确实都实现了滤掉椒盐噪声的目的。但是观察图像 可知,中值滤波的图像虽然滤去了噪声干扰,但是得到的图像非常模糊和失真,相比来说,自适应中值滤波的图像不仅消除了椒盐噪声,而且恢复的图像本身模糊和失真要小很多。

二、退化函数建模

在图像复原问题中遇到的一个主要的退化始图像模糊。场景和传感器两者导致的模糊可以用空间域或频域的低通滤波器来建模。另外一个重要的退化模型是由于在图像获取时传感器和场景之间的均匀线性运动而生成的图像模糊,图像模糊可以使用fspecial来建模:
PSF=fspecial(‘motion’,len,theta)
调用fspecial将返回PSF,该PSF用来近似摄像机线性移动len个像素的效果。参数theta的单位为度,它是关于正水平轴以顺时针方向测得的。默认值分别为9,0;对应于水平方向移动9个要素。
模糊的带噪图像的建模:
生成一幅棋盘状图像

f=checkerboard(8);

得到退化图像

PSF=fspecial('motion',7,45);
gb=imfilter(f,PSF,'circular');

产生高斯噪声

noise=imnoise2('gaussian',size(f,1),size(f,2),0,sqrt(0.001));

产生模糊带噪图像

g=gb+noise;

放大图像

imshow(pixeldup(f,8),[])

在这里插入图片描述

三、维纳滤波

维纳滤波是一种最早也最为知名的线性图像复原方法。维纳滤波器寻找统计误差函数:

在这里插入图片描述
的一个最小估计,E是期望值算子,f是为退化图像。这个表达式在频域的解是:
在这里插入图片描述
式中,H(u,v)是退化函数
使用函数deconvwnr复原模糊的带噪图像
假设噪信比是0,这种形式得到的是逆滤波的结果

frest1=deconvwnr(g,PSF);

假设噪信比已知,不是常量就是数组,实现参数维纳滤波

Sn=abs(fft2(noise)).^2;
 nA=sum(Sn(:))/numel(noise);
>> Sf=abs(fft2(f)).^2;
>> fA=sum(Sf(:))/numel(f);
>> R=nA/fA;
>> frest2=deconvwnr(g,PSF,R);

假设噪声和退化函数的自相关函数都是已知的

NCORR=fftshift(real(ifft2(Sn)));
>> ICORR=fftshift(real(ifft2(Sf)));
>> frest3=deconvwnr(g,PSF,NCORR,ICORR);

在这里插入图片描述
由于噪声的影响直接进行逆滤波得到的结果如第二幅图所示,滤波效果不理想。运用平均噪声功率与图像的平均功率的比例R,恢复图像,得到的效果图即第三幅图片,滤波效果明显优于第二幅图片,但仍然存在大量噪声,不是我们理想的滤波图像。第四幅图像,使用自相关函数,结果相比于前两幅图像是最接近于原图像,但仍然存在一些噪声。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值