版权声明:本文为博主原创文章,转载请注明出处。                   https://blog.csdn.net/dcrmg/article/details/53677739                </div><link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-f57960eb32.css"><link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-f57960eb32.css"><div class="htmledit_views" id="content_views">

1. 基于直方图均衡化的图像增强

直方图均衡化是通过调整图像的灰阶分布,使得在0~255灰阶上的分布更加均衡,提高了图像的对比度,达到改善图像主观视觉效果的目的。对比度较低的图像适合使用直方图均衡化方法来增强图像细节。
彩色图像的直方图均衡化实现:
  1. #include <opencv2/highgui/highgui.hpp>
  2. #include <opencv2/imgproc/imgproc.hpp>
  3. #include <iostream>
  4. using namespace cv;
  5. int main(int argc, char *argv[])
  6. {
  7. Mat image = imread("Test.jpg", 1);
  8. if (image.empty())
  9. {
  10. std::cout << "打开图片失败,请检查" << std::endl;
  11. return -1;
  12. }
  13. imshow("原图像", image);
  14. Mat imageRGB[3];
  15. split(image, imageRGB);
  16. for (int i = 0; i < 3; i++)
  17. {
  18. equalizeHist(imageRGB[i], imageRGB[i]);
  19. }
  20. merge(imageRGB, 3, image);
  21. imshow("直方图均衡化图像增强效果", image);
  22. waitKey();
  23. return 0;
  24. }
直方图均衡化增强前原图像:
直方图均衡化增强后效果:

2. 基于拉普拉斯算子的图像增强

使用中心为5的8邻域拉普拉斯算子与图像卷积可以达到锐化增强图像的目的,拉普拉斯算子如下图所示:
拉普拉斯算子可以增强局部的图像对比度:
  1. #include <opencv2/highgui/highgui.hpp>
  2. #include <opencv2/imgproc/imgproc.hpp>
  3. #include <iostream>
  4. using namespace cv;
  5. int main(int argc, char *argv[])
  6. {
  7. Mat image = imread("Test.jpg", 1);
  8. if (image.empty())
  9. {
  10. std::cout << "打开图片失败,请检查" << std::endl;
  11. return -1;
  12. }
  13. imshow("原图像", image);
  14. Mat imageEnhance;
  15. Mat kernel = (Mat_<float>(3, 3) << 0, -1, 0, 0, 5, 0, 0, -1, 0);
  16. filter2D(image, imageEnhance, CV_8UC3, kernel);
  17. imshow("拉普拉斯算子图像增强效果", imageEnhance);
  18. waitKey();
  19. return 0;
  20. }
拉普拉斯算子增强前原图像:
拉普拉斯算子增强后效果:

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

对数变换可以将图像的低灰度值部分扩展,显示出低灰度部分更多的细节,将其高灰度值部分压缩,减少高灰度值部分的细节,从而达到强调图像低灰度部分的目的。变换方法:

对数变换对图像低灰度部分细节增强的功能过可以从对数图上直观理解:

x轴的0.4大约对应了y轴的0.8,即原图上0~0.4的低灰度部分经过对数运算后扩展到0~0.8的部分,而整个0.4~1的高灰度部分被投影到只有0.8~1的区间,这样就达到了扩展和增强低灰度部分,压缩高灰度部分的值的功能。

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

  1. #include <opencv2/highgui/highgui.hpp>
  2. #include <opencv2/imgproc/imgproc.hpp>
  3. using namespace cv;
  4. int main(int argc, char *argv[])
  5. {
  6. Mat image = imread("Test.jpg");
  7. Mat imageLog(image.size(), CV_32FC3);
  8. for (int i = 0; i < image.rows; i++)
  9. {
  10. for (int j = 0; j < image.cols; j++)
  11. {
  12. imageLog.at<Vec3f>(i, j)[0] = log(1 + image.at<Vec3b>(i, j)[0]);
  13. imageLog.at<Vec3f>(i, j)[1] = log(1 + image.at<Vec3b>(i, j)[1]);
  14. imageLog.at<Vec3f>(i, j)[2] = log(1 + image.at<Vec3b>(i, j)[2]);
  15. }
  16. }
  17. //归一化到0~255
  18. normalize(imageLog, imageLog, 0, 255, CV_MINMAX);
  19. //转换成8bit图像显示
  20. convertScaleAbs(imageLog, imageLog);
  21. imshow("Soure", image);
  22. imshow("after", imageLog);
  23. waitKey();
  24. return 0;
  25. }
对数Log变换增强前原图像:
对数Log变换增强后效果:
对数变换对于整体对比度偏低并且灰度值偏低的图像增强效果较好。

4. 基于伽马变换的图像增强

伽马变换主要用于图像的校正,将灰度过高或者灰度过低的图片进行修正,增强对比度。变换公式就是对原图像上每一个像素值做乘积运算:

伽马变换对图像的修正作用其实就是通过增强低灰度或高灰度的细节实现的,从伽马曲线可以直观理解:

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

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

  1. #include <opencv2/highgui/highgui.hpp>
  2. #include <opencv2/imgproc/imgproc.hpp>
  3. using namespace cv;
  4. int main(int argc, char *argv[])
  5. {
  6. Mat image = imread("Test.jpg");
  7. Mat imageGamma(image.size(), CV_32FC3);
  8. for (int i = 0; i < image.rows; i++)
  9. {
  10. for (int j = 0; j < image.cols; j++)
  11. {
  12. imageGamma.at<Vec3f>(i, j)[0] = (image.at<Vec3b>(i, j)[0])*(image.at<Vec3b>(i, j)[0])*(image.at<Vec3b>(i, j)[0]);
  13. imageGamma.at<Vec3f>(i, j)[1] = (image.at<Vec3b>(i, j)[1])*(image.at<Vec3b>(i, j)[1])*(image.at<Vec3b>(i, j)[1]);
  14. imageGamma.at<Vec3f>(i, j)[2] = (image.at<Vec3b>(i, j)[2])*(image.at<Vec3b>(i, j)[2])*(image.at<Vec3b>(i, j)[2]);
  15. }
  16. }
  17. //归一化到0~255
  18. normalize(imageGamma, imageGamma, 0, 255, CV_MINMAX);
  19. //转换成8bit图像显示
  20. convertScaleAbs(imageGamma, imageGamma);
  21. imshow("原图", image);
  22. imshow("伽马变换图像增强效果", imageGamma);
  23. waitKey();
  24. return 0;
  25. }

