matlab 实现同态滤波算法 并于直方均衡化相比较 看看谁的效果更好

一、灰度图同态滤波与直方均衡化的比较

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;

在对傅里叶变化的图像进行反变换后,未进行:
. ∗ − 1 ( X + Y ) .*-1^{\left( X+Y \right)} .1(X+Y)
导致混入了噪声。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Free God

随缘

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值