【Emgu CV教程】7.8、图像锐化(增强)之同态滤波

文章目录

  • 一、同态滤波大体原理
  • 二、代码
  • 三、效果举例


一、同态滤波大体原理

之前介绍的几个锐化、增强方法,包括更早之前介绍的图像模糊方法,都是基于空间域进行处理,也就是直接对目标点周边像素值进行各种数学运算。而这篇文章提到的同态滤波,就要更厉害了,是基于频率域的,要用到Dft()傅里叶变换函数。

高等数学比较好的读者可能很好理解,我看了半天也没明白是什么意思,下面都是我自己的理解,可能有错的啊。傅里叶变换是一个非常厉害的操作,图像的原始表达方式是 m * n个像素点组合,这个叫空间域,空间域大小就是m * n,转成频率域呢,用处就大了,因为高频的就是噪声或者物体边缘,低频的就是图像内比较平缓的部位,比如蓝天、纯色背景、雪地等等。因为有了高低频,就可以提取出边缘、噪声来,进一步就可以对边缘、噪声进行有针对性的处理。

通过傅里叶转换,在频率域内对图像进行处理,也是很重要、很有效的一种办法,属于比较高级的应用,很值得用一大章来仔细讲解,可惜我不会,就免了吧。

二、代码

网上有很对专家利用OpenCV 实现同态滤波,原理也讲了不少,读者们可以去找找。我这里也是根据他们的原始代码,转换成Emgu CV + C#的形式来实现,代码如下:

Mat dstMat = new Mat();// 1、log变换,将源图像转为float类型  然后进行log变换
Mat gray = srcMat.Clone();// CvInvoke.Resize(gray, gray, new System.Drawing.Size(1280, 720), 0, 0, Inter.Linear);
CvInvoke.CvtColor(gray, gray, ColorConversion.Bgr2Gray);
Mat f = new Mat();
gray.ConvertTo(f, DepthType.Cv32F, 1 / 255.0);
f += 0.1;
CvInvoke.Log(f, f);// 2、傅里叶变换
Mat fourierMat = new Mat();
CvInvoke.Dft(f, fourierMat, DxtType.Forward, 0);// 3、构造一个高斯频域高通滤波器
Mat filter = new Mat(fourierMat.Rows, fourierMat.Cols, DepthType.Cv32F, 1);
filter.SetTo(new MCvScalar(0, 0, 0));
Image<Gray, double> filterImage = filter.ToImage<Gray, double>();
for (int y = 0; y < filter.Rows; y++)
{for (int x = 0; x < filter.Cols; x++){int xx = x > filter.Cols / 2 ? x - filter.Cols : x;int yy = y > filter.Rows / 2 ? y - filter.Rows : y;double duv = Math.Sqrt((xx * xx) + (yy * yy));double d0 = 3;double huv = ((1.0 - 0.4) * (1 - Math.Pow(2.71828, -1 * (duv * duv / (d0 * d0))))) + 0.4;filterImage.Data[y, x, 0] = huv;}
}filter = filterImage.Mat;
filter.ConvertTo(filter, DepthType.Cv32F);// 4、滤波,将傅里叶变换过后的图像与滤波器相乘:
CvInvoke.Multiply(fourierMat, filter, fourierMat, 1); // 相乘后,最大值255,最小值0// 5、傅里叶逆变换,指数变换(图像还原)
CvInvoke.Dft(fourierMat, dstMat, DxtType.InvScale, 0);
CvInvoke.Exp(dstMat, dstMat);
dstMat -= 0.1;// 6、显示
CvInvoke.Imshow("Destination image,methord 2,  " + dstMat.Size.ToString(), dstMat);

不要问为什么,因为我也看不懂,对于频率域操作,代码能跑起来就是万幸了。

三、效果举例

原始素材定义为srcMat,如下:
在这里插入图片描述
还是这张夜晚天桥的照片,执行上述代码,同态滤波增强后的图像如下:
注意哈,它是锐化的作用,因此最终输出的图像,明暗对比没有被增强,但是仔细看,最下方地砖的纹理和树叶的边缘,是不是更清晰了????

