图像对比度增强(Contrast Enhancement)详解

news/2024/9/16 19:06:59/

Contrast Enhancement:
对比度增强一直是图像处理中的一个恒久话题,一般来说都是基于直方图的,比如直方图均衡化。冈萨雷斯的书里面对这个话题讲的比较透彻。
关于图像增强必须清楚的基本概念
1.图像增强的目的

1)改善图像的视觉效果,
2)转换为更适合于人或机器分析处理的形式
3)突出对人或机器分析有意义的信息
4)抑制无用信息,提高图像的使用价值
5)增强后的图像并不一定保真

2,图像增强的方法分类

1)从处理对象分类:灰度图像,(伪)彩色图像
2)从处理策略分类:全局处理,局部处理(ROI ROI,Region of Interest Interest)
3)从处理方法分类:空间域(点域运算,即灰度变换;邻域方法,即空域滤波),频域方法
4)从处理目的分类:图像锐化,平滑去噪,灰度调整(对比度增强)

3.图像增强的方法:
(1). 基于直方图均衡化的图像增强(Histogram Equalization)
a. 基本思想
对于图像中的灰度点做映射,使得整体图像的灰度大致符合均匀分布。增强图像的对比度。

  • 对于灰度值连续的情况,使用灰度的累积分布函数CDF做转换函数,可以使得输出图像的灰度符合均匀分布。
  • 对于灰度值不连续的情况,存在舍入误差,得到的灰度分布大致符合均匀分布。
  • 直观地理解,如果某一个灰度范围(如200-201)的像素点很少,那么它的概率密度值就会很小,所以CDF在200-201附近的增长变化就会很小;反之,如果某一个灰度范围(如100-101)的像素点很多,CDF在100-101附近的增长变化会很大。总体来看,以灰度为横轴,CDF为纵轴画曲线。这种向上凸的曲线,很像gamma变换: s=crγs=crγ中γ<1γ<1的情形。将灰度集中的部分拉伸,而将灰度不集中的部分压缩,达到提高对比度的效果。
  • 直方图均衡可以看做自适应的gamma变换或者分段变换。前者的优势在于,不需要指定任何参数,所有运算都是基于图像本身的。

b. 算法
step1:根据图像灰度计算灰度概率密度函数PDF
step2:计算累积概率分布函数CDF
step3:将CDF归一化到原图灰度取值范围,如[0,255]。
step4:之后CDF四舍五入取整,得到灰度转换函数sk=T(rk)
step5:将CDF作为转换函数,将灰度为rk的点转换为sk灰度

直方图均衡化是通过调整图像的灰阶分布,使得在0~255灰阶上的分布更加均衡,提高了图像的对比度,达到改善图像主观视觉效果的目的。对比度较低的图像适合使用直方图均衡化方法来增强图像细节。

彩色图像的直方图均衡化实现:

#include <opencv2/opencv.hpp>   
#include <iostream>using namespace cv;
using namespace std;int main(int argc, char *argv[])
{Mat image = imread("D:/picture/opencv/images/Lenna.png", 1);if (image.empty()){cout << "could not load images.." << endl;return -1;}imshow("src", image);Mat imageRGB[3];split(image, imageRGB);for (int i = 0; i < 3; i++){equalizeHist(imageRGB[i], imageRGB[i]);}merge(imageRGB, 3, image);imshow("equalizeHist", image);waitKey(0);return 0;
}

程序运行结果
(2). 基于拉普拉斯算子的图像增强

使用中心为5的8邻域拉普拉斯算子与图像卷积可以达到锐化增强图像的目的,拉普拉斯算子如下图所示:
拉普拉斯算子

#include<opencv2/opencv.hpp>
#include<iostream>using namespace cv;
using namespace std;
int main(int argc, char *argv[])
{Mat image = imread("D:/picture/opencv/images/Lenna.png", 1);if (image.empty()){cout << "could not load images..." << endl;return -1;}imshow("原图像", image);Mat imageEnhance;Mat kernel = (Mat_<float>(3, 3) << 0, -1, 0, 0, 5, 0, 0, -1, 0);filter2D(image, imageEnhance, CV_8UC3, kernel);imshow("拉普拉斯算子图像增强效果", imageEnhance);waitKey(0);return 0;
}

