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

感到有白色噪点分布,视觉效果不好。采用同态滤波的方式进行处理,滤波方式尝试理想滤波、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滤波,将三者进行对比

对比总结

直方图均衡对于改善低照图图像的灰度分布有更好的效果,可以显著地凸显暗部,增强对比度,将原图中难以观察到的物体都能够很好地显示。但由于直方图均衡合并了一些灰度级,也使一些部位的边缘细节被抹去,例如车上的车窗,集装箱上的条纹等等。
而同态滤波仅仅对具有丰富,锐利边缘的细节进行了增强,但并不能改善原图像的暗部,因为原图像的暗部也是低频成分居多。
同时,直方图均衡的效果与图像本身的性质关联不大,在任何图像上都能取得不错的效果。但同态滤波参数的设置需要根据图像的特点进行配置,同一套参数在往往在另一幅图像上的效果很不理想,若想要同态滤波取得比较好的效果,需要先根据图像设置参数。
总的来说,直方图均衡更具有自适应性,同时能从图像总体上进行增强,无论是暗部还是高光,都起到增强对比度,提升细节的效果。同态滤波可以提升边缘的细节,压缩图像的动态范围,从而提升对比度。
参考文章
- 把一个矩阵矩阵范围拉伸到minVal~maxVal的范围内
- 数字图像处理-频域滤波-高通/低通滤波
- 《数字图像处理 实验报告》施珉