IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 3.3 Python图像的频域图像增强-特殊高通滤波器 -> 正文阅读

[Python知识库]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')

3 效果

image-20210710094751719

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-07-14 10:49:15  更:2021-07-14 10:49:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/4 18:16:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码