同态滤波就是灰度增强,使图形明亮更均匀,而且明亮处的纹理保留的很好。代码执行起来速度很快,效果也很好,值得有兴趣的同学们去研究研究。再举个例子加深印象,如下:
在这里插入图片描述


原创不易,请勿抄袭。共同进步,相互学习。

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

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

相关文章

喜迎乔迁,开启新章 ▏易我科技新办公区乔迁庆典隆重举行

2024年1月18日&#xff0c;易我科技新办公区乔迁庆典在热烈而喜庆的氛围中隆重举行。新办公区的投入使用&#xff0c;标志着易我科技将以崭新姿态迈向新的发展阶段。 ▲ 易我科技新办公区 随着公司业务的不断发展和壮大&#xff0c;为了更好地适应公司发展的需要&#xff0c;…

2024-02-29(Flink)

1.Flink原理&#xff08;角色分工&#xff09; 2.Flink执行流程 on yarn版&#xff1a; 3.相关概念 1&#xff09;DataFlow&#xff1a;Flink程序在执行的时候会被映射成一个数据流模型&#xff1b; 2&#xff09;Operator&#xff1a;数据流模型中的每一个操作被称作Operat…

npm使用国内淘宝镜像的方法整理

命令配置安装&#xff1a; 淘宝镜像&#xff1a; npm config set registry https://registry.npm.taobao.org/ 官方镜像&#xff1a; npm config set registry https://registry.npmjs.org 通过cnpm安装&#xff1a; npm install -g cnpm --registryhttps://registry.npm.…

PTA L2-003 月饼 (附坑点说明)

月饼是中国人在中秋佳节时吃的一种传统食品&#xff0c;不同地区有许多不同风味的月饼。现给定所有种类月饼的库存量、总售价、以及市场的最大需求量&#xff0c;请你计算可以获得的最大收益是多少。 注意&#xff1a;销售时允许取出一部分库存。样例给出的情形是这样的&#…

【Python】PyGameUI控件

哈里前段时间写了一个windows平板上自娱自乐&#xff08;春节和家人一起玩&#xff09;基于pygame的大富翁游戏。 pygame没有按钮之类的UI控件&#xff0c;写起来不怎么顺手。就自己写一个简单的框架。 仓库地址 哈里PygameUi: pygame ui封装自用 (gitee.com) 使用示例 示…

上海亚商投顾:沪指终结月线6连阴 北向资金净买入超160亿

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 三大指数昨日低开高走&#xff0c;沪指重新站上3000点&#xff0c;深成指、创业板指大涨超3%。半导体产业链全…

探索那些能唤起情感共鸣的壁纸

1、方小童在线工具集 网址&#xff1a; 方小童 该网站是一款在线工具集合的网站&#xff0c;目前包含PDF文件在线转换、随机生成美女图片、精美壁纸、电子书搜索等功能&#xff0c;喜欢的可以赶紧去试试&#xff01;

Python:关于数据服务中的Web API的设计

搭建类似joinquant、tushare类似的私有数据服务应用&#xff0c;有以下一些点需要注意&#xff1a; 需要说明的是&#xff0c;这里讨论的是web api前后端&#xff0c;当然还有其它方案&#xff0c;thrift&#xff0c;grpc等。因为要考虑到一鱼两吃&#xff0c;本文只探讨web ap…

高项软考电子版论文答题纸(附下载)

24年软考又要来了&#xff0c;作为高项软考的拦路虎&#xff0c;论文你准备好了吗&#xff1f;&#xff01;记住在开始考试之前一定要用论文答题纸上把准备好的论文&#xff0c;在规定的时间内写上几遍&#xff0c;一是现在很少动笔写字了。二是、熟悉一下论文考试的感觉。 准备…

索引使用规则4——覆盖索引回表查询

覆盖索引&#xff1a;查询使用了索引&#xff0c;并且需要返回的列&#xff0c;在索引里面都可以找到&#xff0c;减少select*的使用 1、using index condition Extra 为using index condition 表明查找使用了索引&#xff0c;但是需要回表查询&#xff08;也就是先二级索引&…

