高通滤波学习(opencv)

news2024/11/25 2:20:26

在这里插入图片描述

以下代码参考视频解析

这段代码使用了二维FFT变换对输入图像进行频域处理,并设计了一个简单的高通滤波器。

前两行使用了numpy库中的fft2函数对输入图像image进行二维傅里叶变换(FFT)。接着,fft_shift函数将转化后的频谱数据fft_image移至频谱中心。这一步可以利用np.fft.ifftshift逆IFFT移动到原先的位置,不过代码没有实现。

接下来通过设定一个简单的高通滤波器,mask矩阵代表在频域缩小的高频分量。具体来说,给予仿照网站https://homepages.inf.ed.ac.uk/rbf/HIPR2/highpass.htm 定义为一个方形的掩膜(即简单的低通和高通相减),中央留下1,其余元素全部赋为0。然后再通过对滤波器结果与移位后得到的FFT图像进行点乘的方式进行滤波操作。最后再对滤波后数据应用ifftshift函数反转移动的内容,并用np.fft.ifft2 invert 进行傅里叶逆变换并取实数部分,输出被滤波后的图像filtered_image,转变成整数uint8类型的像素值。

一般的应用范围包括图像处理、计算机视觉、数字信号处理及其它领域,如图像增强、降噪等。在计算机视觉中,频域滤波器被广泛应用于对精细特征的提取、图像去噪等方面。

如果想要看懂代码,需要了解傅里叶变换及其频域概念,以及如何使用numpy库进行零频率移动和高通滤波器的设计。此外还需要理解FFT(快速傅里叶变换)和IFFT(逆傅里叶变换)原理,并且对numpy库中这些数据处理函数的参数含义有所了解。

    def image_filter(self, image):
        """高通滤波器"""

        # 进行二维FFT变换
        fft_image = np.fft.fft2(image)

        # 将零频率分量移到频谱的中心
        fft_shift = np.fft.fftshift(fft_image)

        # 可视化频谱
        # magnitude_spectrum = 20 * np.log(np.abs(fft_shift))

        # 设计一个简单的高通滤波器
        rows, cols = image.shape
        center_row, center_col = rows // 2, cols // 2
        cutoff_freq = 1

        # 创建滤波器
        mask = np.ones((rows, cols), np.uint8)
        mask[center_row - cutoff_freq:center_row + cutoff_freq,
        center_col - cutoff_freq:center_col + cutoff_freq] = 0

        # 应用滤波器
        filtered_shift = fft_shift * mask

        # 将频谱转换回原始状态
        filtered_image = np.fft.ifftshift(filtered_shift)

        # 进行逆FFT变换
        filtered_image = np.fft.ifft2(filtered_image)
        filtered_image = np.abs(filtered_image).astype(np.uint8)
        #
        # cv2.imshow("back_eft_src", filtered_image)
        src_filter_img =  filtered_image.copy()

        limit_gray_num = self.re_bg_gray_num(src_filter_img)

        # print("调整")

        #print("当前图片中位数:",limit_gray_num)
        if limit_gray_num >= 28:
            #print("超过额定28当前中位数亮度为,",limit_gray_num)
            # limit_gray_num = int(limit_gray_num*1.1)
            # if limit_gray_num >= 255:
            #     limit_gray_num = 255

            limit_gray_num = int(limit_gray_num*1.19)
            if limit_gray_num >= 255:
                limit_gray_num = 255


            #print("自动调整额定亮度为,", limit_gray_num)
            pass
        else:
            #print("低于额定28当前中位数暗度为,", limit_gray_num)
            black_limie_num =  15

            limit_gray_num = limit_gray_num + black_limie_num


        # print("\n")
        # print("输出:",limit_gray_num)
        # # limit_gray_num = self.tem # 测试用
        # print("limit_gray_num: ", limit_gray_num)
        # 对图像进行简单后处理
        for i in range(rows):
            for j in range(cols):

                if filtered_image[i, j] > limit_gray_num:
                # if filtered_image[i, j] > 28:
                    # filtered_image[i,j] = min((filtered_image[i,j] + 50), 255)
                    filtered_image[i, j] = 255
                else:
                    filtered_image[i, j] = 0  # 黑色

        return filtered_image,src_filter_img

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/599308.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

什么是DOM和BOM?

一、什么是DOM DOM 全称是 Document Object Model,也就是文档对象模型。提供操作页面元素的方法和属性,是HTML和XML的API,DOM把整个页面规划成由节点层级构成的文档。 DOM 树 DOM树是Web页面的模型,当浏览器加载一个Web页面时&am…

A Framework for Evaluating Gradient Leakage Attacks in Federated Learning

联邦学习中梯度泄漏攻击评估框架 摘要: 针对问题:从客户端向联邦服务器共享本地参数更新也可能容易受到梯度泄漏攻击,并侵犯客户端关于其训练数据的隐私。 提出了一个原则性框架,用于评估和比较不同形式的客户端隐私泄露攻击。…

路径规划算法:基于纵横交叉优化的路径规划算法- 附代码

路径规划算法:基于纵横交叉优化的路径规划算法- 附代码 文章目录 路径规划算法:基于纵横交叉优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要:本文主要介绍利用智能优化…

Eclipse导入项目的配置步骤说明

1.数据库创建并导入 (1)打开navicat,右击,选择创建数据库,进入新建数据库页面,输入数据库名称。我这里创建的是report数据库。 (2)右击自己创建的数据库,选择运行sql文件…

【C++】STL——stack OJ练习

文章目录 1. 最小栈思路分析AC代码拓展思维 2. 栈的压入、弹出序列思路讲解AC代码 3. 逆波兰表达式求值思路讲解AC代码拓展:中缀表达式如何转后缀 这篇文章我们来做几道stack相关的OJ题,练习一下stack的使用。 1. 最小栈 先来看第一道题——&#xff1a…

