数字图像处理同态滤波(matlab) 您所在的位置:网站首页 matlab增强图像亮度 数字图像处理同态滤波(matlab)

数字图像处理同态滤波(matlab)

2023-08-18 10:05| 来源: 网络整理| 查看: 265

定义

一幅图像可看成由两部分组成,即

img

fi代表随空间位置不同的亮度(Illumination)分量,其特点是缓慢变化,集中在图像的低频部分。fr代表景物反射到人眼的反射(Reflectance)分量,其特点包含了景物各种信息,高频成分丰富。

上式为同态滤波模型公式,其中, 0 < i ( x , y ) < 无 穷

和 0 < r ( x , y ) < 1

入射分量可以在0-无穷之间变化,反射分量只能在0-1之间变化,当反射分量为0时,说明物体将光全吸收,为黑色,当反射分量为1时,说明物体将光全反射,为白色。

同态滤波流程

同态滤波过程,分为以下5个基本步骤:

取对数 在这里插入图片描述取对数结果做傅里叶变换 在这里插入图片描述设计一个实中心对称的频域滤波器H(u,v),与上步傅里叶变换结果阵列相乘傅里叶反变换,返回到空域取指数,得空域滤波结果。

方框图表示如下:

img

可以看出同态滤波的关键在于同态滤波器H(u,v)的设计,同态滤波的目的在于:对一幅光照不均匀的图像,适当压制亮度分量,增强反射分量,以此来实现亮度调整与对比度提升,从而改善图像的视觉质量。

通过以上分析我们可以知道:同态滤波器可以由高通滤波器来实现,但是又不能完全截断低频成分,只要适当压低即可,所以同态滤波器的函数表示如下:

img 其 中 , y L < 1 , y H > 1 , 控 制 滤 波 器 幅 度 的 范 围 。 H h p 通 常 为 高 通 滤 波 器 , 如 高 斯 ( G a u s s i a n ) 高 通 滤 波 器 、 巴 特 沃 兹 ( B u t t e r w o r t h ) 高 通 滤 波 器 、 L a p l a c i a n 滤 波 器 等 。 其中,yL< 1, yH >1,控制滤波器幅度的范围。Hhp通常为高通滤波器,如高斯(Gaussian)高通滤波器、巴特沃兹(Butterworth)高通滤波器、Laplacian滤波器等。 其中,yL1,控制滤波器幅度的范围。Hhp通常为高通滤波器,如高斯(Gaussian)高通滤波器、巴特沃兹(Butterworth)高通滤波器、Laplacian滤波器等。 如高通滤波器采用高斯高通滤波器则有如下形式:

img

同态滤波器对应的图像表示如下:

其中, c为一个常数,控制滤波器形态,从低频到高频的斜率,c越大,斜坡带越陡峭

img

matlab实现代码

注意:取指数后一定要进行像素拉伸

%读入图片 img = imread('office.png'); img = rgb2gray(img); figure(1); subplot(2, 1, 1); imshow(img); title('Raw Image'); gamma_H = 2; gamma_L = 0.25; c = 0.25; D0 =100; f = double(img); f = log(f + 1);%取指数 F = fft2(f);%傅里叶变换 F=fftshift(F);%频谱搬移 [height, width] = size(F); %设计一个同态滤波器 H = HomomorphicFiltering(gamma_H, gamma_L, c, D0, height, width); g=H.*F;%同态滤波 g = ifft2(ifftshift(g));%频谱搬移,傅里叶逆变换 g = exp(g)-1; g = real(g); %拉伸像素值 new_img = Expand(g); subplot(2,1,2); imshow(new_img); title('Homomorphic Filtered Image(D0 = 100)'); function new_img = Expand( img ) [height, width] = size(img); max_pixel = max(max(img)); min_pixel = min(min(img)); new_img=zeros(height,width); for i = 1 : height for j = 1 : width new_img(i, j) = 255 * (img(i, j) - min_pixel) / (max_pixel - min_pixel); end end new_img = uint8(new_img); end function H = HomomorphicFiltering( gamma_H, gamma_L, c, D0, height, width ) for i = 1 : height x = i - (height / 2); for j = 1 : width y = j - (width / 2); H(i, j) = (gamma_H - gamma_L) * (1 - exp(-c * ((x ^ 2 + y ^ 2) / D0 ^ 2))) + gamma_L; end end end 运行结果

img

参考链接

图像的同态滤波原理及实现



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有