当前位置:   article > 正文

3.3 Python图像的频域图像增强-特殊高通滤波器_高通滤波将低平分量滤掉,导致平坦区域灰度接近

高通滤波将低平分量滤掉,导致平坦区域灰度接近

3.3 Python图像的频域图像增强-特殊高通滤波器

1 算法原理

特殊高通滤波器(高频增强滤波器、高频提升滤波器)

1.1高频增强滤波器

高频滤波将低频分量滤掉,导致增强图像中的边缘得到加强,但平坦区域灰度很暗,接近黑色。

高频增强滤波器对频域里的高通滤波器的转移函数加一个常数,将一些低频分量加回去,保持光滑区域的灰度,又改善边缘区域的对比度。高频增强滤波器对频域里的高通滤波器的转移函数加一个常数,将一些低频分量加回去,保持光滑区域的灰度,又改善边缘区域的对比度。高频增强滤波器的传递函数如下:

image-20210710094247116

其中 a>=0,b>a,Hhp(u,v)表示高通滤波器,本算法 Hhp(u,v)选用巴特沃斯高通滤波器:

image-20210710094301382

这个高频增强滤波器在保留高频分量的同时,也加入了背景的低频成分。这样就可以做到在原始图像的基础上叠加一些高频成分,既保留了原图的灰度层次,又锐化了边缘。本次算法实现,a 设置为 0.5,b 设置为 0.8。

1.2高频提升滤波器

数字图像处理中图像提升增强算法中常用非锐化掩蔽。

对于某些图像锐化过程中,经典的 sobel 算子和 canny 算子等会提取到一些多余的边缘,高提升滤波可以增强图像边缘,通过增大局部灰度差异来增强对比度而,不影响图像整体对比度

非锐化掩蔽:

顾名思义即减去平滑后的图像,其原理流程图如下:

  • 1平滑原图像:f->s;

  • 2从原图像中减去模糊图像,产生的差值图像称为模板:m=f-s;

  • 3将模板加到原图像中:

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 Enhance_PassFilter(image, d, n,s1):
    f = np.fft.fft2(image)
    fshift = np.fft.fftshift(f)
    def make_transform_matrix(d):
        transform_matrix = np.zeros(image.shape)
        center_point = tuple(map(lambda x: (x - 1) / 2, s1.shape))
        for i in range(transform_matrix.shape[0]):
            for j in range(transform_matrix.shape[1]):
                def cal_distance(pa, pb):
                    from math import sqrt
                    dis = sqrt((pa[0] - pb[0]) ** 2 + (pa[1] - pb[1]) ** 2)
                    return dis
                dis = cal_distance(center_point, (i, j))
                transform_matrix[i, j] = 1 / (1 + (d / dis) ** (2 * n))
        return transform_matrix
    d_matrix = make_transform_matrix(d)
    d_matrix = 0.8*d_matrix+0.5
    new_img = np.abs(np.fft.ifft2(np.fft.ifftshift(fshift * d_matrix)))
    return new_img

# 捕获异常
class imageSizeError(Exception):
    def __init__(self):
        self.value = "图片大小错误"

    def __str__(self):
        return self.value
# 矩阵减法
def decreaseArray(image1, image2):
    if image1.shape == image2.shape:
        image = image1.copy()
        for i in range(image1.shape[0] - 1):
            for j in range(image1.shape[1] - 1):
                image[i][j] = image1[i][j] - image2[i][j]
        return image
    else:
        raise imageSizeError()
# 矩阵加法
def increaseArray(image1, image2):
    if image1.shape == image2.shape:
        image = image1.copy()
        for i in range(image1.shape[0] - 1):
            for j in range(image1.shape[1] - 1):
                image[i][j] = image1[i][j] + image2[i][j]
        return image
    else:
        raise imageSizeError()


def put(path):
    img = cv2.imread(path, 1)
    # img = cv2.imread(os.path.join(base, path), 1)
    img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    f = np.fft.fft2(img)
    fshift = np.fft.fftshift(f)
    # 取绝对值后将复数变化为实数 # 取对数的目的是将数据变换到0~255
    s1 = np.log(np.abs(fshift))

    plt.subplot(231)
    plt.axis('off')
    plt.title('原始图像')
    plt.imshow(img, cmap='gray')
    plt.subplot(232)
    plt.axis('off')

    plt.title('高频增强滤波10')
    butter_100_1 = Enhance_PassFilter(img, 30, 1, s1)
    plt.imshow(butter_100_1, cmap='gray')


    # 高频提升滤波
    imageAver3 = cv2.blur(img, (3, 3))  # 线性平滑滤波
    unsharpMask = decreaseArray(img, imageAver3)  # 非锐化掩模
    imageSharp = increaseArray(img, unsharpMask)  # 将模板加到原图像


    plt.subplot(233)
    plt.axis('off')
    plt.title('3×3平滑滤波结果图像')

    plt.imshow(imageAver3, cmap='gray')
    plt.subplot(234)
    plt.axis('off')
    plt.title('非锐化掩模')
    plt.imshow(unsharpMask, cmap='gray')
    plt.subplot(235)
    plt.axis('off')
    plt.title('高频提升滤波结果')
    plt.imshow(imageSharp, cmap='gray')

    # plt.savefig('3.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
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102

3 效果

image-20210710094751719

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

闽ICP备14008679号