拉普拉斯对比度增强

(3).基于对数Log变换的图像增强

对数变换可以将图像的低灰度值部分扩展,显示出低灰度部分更多的细节,将其高灰度值部分压缩,减少高灰度值部分的细节,从而达到强调图像低灰度部分的目的。变换方法:
在这里插入图片描述
对数变换对图像低灰度部分细节增强的功能过可以从对数图上直观理解:

在这里插入图片描述
x轴的0.4大约对应了y轴的0.8,即原图上00.4的低灰度部分经过对数运算后扩展到00.8的部分,而整个0.41的高灰度部分被投影到只有0.81的区间,这样就达到了扩展和增强低灰度部分,压缩高灰度部分的值的功能。

从上图还可以看到,对于不同的底数,底数越大,对低灰度部分的扩展就越强,对高灰度部分的压缩也就越强。

#include <opencv2/opencv.hpp>
#include<iostream>using namespace std;
using namespace cv;int main(int argc, char *argv[])
{Mat image = imread("D:/picture/opencv/images/Lenna.png");Mat imageLog(image.size(), CV_32FC3);for (int i = 0; i < image.rows; i++){for (int j = 0; j < image.cols; j++){imageLog.at<Vec3f>(i, j)[0] = log(1 + image.at<Vec3b>(i, j)[0]);imageLog.at<Vec3f>(i, j)[1] = log(1 + image.at<Vec3b>(i, j)[1]);imageLog.at<Vec3f>(i, j)[2] = log(1 + image.at<Vec3b>(i, j)[2]);}}//归一化到0~255  normalize(imageLog, imageLog, 0, 255, CV_MINMAX);//转换成8bit图像显示  convertScaleAbs(imageLog, imageLog);imshow("src", image);imshow("基于对数Log变换的图像增强", imageLog);waitKey();return 0;
}

基于对数Log变换的图像增强
(4). 基于伽马(Gamma)变换的图像增强

伽马变换主要用于图像的校正,将灰度过高或者灰度过低的图片进行修正,增强对比度。变换公式就是对原图像上每一个像素值做乘积运算:
在这里插入图片描述
伽马变换对图像的修正作用其实就是通过增强低灰度或高灰度的细节实现的,从伽马曲线可以直观理解:

在这里插入图片描述
γ值以1为分界,值越小,对图像低灰度部分的扩展作用就越强,值越大,对图像高灰度部分的扩展作用就越强,通过不同的γ值,就可以达到增强低灰度或高灰度部分细节的作用。

伽马变换对于图像对比度偏低,并且整体亮度值偏高(对于于相机过曝)情况下的图像增强效果明显

#include <opencv2/opencv.hpp>    
#include <iostream>using namespace std;
using namespace cv;int main(int argc, char *argv[])
{Mat image = imread("D:/picture/opencv/images/Lenna.png");Mat imageGamma(image.size(), CV_32FC3);for (int i = 0; i < image.rows; i++){for (int j = 0; j < image.cols; j++){imageGamma.at<Vec3f>(i, j)[0] = (image.at<Vec3b>(i, j)[0])*(image.at<Vec3b>(i, j)[0])*(image.at<Vec3b>(i, j)[0]);imageGamma.at<Vec3f>(i, j)[1] = (image.at<Vec3b>(i, j)[1])*(image.at<Vec3b>(i, j)[1])*(image.at<Vec3b>(i, j)[1]);imageGamma.at<Vec3f>(i, j)[2] = (image.at<Vec3b>(i, j)[2])*(image.at<Vec3b>(i, j)[2])*(image.at<Vec3b>(i, j)[2]);}}//归一化到0~255  normalize(imageGamma, imageGamma, 0, 255, CV_MINMAX);//转换成8bit图像显示  convertScaleAbs(imageGamma, imageGamma);imshow("原图", image);imshow("伽马变换图像增强效果", imageGamma);waitKey();return 0;
}

在这里插入图片描述


http://www.ppmy.cn/news/262961.html