【人工智能】常见问题以及解答

1 什么是人工智能 人工智能(Artificial Intelligence, AI)是一门涉及计算机科学、数学、心理学、哲学等多个领域的交叉学科,旨在研究如何使计算机能够像人一样地思考、学习和行动。 在过去几十年中,人工智能技术得到了广泛的应用…

LNMP部署

LNMP部署 一、安装Nginx服务二、安装mysql服务三、安装配置PHP解析环境四、部署 Discuz!社区论坛 Web 应用五、fpm参数优化 LNMP架构: LNMP代表的就是:Linux系统下NginxMySQLPHP这种网站服务器架构Linux是一类Unix计算机操作系统的统称&#…

【P47】JMeter JSON断言(JSON Assertion)

文章目录 一、JSON断言(JSON Assertion)参数说明二、准备工作三、测试计划设计3.1、Assert JSON Path exists3.2、Additionally assert value3.3、Expect null3.4、Invert assertion (will fail if above conditions met) 一、JSO…

双链表、循环链表、静态链表

目录 一、双链表1、为什么要引入双链表2、双链表的插入操作3、双链表的插入操作 二、循环链表1、循环单链表2、循环双链表 三、静态链表 一、双链表 1、为什么要引入双链表 单链表结点中只有一个指向其后继的指针,使得单链表只能从头结点依次顺序地向后遍历。要访…

数据治理核心保障数据质量监控开源项目Apache Griffin分享

文章目录 概述定义为何要做数据质量监控基本概念特性架构 安装Docker部署Docker 镜像批处理使用Docker 镜像流处理使用UI界面操作 概述 定义 Apache Griffin 官网地址 https://griffin.apache.org/ 源码release最新版本0.6.0 Apache Griffin 官网文档地址 https://griffin.apa…

MySQL学习(联结,组合查询,全文本搜索)

联结 SQL最强大的功能之一就是能在数据检索查询的执行中联结表; 关系表 为什么要使用关系表? 使用关系表可以储存数据不重复,从而不浪费时间和空间;如果有数据信息变动,只需更新一个表中的单个记录,相关…

研发工程师玩转Kubernetes——Node失效后的Pod的调度实验

在《研发工程师玩转Kubernetes——多Worker Node部署》中,我们创建了Master Node: UbunutA,以及四个Worker Node:UbunutB、UbunutC、UbunutD和UbunutE。本节我们将使用Deployment创建只含有一个nginx的Pod,然后关掉它所在的主机以模拟Node失效…

使用Adobe Acrobat DC对.jpg和.png格式图片转换为.eps图片格式举例

使用Adobe Acrobat DC对.jpg和.png等格式图片转换为.eps图片格式举例 在进行有的文档排版编辑时候(比如使用winEdt进行排版CTEX文件时候),需要添加.eps格式的图片,然而电脑中的画图,word和ppt等中无法实现.eps格式图片…

centos7 glib2.0 arm版本的编译

最近在看bluez代码,想编译个例子来玩一下,然后bluez里的例子会用到 libglib-2.0 库里的接口,于是开始了漫长的编译 arm 版本的 libglib-2.0,Linux 系统有时就是很麻烦,要编译一个库,结果发现依赖一大堆库&a…

Linux命令学习之帮助命令man

cat /proc/version和uname -a可以查看CentOS内核使用版本。 我使用的Linux操作系统发行版本号是7.6.1810,可以通过cat /etc/redhat-release进行查看。 man man是manual的缩写,是操作说明的意思。 使用man touch想要看一下touch的使用帮助,…

OpenMMLab开营笔记

摘要 很高兴能加入OpenMMLab AI实战营,成为第二期4班的一名学员。OpenMMLab经过几年的发展和沉淀,其开源项目已经覆盖到计算机视觉的各个领域。OpenMMLab 为香港中文大学-商汤科技联合实验室 MMLab 开源的算法平台,不到两年时间,…

文件操作之文件包含全解(41)

<!#include file”1.asp”--> 作者&#xff1a;沙漠里的鲸 https://www.bilibili.com/read/cv14178731/ 出处&#xff1a;bilibili 文件包含的作用就是将这个文件包含进去之后&#xff0c;会调用指定文件的代码。先将文件包含才能执行里面的一些相关代码&#xff0c;比如…

SAP-MM-标准报表路径

一、SAP MM模块系统自带的标准报表很多&#xff0c;常见报表都放在每个主题的“清单显示”和“报表”文件夹下&#xff0c;如下图所示&#xff1a; 二、另外&#xff0c;还有一些报表&#xff0c;放在另外一个地方&#xff0c;需要时&#xff0c;可以随时进行查看&#xff0c;前…

陷入困境?Taos创建超表带来的错误!

taos创建超表时报错 运行如下命令 let res await cursor.query("CREATE STABLE meters1 (ts TIMESTAMP, value FLOAT, slot INT,rack INT,nameId VARCHAR(32),adName VARCHAR(32),dbNumber INT,dataType VARCHAR(28), unit VARCHAR(28)) TAGS (location binary(64), gr…

2GT齿轮的齿形参数

文章目录 2GT齿轮的齿形参数概述笔记齿的种类方形齿半圆弧齿全圆弧齿精确圆弧齿修正圆弧齿梯形齿齿形参数用SW画一个2GT齿END 2GT齿轮的齿形参数 概述 零件上用到了2GT的同步轮和惰轮, 想在装配图上将2个齿轮皮带都画上, 看看有没有干涉. 整体修改是否合理. 在淘宝店家的主页…