一、灰度图同态滤波与直方均衡化的比较
1、灰度图同态滤波
Figure
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U2OVYl29-1641880930896)(E:\Homework\数字图像处理\课上\数字图像处理作业8\图片\2.png)]
Code
clear
close all
aIn = imread("body.jpg");
[aOut,x,y] = Homofilter(aIn);
figure,
subplot(121),imshow(aIn,[]),title('原图')
subplot(122),imshow(aOut,[0 70]),title('同态滤波后图片')
figure,
plot(x,y),title("同态滤波器剖线")
Function
function [aOut,x,y] = Homofilter(aIn,D0,rH,rL,c)
% 这仅仅是一个同态滤波器
% aIn 需要进行滤波的灰度图像
% D0 截止频率,越大图像越亮
% rH 高频增益,需要大于1
% rL 低频增益,取值在0和1之间
% c 锐化系数
% 输出为进行滤波之后的灰度图像
%设置预定参数(D0为滤波器半径,rH>1,rL<1,是常系数)
if nargin == 1
D0 = 80;
rH = 2;
rL = 0.2;
c = 1.5;
elseif nargin == 2
rH = 2;
rL = 0.2;
c = 1.5;
elseif nargin == 3
rL = 0.2;
c = 1.5;
elseif nargin == 4
c = 1.5;
end
%输入图像及转为双精度
aDouble = double(aIn);
%获取源图像大小及填充
[ra,ca] = size(aIn);
maxL = max(ra,ca);
n = 1;
while(maxL>2^n)
n = n+1;
end
aZero = zeros(2^n,2^n);
aZero(1:ra,1:ca) = aDouble;
aFill = aZero;
%读取填充后图像大小
[Ra,Ca] = size(aFill);
[X,Y] = meshgrid(0:Ra-1,0:Ca-1);
%制作滤波器
r = D0.*Ra./maxL;%%%留白点
Duv = (X+1-round(Ra/2)).^2 + (Y+1-round(Ca/2)).^2;
Huv = (rH-rL).*(1-exp(-c.*(Duv./(r.^2))))+rL;
%处理图像
aLog = log(aFill+1);
afft2 = myfft2(aLog.*(-1).^(X+Y));
aH = afft2.*Huv;
aifft2 = myifft2(aH);
ae = exp(aifft2.*(-1).^(X+Y))-1;
aOut1 = ae(1:ra,1:ca);
maxaOut1 = max(aOut1(:));
aOut = 255.*aOut1./maxaOut1;
% %对比显示效果
x = 0:Ra-1;
y = Huv(Ra/2,:);
end
2、直方均衡化灰度图
Figure
Code
clear
close all
aIn = imread("body.jpg");
aOut = stra_eq(aIn);%这是直方均衡化函数
figure
subplot(121),imshow(aIn,[]),title('原图')
subplot(122),imshow(aOut,[]),title('直方均衡化后图片')
3、对比结论
Figure
结论:
同态滤波在增强阴影部分的显示更有优势。
直方均衡化增强了对比度但是对阴影部分的增强不明显。且对原图较亮部分增强后反而不容易观察
二、彩色图同态滤波与直方均衡化比较
1、同态滤波
Figure
Code
clear
close all
D0 = 500;
rH = 2;
rL = 0.2;
c = 0.1;
aIn = imread("yejing.jpg");
ar = aIn(:,:,1);
ag = aIn(:,:,2);
ab = aIn(:,:,3);
aOut1 = aIn;
aOut1(:,:,1) = Homofilter(ar,D0,rH,rL,c);
aOut1(:,:,2) = Homofilter(ag,D0,rH,rL,c);
aOut1(:,:,3) = Homofilter(ab,D0,rH,rL,c);
figure,imshow(aIn,[]),title("原图")
figure,imshow(aOut1,[]),title("同态滤波后图像")
2、直方均衡化
Figure
Code
clear
close all
aIn = imread("yejing.jpg");
ar = aIn(:,:,1);
ag = aIn(:,:,2);
ab = aIn(:,:,3);
aOut1 = aIn;
aOut1(:,:,1) = stra_eq(ar);
aOut1(:,:,2) = stra_eq(ag);
aOut1(:,:,3) = stra_eq(ab);
figure,imshow(aIn,[]),title("原图")
figure,imshow(aOut1,[]),title("直方均衡化后图像")
3、心得及结论
(1)在同态滤波器中,瑞华系数c关乎到输出图像的亮暗,小于1的时候图像更亮,大于1后图像迅速变暗。
(2)D0即滤波器半径,滤波器半径越大,图像越亮,但是并非D0越大滤波效果越好,具体应该根据图来确定,多调试参数才能找到适合每一张图片的值
(3)对于直方均衡化的同态滤波的比较,不考虑细节的话,直方均衡化处理的图片更加的美观,增强效果也比较好,但是对于需要显示更多的细节的时候,同态滤波能够更容易分辨原图中亮的部分。
三、过程中遇到的问题及纠错
1、正确同态滤波和错误同态滤波的比较
粗看感觉两幅图相差不大,但是观察两幅图放大n倍的像素点,就可以知道两幅图的差异(如下图)
左边的随便放大都不会出现周期性的噪声,右边的放大后出现明显的黑白交替点(周期性噪声),此类错误不容易发现(因为结果看起来差不多),但是却对最终的成像质量有影响,尤其是对彩色图的同态滤波有影响,如下图所示:
正确同态滤波:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BlrT6CCK-1641880930900)(E:\Homework\数字图像处理\课上\数字图像处理作业8\图片\10.png)]
错误同态滤波:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cApYvbRm-1641880930905)(E:\Homework\数字图像处理\课上\数字图像处理作业8\图片\6.png)]
2、出现错误原因
错误代码:
ae = exp(aifft2)-1;
正确代码:
ae = exp(aifft2.*(-1).^(X+Y))-1;
在对傅里叶变化的图像进行反变换后,未进行:
导致混入了噪声。