相关文章

matlab 控制投影仪 正弦光栅,一种基于投影仪散焦解相位的光栅投影三维快速测量方法...

一种基于投影仪散焦解相位的光栅投影三维快速测量方法 【技术领域】 [0001] 本发明涉及三维信息重构领域,尤其是一种基于投影仪散焦解相位的光栅投影三 维快速测量方法。 【背景技术】 [0002] 光学三维测量技术能够准确获取物体的三维面形数据,可用于三维模型重建、物 体表面…

图像对比度增强和X投影数据矩阵转图像

图像对比度增强部分&#xff1a; 所谓的图像对比度增强&#xff0c;实际上就是对图像的像素矩阵进行修改&#xff0c;使得我们需要增强的部分强化、差异化&#xff0c;不需要增强的部分弱化、统一化。 常用的强化方法一般有(默认为8位图) 1.线性变换 当图像是线性模糊的时候&am…

色调、锐度、对比度、饱和度

色调 色调是指一幅作品色彩外观的基本倾向。 色调在冷暖方面分为暖色调与冷色调:红色、橙色、黄色–为暖色调&#xff0c;象征着:太阳、火焰。绿色、蓝色、黑色–为冷色调&#xff0c;象征着:森林、大海、蓝天。灰色、紫色、白色–为中间色调。 锐度 锐度越高越清晰 锐度&a…

MongoDB Study Notes

文章目录 1 MongoDB快速入门1.1 什么是MongDB1.2 部署安装——基于docker1.3 基本概念1.4 基本操作1.4.1 查看所有数据库1.4.2 切换数据库1.4.3 创建数据库1.4.4 删除数据库1.4.5 查看数据库中表1.4.6 新增数据1.4.7 查询数据1.4.8 更新数据1.4.8.1 更新不存在字段1.4.8.2 更新…

win10的另一种美化字体的方式,使用noMeiryoUI

目录 1. 前提2. 字体选择3. 查看已经安装的字体并查看效果4. 安装软件修改系统字体5. 修改浏览器字体 1. 前提 21年的时候写了一篇文章&#xff0c;《Windows10下美化字体&#xff0c;达到类似mac的效果》&#xff0c;当时还很迷恋macType这个软件的使用&#xff0c;觉得好牛逼…

x265的DCT

文章目录 DCT相关背景知识DCT变换系数矩阵32x32变换矩阵系数其他尺寸变换矩阵系数 变换计算过程流程图 代码实现数据残差变换系数对应残差 我的简单实现实现细节实现代码 x265对应代码实现openHEVC代码实现 DCT相关背景知识 DCT变换系数矩阵 标准提供了32x32的系数矩阵&#…

环保数采仪环境污染在线监控设备 上传监控平台

1. 概述 AF-HK100 环保数采仪是应环保领域各级国控、省控及市控污染源环境在线监控&#xff08;监测&#xff09;系统的需求而开发研制的产品&#xff0c;通过模拟通道、开关通道、数字通道&#xff08;RS232/485/LoRa&#xff09;与前端各类监测仪器/仪表实现无缝连接&#xf…

网络设备监控

原文网址:http://knowhow.innovatedigital.com/network-device-monitoring.html 网络设备包括交换机&#xff0c;路由器和防火墙是任何IT环境的重要组成部分。HQ深覆盖面的操作系统和支持SNMP为基础的应用管理&#xff0c;可以监控代理管理的网络设备&#xff0c;如思科系统&a…

室内监控摄像机能做什么?安装在室内有哪些好处?

室内监控摄像机能做什么&#xff1f;安装在室内&#xff0c;主要是用于办公室&#xff0c;家庭&#xff0c;商铺&#xff0c;工厂以及仓库等。监控什么&#xff1f;监控小孩老人的动态&#xff0c;查看保姆的做事态度&#xff0c;查看家里宠物的生活习性。喜欢在凉台养植物的&a…

云呐|机房监控服务平台,机房监控服务平台有哪些

