频域增强-同态滤波

任务

对一张暗度较高的图像进行处理,直方图均衡的结果差强人意。

感到有白色噪点分布,视觉效果不好。采用同态滤波的方式进行处理,滤波方式尝试理想滤波、butterworth滤波以及gaussian滤波。

代码

%% 频域滤波-同态滤波
% Function:将灰度图grayImg进行同态滤波
% grayImg:灰度图
% DL:低频阈值
% redundancy:冗余参数
% HL:传递函数最小值(对应低频)
% HH:传递函数最大值(对应高频)
% filter:0-理想
%         1-butterworth
%         2-gaussion
% Date:2020/10/9
% Author:leezeeyee
function [result,H] = homomorphicFilter(grayImg,DL,redundancy,HL,HH,filter)
if nargin<5
    DL=5;
    redundancy=5;
    HL=0.5;
    HH=1.5;
    filter=2;% 默认为gaussion滤波
elseif nargin<2
    DL=5;
    redundancy=5;
    HL=0.5;
    HH=1.5;
elseif nargin<4
    HL=0.5;
    HH=1.5;
end
% 先取对数
% 像素值0-255-》1-256
doubleImg=double(grayImg);
logImg=log(doubleImg+1);
% 傅氏变换
freqImg=fft2(logImg);
if filter==0
%     理想滤波器
    [freqImg,H]=idealFilter(freqImg,DL,redundancy,HL,HH);
elseif filter==1
%     butterworth滤波器
    [freqImg,H]=butterworthFilter(freqImg,DL,HL,HH);
else
%     gaussion滤波器
    [freqImg,H]=gaussionFilter(freqImg,DL,HL,HH);
end
% 取指数
result=exp(abs(ifft2(freqImg)))-1;
end

思路

按照光图像的成像原理,可以对一幅图像进行简单建模:

𝒇(𝒙,𝒚)=𝒊(𝒙,𝒚)·𝒓(𝒙,𝒚)

即把图像亮度 𝒇(𝒙,𝒚) 看成是由入射分量(入射到景物上的光强度)𝒊(𝒙,𝒚) 和反射分量(景物反射的光强度)𝒓(𝒙,𝒚) 组成。

同态滤波的基本思想是减少入射分量 ,并同时增加反射分量 𝒓(𝒙,𝒚) 来改善图像 𝒇(𝒙,𝒚) 的显示效果;𝒊(𝒙,𝒚) 在空间上变化缓慢,其频谱集中在低频段,𝒓(𝒙,𝒚) 反映图像的细节和边缘,其频谱集中在高频段。 为了将入射分量和反射分量分离,方便进行入射分离的削弱和反射分量的增强,需要对图像先取对数,再进行傅里叶变换,对频谱上设计相应的传递函数进行滤波后,反变换回空域,指数处理后就得到了相应的增强图像。

整个过程的流程是比较清晰的,最初容易迷惑的一点是如何获得入射分量 𝒊(𝒙,𝒚) 和反射分量 𝒓(𝒙,𝒚)——二者无法分离得到具体数据,只是在频域中有区分度。

此外,最核心的一点是设计滤波器实现对两种分量的作用,这对整个滤波效果的影响是最为显著的。过程中,我首先简化问题,设计理想滤波器实现,思路如下:

在傅氏变换后的频谱图中,未经频移时,低频分量在四个角落,高频分量在中心点处。为了符合认知,故先将变换后图片进行频移,进行处理后,再反向频移。

此后,为了达到更好的效果,又采用butterworth函数与gaussion函数实现滤波,并对其效果进行对比。

实现效果

理想滤波

代码

%% 空域锐化滤波-理想高通滤波
% Function:将傅里叶变换过的频谱图freqImg进行高通滤波
% DL:低频阈值
% DH:高频阈值
% HL:低频传递函数
% HH:高频传递函数
% result:滤波后频谱图
% H:传递函数
% Date:2020/10/9
% Author:leezeeyee
function [result,H] = idealFilter(freqImg,DL,DH,HL,HH)
if nargin<2
    DL=5;
    DH=5;
    HL=0.5;
    HH=1.5;
elseif nargin<4
    HL=0.5;
    HH=1.5;