伽马变换增强前原图像:

伽马变换增强后效果:

彩色图像增强opencv相关推荐

  1. 冈萨雷斯数字图像处理——彩色图像增强3实例

    冈萨雷斯数字图像处理--彩色图像增强3实例 实例一:基于直方图均衡化的彩色图像增强     要处理的图片:fruit.jpg               example1.m: clc; RGB=im ...

  2. 暗光图像增强—opencv(C++)

    暗光图像增强-opencv(C++) code1 // An highlighted block #include <opencv2/core/core.hpp> #include < ...

  3. 【图像增强】HSI+同态滤波彩色图像增强【含Matlab源码 1515期】

    ⛄一. 图像增强技术简介 1 图像增强 图像增强是对图像的某些特征,如边缘.轮廓.对比度等进行强调或锐化,以便于显示.观察或进一步分析与处理.通过对图像的特定加工,将被处理的图像转化为对具体应用来说视 ...

  4. 彩色图像增强(限制对比度直方图阈值均衡化)Python,Win10

    import cv2 import numpy as np img = cv2.imread("C:\\Users\\dwx\\Desktop\\00312.jpg", 1)img ...

  5. 彩色图像增强之直方图均衡化

    我们要把下面的图像变得清晰一点: 直接上代码: %% 彩色图像的直方图均衡化 clc; RGB=imread('ceshi.png'); %输入彩色图像,得到三维数组 R=RGB(:,:,1); %分 ...

  6. 【数字图像处理】Matlab实现-图像增强-彩色图像增强(彩虹编码,热金属编码)

    伪彩色处理 伪彩色增强:把一幅黑白域图像的不同灰度级映射为一幅彩色图像的技术手段. 伪彩色增强有很多种方法,而下面的增强方法则是使用的空间域灰度级-彩色变换法. 空间域灰度级-彩色变换法:可以将灰度图 ...

  7. 使用Python,OpenCV转换颜色空间,追踪对象的轨迹

    使用Python,OpenCV转换颜色空间,追踪对象的轨迹 1. 效果图 2. 源码 参考 这篇博客可以看作是之前俩篇博客的融合,将介绍如何使用Python,OpenCV转换颜色空间,并利用HSV追踪 ...

  8. matlab Retinex图像增强算法

    Retinex理论在彩色图像增强.图像去雾.彩色图像恢复方面拥有很好的效果,下面介绍一下我对该算法的理解. Retinex理论 Retinex理论始于Land和McCann于20世纪60年代作出的一系 ...

  9. 【图像处理】彩色图像自适应对比度增强(OpenCV实现)

    [fishing-pan:https://blog.csdn.net/u013921430 转载请注明出处]   提到图像增强,第一印象就是直方图均衡与直方图规定化,这是最常见的也是非常有效的全局图像 ...

最新文章

  1. 从前到后的CAN总线(一)
  2. 命名空间和模块化编程3
  3. Android官方开发文档Training系列课程中文版:创建自定义View之View的创建
  4. 从Spark Streaming到Apache Flink: 实时数据流在爱奇艺的演进 | 技术头条
  5. 设计一个4*4魔方程序,让魔方的各行值的和等于各列值的和,并且等于两对角线的和,例如以下魔方,各行各列及两对角线值的和都是64.
  6. Jenkins 定时构建和Poll SCM的区别
  7. 2018年,免费、无水印录屏软件有哪些?
  8. pmp考试有题库么?有多少题?
  9. 如何理解“安全的本质是信任问题”
  10. 更改jenkins插件地址为国内源地址
  11. 如何整理碎片化的知识?
  12. 弹幕穿人过,视频换背景,快准狠的图像分割技术了解一下
  13. 环境光照IBL(Image-Based Lighting)
  14. uniapp 微信小程序分页方法:uni-pagination分页插件和上拉分页、下拉加载刷新、刷新后回到顶部
  15. 数据结构实验报告:图的基本操作及应用
  16. 每日新闻丨Facebook再曝数据泄露事故;国内首台晶圆自动翻转倒片机成功研发...
  17. [茶香人家:原创资料]岩茶基础名词图解
  18. Android启动模式SingleInstance
  19. 零伽壹链改研究:区块链技术在支付及清结算的变革与创新!
  20. Python基于内存缓存简单实现

热门文章

  1. 最新 lineageos 编译过程 详细过程
  2. 二叉树有关的计算机二级选择题,2016计算机二级考试选择题训练及答案
  3. java语言实现吃水果问题_Java 面向对象 之 人吃水果
  4. 【jzoj4826】【小澳的葫芦】【二分答案】
  5. 别人的计算机网络看不到,局域网内看不到别人的电脑怎么办
  6. 12306快手,初始版本发布。匆忙写了个,不喜勿用
  7. 怎么将几张pdf合并成一张_怎么把多个PDF文件合并成一个
  8. 华为机试题python版节选(基础编程题)
  9. edge搁置标签页_如何自定义Microsoft Edge的新标签页
  10. iOS模拟各种网络状态