机房动环监控平台提供平台、万级站点连接能力、电源、电池、油机、空调、烟雾、浸水、门禁、温湿度、视频等智能终端统一连接&#xff0c;提供集中运维监控能力。根据大规模运维管理&#xff0c;积累大量运维数据&#xff0c;降低运维费用&#xff0c;提高运维水平。动环采集一…

安防视频监控直播的画面都是如何采集的?

我们公司这几天在做摄像头对接流媒体服务器推流的测试&#xff0c;突然想起来我好像还没有就直播画面的采集写过什么&#xff0c;所以今天我就来讲一下采集。采集是整个视频推流过程中的第一个环节&#xff0c;它从系统的采集设备中获取原始视频数据&#xff0c;将其输出到下一…

安防监控如何存储?

安防监控是有多个部位组成&#xff0c;比如是需要摄像机、录像机、显示器、交换机等工具。接受录像以后再上传到安防监控系统&#xff0c;并从摄像到图像显示和记录构成独立完整的系统。每年无论是大型的机房监控还是安防监控的视频存储是一大问题。 面对云视频存储的性能、安全…

机械设备远程实时监控方案

摘要&#xff1a;伴随着我国市场经济的不断发展&#xff0c;目前机械设备的使用范围越来越广泛。但是&#xff0c;由于机械设备使用时不容易管理&#xff0c;并且比较分散&#xff0c;同时也存在长期使用的一些机械设备逐渐老化以及操作工在使用机械设备时操作不当而引起设备的…

家用小型监控器安装位置与功能

家用小型监控器安装的位置可选性很多&#xff0c;比如壁橱&#xff0c;酒柜&#xff0c;书架等&#xff0c;这些易于隐藏又不会被注意的角落正是家用小型监控器发挥作用的位置。为什么家用摄像机的体积越来越小&#xff0c;而且功能却越来越强大呢。从速名网的数据可以看出&…

监控产品

海康解码器 主动解码 又称动态解码&#xff0c;由解码器主动连接编码器请求数据流&#xff0c;常见应用&#xff1a;解码上墙&#xff0c;远程录像回放上墙&#xff0c;轮巡解码。 被动解码 解码器不会发起请求,其他设备向解码器上传数据&#xff0c;解码器只有接到数据…

数据监控平台

数据监控平台 监控平台需要实时监控业务指标数据&#xff0c;系统特点&#xff1a;高并发&#xff0c;大数据&#xff0c;低延迟。主要使用的技术&#xff1a; HBase存储海量数据&#xff0c;ScriptEngine引擎&#xff0c;MySQL分表&#xff0c;Redis集群。 高并发&#xf…

监控器材产品如何做好软文?

软文是一种有效的市场宣传手段&#xff0c;是宣传形式之一&#xff0c;是一种以自然、温和的方式来宣传商品、服务的手段。在当前市场竞争激烈的情况下&#xff0c;软文的重要性越来越凸显&#xff0c;是监控器材产品引流宣传的有效手段。可以有效地扩大产品影响力&#xff0c;…

监控平台(二)

Cacti Cacti 在英文中的意思是仙人掌的意思&#xff0c;Cacti 是一套基于 PHP、MySQL、SNMP 及 RRDTool 开发的网络流量监测图形分析工具。它通过 snmpget 来获取数据&#xff0c;使用 RRDtool 绘画图形&#xff0c;而且你完全可以不需要了解 RRDtool 复杂的参数。它提供了非常…

驱动操作控制LED灯

控制LED灯&#xff1a; 驱动如何操作寄存器 rgb_led灯的寄存器是物理地址&#xff0c;在linux内核启动之后&#xff0c; 在使用地址的时候&#xff0c;操作的全是虚拟地址。需要将物理地址 转化为虚拟地址。在驱动代码中操作的虚拟地址就相当于 操作实际的物理地址。 物理地址&…

Mac使用DBeaver连接达梦数据库

Mac使用DBeaver连接达梦数据库 下载达梦驱动包 达梦数据库 在下载页面随便选择一个系统并下载下来。 下载下来的是zip的压缩包解压出来就是一个ISO文件&#xff0c;然后我们打开ISO文件进入目录&#xff1a;/dameng/source/drivers/jdbc 进入目录后找到这几个驱动包&#x…