数字图像处理Python语言实现-同态滤波增强与去雾处理

同态滤波增强

1 同态滤波概念

同态滤波是一种在频域中同时将图像亮度范围进行压缩并将图像对比度增强的方法。同态滤波增强属于图像频域处理范畴,作用是对图像灰度范围进行调整,通过消除图像上照明不均匀的问题,增强图像的细节,同时对不损失亮区的图像细节。

一幅图像如果由亮度成像模型表示,则能够使用它的入射光分量和反射光分量来表示 ,关系如下:
(4-1) f ( x , y ) = i ( x , y ) ⋅ r ( x , y ) f(x,y) = i(x,y) \cdot r(x,y) \tag{4-1} f(x,y)=i(x,y)r(x,y)(4-1)
另外,入射光分量 i ( x , y ) i(x,y) i(x,y)由照明决定,而反射光分量 r ( x , y ) r(x,y) r(x,y)则是由物体本身特性决定;入射光分量同傅立叶平面的低频分量相关,而反射光分量则同高频分量相关。

2 同态滤波增强

同态滤波增强是一种在频域中同时将图像亮度范围进行压缩和将图像对比度进行增强的方法。同态滤波增强的思路是把照度/入射分量的反射分量分开来并分别进行滤波。处理过程如下:
在这里插入图片描述

(1)先对公式(4-1)的两边同时取对数,即
(4-2) ln ⁡ f ( x , y ) = ln ⁡ i ( x , y ) + ln ⁡ r ( x , y ) \ln f(x,y) = \ln i(x,y) + \ln r(x,y) \tag{4-2} lnf(x,y)=lni(x,y)+lnr(x,y)(4-2)
(2)将上式两边取傅里叶变换,得
(4-3) F ( u , v ) = I ( u , v ) + R ( u , v ) F(u,v) = I(u,v) + R(u,v) \tag{4-3} F(u,v)=I(u,v)+R(u,v)(4-3)

(3)设用一个频域增强函数 H ( u , v ) H(u,v) H(u,v)处理 F ( u , v ) F(u,v) F(u,v),可得到
(4-4) H ( u , v ) F ( u , v ) = H ( u , v ) I ( u , v ) + H ( u , v ) R ( u , v ) H(u,v)F(u,v) = H(u,v)I(u,v)+H(u,v)R(u,v) \tag{4-4} H(u,v)F(u,v)=H(u,v)I(u,v)+H(u,v)R(u,v)(4-4)
(4)反变换得到空域,得
(4-5) h j ( x , y ) = h i ( x , y ) + h r ( x , y ) h_j(x,y) = h_i(x,y) + h_r(x,y) \tag{4-5} hj(x,y)=hi(x,y)+hr(x,y)(4-5)
由此可以知道,增强后的图像分别对应入射光分量和反射光分量两部分叠加而。

(5)将上式两边取指数,得
(4-6) g ( x , y ) = exp ⁡ ( ∣ h j ( x , y ) ∣ ) = exp ⁡ ( ∣ h i ( x , y ∣ ) ⋅ exp ⁡ ( ∣ h r ( x , y ∣ ) g(x,y) = \exp(|h_j(x,y)|) = \exp(|h_i(x,y|) \cdot \exp(|h_r(x,y|) \tag{4-6} g(x,y)=exp(hj(x,y))=exp(hi(x,y)exp(hr(x,y)(4-6)

由于同态滤波函数与高通滤波器的转移函数具有类似的形状,因此可以使用高通滤波器的转移函数来逼近同态滤波函数。则同态滤函增强可以使用以下公式表示:

(4-7) H h o m o ( u , v ) = [ H H − H L ] H h i g h ( u , v ) + H L H_{homo}(u,v) = [H_H - H_L]H_high(u,v) + H_L \tag{4-7} Hhomo(u,v)=[HHHL]Hhigh(u,v)+HL(4-7)

其中, H h o m o H_{homo} Hhomo表示同态滤波函数, H h i g h H_{high} Hhigh表示高通滤器转移函数, H H H_H HH H L H_L HL为高通滤波器转移函数映射到[ H L H_L HL, H H H_H HH]区间

Python实现代码如下:

def homomorphic_filter(src,d0 = 10,r1 = 0.5,rh=2,c=4,h=2.0,l=0.5):
    gray = src.copy()
    if len(src.shape) > 2:
        gray = cv2.cvtColor(src,cv2.COLOR_BGR2GRAY)
    gray = np.float64(gray) 
    rows,cols = gray.shape
   
    gray_fft = np.fft.fft2(gray)
    gray_fftshift = np.fft.fftshift(gray_fft)
    dst_fftshift = np.zeros_like(gray_fftshift)
    M,N = np.meshgrid(np.arange(-cols // 2,cols // 2),np.arange(-rows//2,rows//2))
    D = np.sqrt(M ** 2 + N ** 2)
    Z = (rh - r1) * (1 - np.exp(-c * (D ** 2 / d0 ** 2))) + r1
    dst_fftshift = Z * gray_fftshift
    dst_fftshift = (h - l) * dst_fftshift + l
    dst_ifftshift = np.fft.ifftshift(dst_fftshift)
    dst_ifft = np.fft.ifft2(dst_ifftshift)
    dst = np.real(dst_ifft)
    dst = np.uint8(np.clip(dst,0,255))
    return dst

程序运行的结果如下:
数字图像处理Python语言实现-同态滤波增强与去雾处理_第1张图片

左边为原图像,右边为同态滤波增强后的图像。
参考:

  • 1.[图像工程.上册.图像理解.章毓晋.第三版]

你可能感兴趣的:(Python学习,图像处理,机器视觉,数字图像处理与Python实现)