http://blog.csdn.net/dcrmg/article/details/53677739

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图像增强算法实现(直方图均衡化、拉普拉斯、Log、Gamma)的更多相关文章

  1. 图像增强算法(直方图均衡化、拉普拉斯、Log、伽马变换)

    一.图像增强算法原理 图像增强算法常见于对图像的亮度.对比度.饱和度.色调等进行调节,增加其清晰度,减少噪点等.图像增强往往经过多个算法的组合,完成上述功能,比如图像去燥等同于低通滤波器,增加清晰度则 ...

  2. 【OpenCV】图像增强---灰度变换、直方图均衡化

    图像增强的目的:改善图像的视觉效果或使图像更适合于人或机器的分析处理.通过图像增强,可以减少图像噪声,提高目标与背景的对比度,也可以增强或抑制图像中的某些细节.  ------------------ ...

  3. OpenCV计算机视觉学习(9)——图像直方图 & 直方图均衡化

    如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 1, ...

  4. 【图像处理】基于OpenCV底层实现的直方图匹配

    image processing 系列: [图像处理]图片旋转 [图像处理]高斯滤波.中值滤波.均值滤波 直方图匹配算法.又称直方图规定化.简单说.就是依据某函数.或者另外一张图片的引导,使得原图改变 ...

  5. OpenCV-跟我一起学数字图像处理之直方图均衡化

    从这篇博文开始,小生正式从一个毫不相干专业转投数字图像处理.废话不多说了,talk is cheap. show me the code. 直方图均衡化目的 由于一些图像灰度的分布过于集中,这样会导致 ...

  6. Win8Metro(C#)数字图像处理--2.30直方图均衡化

    原文:Win8Metro(C#)数字图像处理--2.30直方图均衡化 [函数名称] 直方图均衡化函数HistogramEqualProcess(WriteableBitmap src) [算法说明] ...

  7. openCV中直方图均衡化算法的理解

    直方图均衡化就是调整灰度直方图的分布,即将原图中的灰度值映射为一个新的值.映射的结果直观表现是灰度图的分布变得均匀,从0到255都有分布,不像原图那样集中.图像上的表现就是对比度变大,亮的更亮,暗的更 ...

  8. OpenCV——直方图均衡化(用于图像增强)

    #include <opencv2/opencv.hpp> #include <iostream> #include <math.h> using namespac ...

  9. 灰度图像--图像增强 直方图均衡化(Histogram equalization)

    灰度图像--图像增强 直方图均衡化(Histogram equalization) 转载请标明本文出处:http://blog.csdn.net/tonyshengtan,欢迎大家转载,发现博客被某些 ...

随机推荐

  1. IIC协议

    总线信号 :  SDA :串行数据线 SCL  :串行时钟 总线空闲状态 : SDA :高电平 SCL :高电平 起始位:SCL为高电平期间    SDA出现下降沿 终止位:SCL为高电平期间 SDA ...

  2. Effective C++ —— 构造/析构/赋值运算(二)

    条款05 : 了解C++默默编写并调用哪些函数 编译器可以暗自为class创建default构造函数.copy构造函数.copy assignment操作符,以及析构函数. 1. default构造函 ...

  3. php学习七:时间和日期

    在学习php中的时间和日期的时候,必须要了解什么是时间戳,那么什么是时间戳呢,请看一下的定义 时间戳:从 Unix 纪元(格林威治时间 1970 年 1 月 1 日 00:00:00)到当前时间的秒数 ...

  4. DNS、链接网页、资源预加载处理

    从网页性能的角度来看,DNS的解析时间是比较耗时的.因此如果能预先下载网页中用到的其它域的资源.可提前进行DNS解析: <link rel="dns-prefetch" hr ...

  5. 高中生的IT之路-1.3那一幕

    上一篇讲到,当时我认为自己的命运就是小时候上学,长大后外出打工,所以高中毕业后就来到了天津,到爸爸的店铺打工. 我爸的店铺就在天津大学校园里,幸运的是,我人生的转折点也就在此. 刚到店里那段时间,每天 ...

  6. Egret3D初步学习笔记四 (地形使用)

    一 导出地形 Skinedmesh没反应.得选择导出scene. 二 直接报错  三 修改错误 选择关闭程序后,仍然可以导出完成. 由于地图的lightmap.exr没法解析报错. 在获得MapCon ...

  7. Common Subsequence 最大公共子序列问题

    Problem Description A subsequence of a given sequence is the given sequence with some elements (poss ...

  8. python安装whl文件的注意事项(windows系统)

    首先给大家来一波福利,在没有连接外网(互联网)的情况下,只有公司内网或者断网情况下,需要安装python的一些依赖,不会操作的同学可能就会遇到麻烦.这里教大家离线安装python依赖. 方法:使用.w ...

  9. Andrew Ng机器学习公开课笔记 -- Generative Learning algorithms

    网易公开课,第5课 notes,http://cs229.stanford.edu/notes/cs229-notes2.pdf 学习算法有两种,一种是前面一直看到的,直接对p(y|x; θ)进行建模 ...

  10. Python爬虫基础(二)urllib2库的get与post方法

    urllib2默认只支持HTTP/HTTPS的GET和POST方法 一.Get方式 GET请求一般用于我们向服务器获取数据,比如说,我们用百度搜索,在百度搜索框中搜索“秦时明月”,拿到地址栏里有效ur ...