代码如下
clc
close all;
clear all;
X=imread('');
I=rgb2hsv(X);
h=I(:,:,1);
S=I(:,:,2);
V=I(:,:,3);
[M,N]=size(V);
rL=0.2;
rH=2;%可根据需要效果调整参数
c=1;
d0=300;
I1=log(double(V)+eps);%取对数
FI=fft2(I1);%傅里叶变换
n1=floor(M/2);
n2=floor(N/2);
for u=1:M
for v=1:N
D(u,v)=sqrt((u-n1)^2+(v-n2)^2);
H(u,v)=(rH-rL).*(1-exp(-c.*(D(u,v)^2./d0^2)))+rL;%高斯同态滤波
end
end
I2=ifft2(H.*FI);%傅里叶逆变换
I3=real(exp(I2));
%S=adapthisteq(S);
HSV(:,:,1)=h;
HSV(:,:,2)=S;
HSV(:,:,3)=I3;
img=hsv2rgb(HSV);
figure;
imshow(img);
figure;
%x=0:1:1000;
%y=(rH-rL).*(1-exp(-c.*(x.^2./(d0^2))))+rL;
[x,y]=meshgrid(-100:1:100);
D=sqrt((x-n1)^2+(y-n2)^2)
H=(rH-rL).*(1-exp(-c.*(D.^2./d0.^2)))+rL;%高斯同态滤波
mesh(x,y,H,'edgecolor','green');
title('同态滤波函数');
figure;
imshow(X);
运行结果
处理前
处理后