第十八届全国大学生智能汽车竞赛——摄像头算法(附带个人经验)

文章目录 前言一、摄像头图像处理1、摄像头图像采集2、图像二值化与大津算法 二、左右边界&#xff0c;中线扫描 前言 参加了第十六&#xff0c;十七和第十八届全国大学生智能车竞赛&#xff0c;对摄像头的学习有部分心得&#xff0c;分享给大家&#xff0c;三届车赛&#xff…

【C语言基础】:深入理解指针(一)

文章目录 一、内存和地址1. 内存2. 如何理解编址 二、指针变量和地址2.1 取地址操作符(&)2.2 指针变量和解引用操作符(*)2.2.1 指针变量2.2.2 如何拆解指针变量2.2.3 解引用操作符 2.3 指针变量的大小 三、指针变量类型的意义3.1 指针的解引用3.2 指针 - 整数3.3 void*指针…

HCIA-HarmonyOS设备开发认证V2.0-习题

目录 习题一习题二&#xff08;待续...&#xff09;坚持就有收获 习题一 # HarmonyOS简介 1. 以下哪几项属于OpenHarmony的技术特性&#xff1f;&#xff08;&#xff09;A. 统一OS&#xff0c;弹性部署B. 一次开发&#xff0c;多端部署C. 硬件互助&#xff0c;资源共享2. Ope…

C# WPF编程-创建项目

1.创建新项目 选择“WPF应用程序”》“下一步” 2. 设置项目 设置项目名称&#xff0c;保存位置等参数>下一步 3.选择框架 4.项目创建成功 5.运行项目

两张二值化图像融合

python实现&#xff0c;已知两张二值化图像&#xff0c;对比两张图&#xff0c;将像素点一致的坐标保留原来颜色&#xff0c;不一致的坐标像素值变为128 读取原图 import cv2 import matplotlib.pyplot as plt import numpy as npcup_file_pathname"/home/wzc/zlt_self/…

Opencv实战(5)平滑处理与常见函数

平滑处理 Opencv实战&#xff1a; Opencv(1)读取与图像操作 Opencv(2)绘图与图像操作 Opencv(3)详解霍夫变换 Opencv(4)详解轮廓 文章目录 平滑处理1.均值滤波2.方框滤波3.高斯滤波4.中值滤波5.双边滤波 常见函数(1).createTrackbar()(2).SetMouseCallback() 图像的平滑处理是…

细数Android开发者的艰辛历程,android零基础

首先我们来看一下组件化项目和传统项目的区别: 在传统的项目里 我们通常情况下会有一个commonLib的Libary模块和一个app的application模块&#xff0c;业务中的逻辑都写在app中各个功能模块放到不同的包下。这样做有以下几个主要的缺点&#xff1a; 1.无论分包做的再好&…

Zynq—AD9238数据采集DDR3缓存千兆以太网发送实验(一)

ACM9238 高速双通道ADC模块自助服务手册AD9238 一、实验目的 本次实验通过电脑上的网络调试助手&#xff0c;将命令帧进行发送&#xff0c;然后通过ACZ7015开发板上的以太网芯片接收&#xff0c;随后将接收到的数据转换成命令&#xff0c;从而实现对ACM9238模块采样频率、数据…

Tomcat布署及优化

1.Tomcat简介 Tomcat 是 Java 语言开发的&#xff0c;Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器&#xff0c;Tomcat 属于轻量级应用服务器&#xff0c;在中小型系统和并发访问用户不是很多的场合下被普遍使用&#xff0c;是开发和调试 JSP 程序的首选。一般来说&…

在实训云平台上配置云主机

文章目录 零、学习目标一、实训云升级二、实训云登录&#xff08;一&#xff09;登录实训云&#xff08;二&#xff09;切换界面语言&#xff08;三&#xff09;规划云主机实例 三、创建网络三、创建路由器2024-2-29更新到此四、添加接口五、创建端口六、添加安全组规则七、创建…