【Emgu CV教程】7.4、图像锐化(增强)之对数变换

2024-02-26 09:12

本文主要是介绍【Emgu CV教程】7.4、图像锐化(增强)之对数变换,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一、介绍
  • 二、代码
  • 三、效果举例


一、介绍

对数变换的图像增强,顾名思义,就是求出每个像素的对数值,然后生成新的目标图像,再经过简单处理,就可以实现图像增强的目的。Emgu CV没有专门的对数增强的函数,可以自己写代码实现,思路如下:

1. 加载原始图像srcMat;
2. 对srcMat每个像素值求出对数值,生成新图像dstMat;
3. dstMat归一化,范围是0 - 255,得到最终dstMat

就是这么简单,整体算下来对cpu的消耗也不大。

二、代码

C#代码如下:

Mat tempMat = srcMat.Clone();
Mat dstMat = new Mat();
Image<Bgr, byte> image = tempMat.ToImage<Bgr, byte>();
for (int i = 0; i < image.Rows; i++)
{for (int j = 0; j < image.Cols; j++){image.Data[i, j, 0] = (byte)Math.Log(1 + image.Data[i, j, 0]); // 蓝色通道image.Data[i, j, 1] = (byte)Math.Log(1 + image.Data[i, j, 1]); // 绿色通道image.Data[i, j, 2] = (byte)Math.Log(1 + image.Data[i, j, 2]); // 红色通道}
}dstMat = image.Mat;
CvInvoke.Normalize(dstMat, dstMat, 0, 255, NormType.MinMax, DepthType.Cv8U);
CvInvoke.Imshow("Log sharping image, " + dstMat.Size.ToString(), dstMat);

三、效果举例

原始素材定义为srcMat,如下:
在这里插入图片描述
还是这个电影里的镜头,执行上述代码,增强后的图像如下:
在这里插入图片描述
这张图像用对数增强,昏暗的地方变得很亮,虽然最终效果上不如上一篇文章介绍的彩色图像直方图均衡化,但是图像对数增强还是很好用的,关键是看输入的图像是什么样的。比如我从网上找了一个夜间天桥的黑白照片,对数增强后,可以更明显的看到左边树叶的部分轮廓更明显了,见下图所示:
在这里插入图片描述

最后,读者们要记住对数增强的特点:

1、对数变换可以将图像的低灰度值部分扩展,显示出低灰度部分更多的细节,将其高灰度值部分压缩,减少高灰度值部分的细节,从而达到强调图像低灰度部分的目的。
2、图像经过对数变换后,较暗区域的对比度将有所提升,所以就可以增强图像的暗部细节


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

这篇关于【Emgu CV教程】7.4、图像锐化(增强)之对数变换的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/748355

相关文章

全网最全Tomcat完全卸载重装教程小结

《全网最全Tomcat完全卸载重装教程小结》windows系统卸载Tomcat重新通过ZIP方式安装Tomcat,优点是灵活可控,适合开发者自定义配置,手动配置环境变量后,可通过命令行快速启动和管理... 目录一、完全卸载Tomcat1. 停止Tomcat服务2. 通过控制面板卸载3. 手动删除残留文件4.

Python的pandas库基础知识超详细教程

《Python的pandas库基础知识超详细教程》Pandas是Python数据处理核心库,提供Series和DataFrame结构,支持CSV/Excel/SQL等数据源导入及清洗、合并、统计等功能... 目录一、配置环境二、序列和数据表2.1 初始化2.2  获取数值2.3 获取索引2.4 索引取内容2

python依赖管理工具UV的安装和使用教程

《python依赖管理工具UV的安装和使用教程》UV是一个用Rust编写的Python包安装和依赖管理工具,比传统工具(如pip)有着更快、更高效的体验,:本文主要介绍python依赖管理工具UV... 目录前言一、命令安装uv二、手动编译安装2.1在archlinux安装uv的依赖工具2.2从github

C#实现SHP文件读取与地图显示的完整教程

《C#实现SHP文件读取与地图显示的完整教程》在地理信息系统(GIS)开发中,SHP文件是一种常见的矢量数据格式,本文将详细介绍如何使用C#读取SHP文件并实现地图显示功能,包括坐标转换、图形渲染、平... 目录概述功能特点核心代码解析1. 文件读取与初始化2. 坐标转换3. 图形绘制4. 地图交互功能缩放

SpringBoot集成redisson实现延时队列教程

《SpringBoot集成redisson实现延时队列教程》文章介绍了使用Redisson实现延迟队列的完整步骤,包括依赖导入、Redis配置、工具类封装、业务枚举定义、执行器实现、Bean创建、消费... 目录1、先给项目导入Redisson依赖2、配置redis3、创建 RedissonConfig 配

javacv依赖太大导致jar包也大的解决办法

《javacv依赖太大导致jar包也大的解决办法》随着项目的复杂度和依赖关系的增加,打包后的JAR包可能会变得很大,:本文主要介绍javacv依赖太大导致jar包也大的解决办法,文中通过代码介绍的... 目录前言1.检查依赖2.更改依赖3.检查副依赖总结 前言最近在写项目时,用到了Javacv里的获取视频

基于C#实现PDF转图片的详细教程

《基于C#实现PDF转图片的详细教程》在数字化办公场景中,PDF文件的可视化处理需求日益增长,本文将围绕Spire.PDFfor.NET这一工具,详解如何通过C#将PDF转换为JPG、PNG等主流图片... 目录引言一、组件部署二、快速入门:PDF 转图片的核心 C# 代码三、分辨率设置 - 清晰度的决定因

Java Scanner类解析与实战教程

《JavaScanner类解析与实战教程》JavaScanner类(java.util包)是文本输入解析工具,支持基本类型和字符串读取,基于Readable接口与正则分隔符实现,适用于控制台、文件输... 目录一、核心设计与工作原理1.底层依赖2.解析机制A.核心逻辑基于分隔符(delimiter)和模式匹

spring AMQP代码生成rabbitmq的exchange and queue教程

《springAMQP代码生成rabbitmq的exchangeandqueue教程》使用SpringAMQP代码直接创建RabbitMQexchange和queue,并确保绑定关系自动成立,简... 目录spring AMQP代码生成rabbitmq的exchange and 编程queue执行结果总结s

python使用Akshare与Streamlit实现股票估值分析教程(图文代码)

《python使用Akshare与Streamlit实现股票估值分析教程(图文代码)》入职测试中的一道题,要求:从Akshare下载某一个股票近十年的财务报表包括,资产负债表,利润表,现金流量表,保存... 目录一、前言二、核心知识点梳理1、Akshare数据获取2、Pandas数据处理3、Matplotl