【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,一经查实,立即删除!

相关文章

学习计算机的好处

之前写了那么多计算机知识&#xff0c;却没有一篇写我学计算机的初衷。 掌握计算机技术不仅可以提高我们的就业能力和竞争力&#xff0c;同时有助于我们更好地认识世界&#xff0c;提高工作效率和解决问题的能力&#xff0c;更好地利用科技创造更美好的未来。 因此&#xff0c…

pyvisa库实现仪器控制

python控制仪器实现自动化常用pyvisa库&#xff0c;基本控制可大致分为创建仪器控制对象、写入控制指令、读取仪表信息和查询仪表状态&#xff0c;下面进行基本的讲解。 pyvisa库创建仪表控制对象 import tkinter.messagebox import pyvisaclass InstrumentControl:inst Non…

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

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…

Spring Boot 高级实践探索:深度解读与实战演练

随着开发者对Spring Boot框架的基础运用日渐娴熟&#xff0c;迈向更深层次的技术探究和应用场景拓展显得尤为重要。本文将带领读者深入研究Spring Boot的若干核心进阶特性&#xff0c;并结合实际项目案例&#xff0c;涵盖自动化测试策略的深化应用、高级配置管理机制的巧妙运用…

Redis 之四:Redis 事务和乐观锁

事务特点 Redis 事务可以一次执行多个命令&#xff0c; 并且带有以下三个重要的保证&#xff1a; 批量操作在发送 EXEC 命令前被放入队列缓存。 收到 EXEC 命令后进入事务执行&#xff0c;事务中任意命令执行失败&#xff0c;其余的命令依然被执行。不具备原子性。 在事务执…

通讯录——C语言实现

头文件Contact.h #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> #include<stdlib.h> #pragma once #define MAX 100 #define MAX_NAME 20 #define MAX_SEX 5 #define MAX_TELE 12 #define MAX_ADDR 30//表示一个人的信息 //struct…

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;销售时允许取出一部分库存。样例给出的情形是这样的&#…

如何在Java中反转字符串?

目录 1. 使用StringBuilder的reverse方法&#xff1a; 2. 使用for循环和字符数组&#xff1a; 3. 使用递归&#xff1a; 4. 使用Java 8的Stream API&#xff1a; More Java中&#xff0c;反转字符串可以通过多种方式实现。以下是一些常见的方法&#xff1a; 1. Java中使用…

【Python】PyGameUI控件

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

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

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

实时聊天系统PHP

实时聊天系统可以让用户在网站上实时交流&#xff0c;这对社交平台、在线客服等网站非常有帮助。以下是一个简单的基于 PHP 和 WebSocket 的实时聊天系统示例&#xff1a; 1. 首先创建一个 HTML 文件 index.html 来显示聊天界面和发送消息的表单&#xff1a; html <!DOCTYP…

【C#】 List.Sort 方法

【C#】 List.Sort 方法 在C#中&#xff0c;List.Sort()不仅为系统自带的变量(int, float, double …)类型的集合提供默认排序&#xff0c;还提供了自定义的排序方法。 List自带排序 List<int> list new List<int>(); list.Add(5); list.Add(3); list.Add(4); l…

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

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;一是现在很少动笔写字了。二是、熟悉一下论文考试的感觉。 准备…

UniApp Vue 3 中的网络请求封装详解及用法

在UniApp中&#xff0c;结合Vue 3的强大特性&#xff0c;进行网络请求的封装是项目中常见的需求。这样的封装不仅提高了代码的可维护性&#xff0c;还使得在组件中使用网络请求更加简洁。本文将详细介绍UniApp Vue 3中的网络请求封装&#xff0c;并提供一个简单的用法示例。 1…

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

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

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

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