当前位置:   article > 正文

3.5 Python图像的频域图像增强-同态滤波器_同态滤波 python

同态滤波 python

3.5 Python图像的频域图像增强-同态滤波器

1 算法原理

同态滤波是一种在频域中同时能够压缩图像的亮度范围和增强图像对比度的方法。下面推导同态滤波的流程:

基于图像成像模型:一幅图像f(x, y)可以表示成它的照度分量i(x, y)与反射分量r(x, y)的乘积。

成像模型(照度和反射) :

f(x,y)=i(x,y)r(x,y)

(1)两边取对数:

lnf(x,y)= lni(x, y) +Inr(x,y)

(2)两边取傅立叶变换:

F(u,v)= I(u,v) + R(u,v)

(3)用一频域函数H(u, v)处理F(u, v): .

H(u,v)F(u,v)= H(u,v)I(u,v)+ H(u,v)R(u,v)

(4)反变换到空域:

image-20210713094835084

(5)两边取指数:

image-20210713094848143

同态滤波器处理流程如下:

image-20210713094932003

H(u, v):同态(homomorphic)滤波器,分别作用于照度分量和反射分量

(1)图像照射分量变化缓慢;反射分量在边缘处变化剧烈

(2)图像对数的傅立叶变换后的低频部分对应照度分量,高频部分对应反射分量

同态滤波器的特点:对高频和低频成分有不同的影响。

2 代码

运行代码说明

1.要改变代码中的图片地址(地址不能有中文)

更改put(path)函数中的路径put(r'../image/image1.jpg')

2.注意最后的plt.savefig('1.new.jpg')是保存plt图像,如果不使用可以注释掉

import os
import numpy as np
import cv2
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False


# 同态滤波器
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

def put(path):
    image = cv2.imread(path, 1)
    # image = cv2.imread(os.path.join(base, path), 1)
    image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    # 同态滤波器
    h_image = homomorphic_filter(image, d0=10, r1=0.5, rh=2, c=4, h=2.0, l=0.5)
    plt.subplot(121)
    plt.axis('off')
    plt.title('原始图像')
    plt.imshow(image, cmap='gray')

    plt.subplot(122)
    plt.axis('off')
    plt.title('同态滤波器图像')
    plt.imshow(h_image, 'gray')

    # plt.savefig('5.new.jpg')
    plt.show()

# 图像处理函数,要传入路径
put(r'../image/image3.jpg')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51

3 效果

image-20210713095233022

image-20210713095244980

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/78305
推荐阅读
相关标签
  

闽ICP备14008679号