end
[M,N]=size(freqImg);
result=double(size(freqImg));
H=double(ones(size(freqImg)));
% 先进行频移
shiftImg=fftshift(freqImg);
% 对低频进行操作(频移后的中心处)
centerPr=M/2;
centerPc=N/2;
H(centerPr+1-DL:centerPr+DL,centerPc+1-DL:centerPc+DL)=HL;
% 对低频进行操作(频移后的四角处)
H(1:DH,1:DH)=HH;
H(1:DH,N-DH:N)=HH;
H(M-DH:M,1:DH)=HH;
H(M-DH:M,N-DH:N)=HH;
result=ifftshift(shiftImg.*H);
end

第一开始出现的效果很好,如右下角图所示,整个画面出现了一些事物的轮廓。但发现函数中未增加取指数部分,因此效果主体原因是动态范围压缩的作用(log(1+s))。当用直接动态压缩做为对比时,可见二者没有明显差别。

在原函数的基础上进行参数的调整,并没有较好的效果出现。

对不同截止频率得到的结果图像放大细节,可以看到有振铃效果出现。

butterworth滤波

用幂系数n可以改变滤波器的形状。n越大,则该滤波器越接近于理想滤波器。高通滤波即用1减低通滤波函数。

代码

%% 空域锐化滤波-Butterworth高通滤波
% Function:将傅里叶变换过的频谱图freqImg进行高通滤波
% DL:下限截止频率
% HL:传递函数最小值(对应低频)
% HH:传递函数最大值(对应高频)
% stage:阶数
% result:滤波后频谱图
% H:传递函数
% Date:2020/10/11
% Author:leezeeyee
function [result,H] = butterworthFilter(freqImg,DL,HL,HH,stage)
if nargin<5
    stage=1;
elseif nargin<3
    stage=4;
    HL=0.5;
    HH=1.5;
end
[M,N]=size(freqImg);
result=double(size(freqImg));
H=double(size(freqImg));
% 先进行频移
shiftImg=fftshift(freqImg);
% 对低频进行操作(频移后的中心处)
centerPr=M/2;
centerPc=N/2;
for row=1:M
    for col=1:N
        H(row,col)=(HH-HL)*(1-1/(1+ (((row-centerPr)^2+(col-centerPc)^2)/DL^2)^stage ))+HL;
        result(row,col)=H(row,col)*shiftImg(row,col);
    end
end
result=ifftshift(result);
end

不同截止频率

随着截止频率的提升,被压的低频成分增加,图像颜色愈深。

不同下限倍乘
不同上限倍乘

Gaussian滤波

代码

%% 空域锐化滤波-高通滤波
% Function:将傅里叶变换过的频谱图freqImg进行高通滤波
% DL:低频阈值
% DH:高频阈值
% HL:低频传递函数
% HH:高频传递函数
% Date:2020/10/11
% Author:leezeeyee
function [result,H] = gaussionFilter(freqImg,DL,HL,HH,C)
if nargin<5
    C=1;
elseif nargin<3
    C=4;
    HL=0.5;
    HH=1.5;
end
[M,N]=size(freqImg);
result=double(size(freqImg));
H=double(size(freqImg));
% 先进行频移
shiftImg=fftshift(freqImg);
% 对低频进行操作(频移后的中心处)
centerPr=M/2;
centerPc=N/2;
for row=1:M
    for col=1:N
        % 传递函数
        H(row,col)=(HH-HL)*(1-exp( -C*(((row-centerPr)^2+(col-centerPc)^2)/DL^2) ) )+HL;
        result(row,col)=H(row,col)*shiftImg(row,col);
    end
end
result=ifftshift(result);
end

最终运用Gaussian滤波,将三者进行对比

对比总结

直方图均衡对于改善低照图图像的灰度分布有更好的效果,可以显著地凸显暗部,增强对比度,将原图中难以观察到的物体都能够很好地显示。但由于直方图均衡合并了一些灰度级,也使一些部位的边缘细节被抹去,例如车上的车窗,集装箱上的条纹等等。

而同态滤波仅仅对具有丰富,锐利边缘的细节进行了增强,但并不能改善原图像的暗部,因为原图像的暗部也是低频成分居多。

同时,直方图均衡的效果与图像本身的性质关联不大,在任何图像上都能取得不错的效果。但同态滤波参数的设置需要根据图像的特点进行配置,同一套参数在往往在另一幅图像上的效果很不理想,若想要同态滤波取得比较好的效果,需要先根据图像设置参数。       

总的来说,直方图均衡更具有自适应性,同时能从图像总体上进行增强,无论是暗部还是高光,都起到增强对比度,提升细节的效果。同态滤波可以提升边缘的细节,压缩图像的动态范围,从而提升对比度。

参考文章

Leave a comment

Your email address will not be published. Required fields are marked *