小言_互联网的博客

直方图均衡化

454人阅读  评论(0)

目录

一、什么是像素

二、什么是通道

2.1为什么它们是灰度的?

三、什么是直方图

四、直方图均衡化

五、对比度

六、锐化滤波器

6.1 微分法  :梯度锐化和拉普拉斯锐化

 6.1.1 一阶微分滤波器  梯度算子

6.1.2 二阶微分-拉普拉斯算子锐化

6.2 高通滤波法

七、伽马校正


一、什么是像素

像素是指由图像的小方格组成的,这些小方块都有一个明确的位置和被分配的色彩数值,小方格颜色和位置就决定该图像所呈现出来的样子。

每个像素都是由颜色的组合组成的,更准确地说,就是原色。

绿色的RGB色值是(255,0,0)

绿色的RGB色值是(0,255,0)

绿色的RGB色值是(0,0,255)

对于一副8bit的图像来说,矩阵元素的取值范围是从0-255(0 - 2^8-1)

矩阵中的元素对应我们所说的像素(pixel),其值即该像素的灰度值,数值越大,像素的颜色越‘白/浅’;数值越小,像素的颜色越’黑/深‘

二、什么是通道

通道是彩色图像的灰度图像,它仅由构成彩色图像的一种原色组成。

通道只有在图像显示时才有意义!它是图像显示的容器!

一个RGB色彩空间的400*300的图片为例:这幅图的本质是一个400*300*3的一个矩阵

说明这个图像有400列,300行,以及在色彩上有三个分量,分别是:

 RGB三通道分离图片R-G-B

2.1为什么它们是灰度的?

每个分量单独拿出来都是一个400*300(*1)的矩阵如你所见,它们并不是彩色的,而是一幅灰度图像;这是因为,当我们分割通道时,每个图像中的像素现在只有一个通道。所以它们是灰色的。

在图像显示时,我们把图像的R分量放进红色通道里,B分量放进蓝色通道里,G分量放进绿色通道里。经过一系列处理,显示在屏幕上的就是我们所看到的彩色图像了。

三、什么是直方图

直方图可以让你了解总体的图像像素强度分布,其X轴为像素值(一般范围为0~255),在Y轴上为图像中具有该像素值像素数。

 直方图的作用: 通过直方图可以直观地图像的对比度、亮度、强度分布等。

四、直方图均衡化

直方图均衡化是一种简单有效的图像增强技术。 

直方图均衡化是将原图像通过某种变换,得到一幅灰度直方图为均匀分布的新图像的方法。

直方图均衡化的基本原理是:对在图像中像素个数多的灰度值(即对画面起主要作用的灰度值)进行展宽,而对像素个数少的灰度值(即对画面不起主要作用的灰度值)进行归并,从而增大对比度,使图像清晰,达到增强的目的。

直方图均衡就是从图像的灰度图入手,通过调整图像的灰阶分布,使得在0~255灰阶上的分布更加均衡(拉伸像素强度分布范围),通过来增强图像对比度的一种方法.

直方图均值化图片:对比度明显改善

五、对比度

对比度: 是指一幅图像中灰度反差的大小
对比度 = 最大亮度 / 最小亮度

对比度低的特点:最亮度和最暗度相差不是很多

对比度低的特点:最亮度和最暗度相差很大,白的更白,黑的更黑

六、锐化滤波器

图像锐化的主要目的有两个:

1.增强图像边缘,使模糊的图像变得更加清晰,颜色变得鲜明突出,图像的质量有所改善,产生更适合人眼观察和识别的图像;

2.希望通过锐化处理后,目标物体的边缘鲜明,以便于提取目标的边缘、对图像进行分割、目标区域识别、区域形状提取等,进一步的图像理解与分析奠定基础。

注意:由于锐化使噪声受到比信号还要强的增强,所以要求锐化处理的图像有较高的信噪比;否则,锐化后的图像的信噪比更低。

图像锐化主要影响图像中的低频分量,不影响图像中的高频分量。

 图像锐化一般有两种方法:

6.1 微分法  :梯度锐化和拉普拉斯锐化

 6.1.1 一阶微分滤波器  梯度算子

邻域平均法或加权平均法可以平滑图像,反过来利用对应的微分算法可以锐化图像。微分算法是求信号的变化率,有加强高频分量胡作用,从而使图像轮廓清晰。

由于图像模糊胡实质是图像受到平均或积分运算造成的,所以为了把图像中任何方向伸展的边缘肯模糊的轮廓变得清晰,可以对图像进行逆运算如微分运算,从而使图像清晰化。

6.1.2 二阶微分-拉普拉斯算子锐化

计算公式:sharpened_pixel = 5 * current – left – right – up – down ;

参考: https://www.likecs.com/show-205085623.html

6.2 高通滤波法

七、伽马校正

Gamma校正是对输入图像灰度值进行的非线性操作,使输出图像灰度值与输入图像灰度值呈指数关系。

γ的值决定了输入图像和输出图像之间的灰度映射方式,即决定了是增强低灰度值区域还是增高灰度值区域。

γ>1时,图像的高灰度区域对比度得到增强,直观效果是一幅偏亮的图变暗了下来。

γ<1时,图像的低灰度区域对比度得到增强,直观效果是一幅偏暗的图变亮了起来。

γ=1时,不改变原图像。

参考: https://blog.csdn.net/wenhao_ir/article/details/51656802

代码:


  
  1. #include <iostream>
  2. #include <opencv2/core/core.hpp>
  3. #include <opencv2/imgproc/imgproc.hpp>
  4. #include <opencv2/highgui/highgui.hpp>
  5. using namespace cv;
  6. const int g_nMaxValueSlider = 100;
  7. int g_fGammaValueSlider = 20;
  8. Mat srcImage;
  9. void on_Trackbar(int, void*); //滑动条回调函数
  10. int main()
  11. {
  12. //读取图片 0灰度图 1三通道彩色图像
  13. srcImage = imread( "C:\\Users\\darren\\Desktop\\proj_test\\test\\test\\picture_test1\\1.jpg");
  14. if (!srcImage.data) { printf( "读取srcImage错误!\n"); return false; }
  15. //------------------------直方图均衡化
  16. //直方图均衡化是图像处理领域中利用 图像直方图 对 对比度 进行调整的方法
  17. vector<Mat> channels;
  18. Mat imageBlueChannel;
  19. Mat imageGreenChannel;
  20. Mat imageRedChannel;
  21. Mat equalizeHistImage;
  22. split(srcImage, channels); //通道分离
  23. imageBlueChannel = channels. at( 0);
  24. imageGreenChannel = channels. at( 1);
  25. imageRedChannel = channels. at( 2);
  26. namedWindow( "raw picture"); //raw
  27. imshow( "raw picture", srcImage);
  28. waitKey( 0);
  29. namedWindow( "r_channel"); //R
  30. imshow( "r_channel", imageRedChannel);
  31. waitKey( 0);
  32. namedWindow( "g_channel"); //G
  33. imshow( "g_channel", imageGreenChannel);
  34. waitKey( 0);
  35. namedWindow( "b_channel"); //B
  36. imshow( "b_channel", imageBlueChannel);
  37. waitKey( 0);
  38. //直方图均衡化只能对 灰度图进行均衡化,不能对彩色图片进行处理
  39. equalizeHist(imageBlueChannel, imageBlueChannel); //直方图均衡化
  40. equalizeHist(imageGreenChannel, imageGreenChannel);
  41. equalizeHist(imageRedChannel, imageRedChannel);
  42. merge(channels, equalizeHistImage); //融合
  43. namedWindow( "直方图均衡"); //创建窗口
  44. imshow( "直方图均衡",equalizeHistImage);
  45. waitKey( 0);
  46. //-----------------------锐化滤波器
  47. //增强边缘与其他突变(如噪声、线),并削弱灰度变化缓慢的区域。
  48. //二阶微分-拉普拉斯算子锐化
  49. Mat kernel = ( Mat_< float>( 3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0); //核
  50. Mat filter2DImage;
  51. filter2D(srcImage, filter2DImage, srcImage. depth(), kernel); //通过卷积和对图形进行卷积运算
  52. namedWindow( "锐化滤波器");
  53. imshow( "锐化滤波器", filter2DImage);
  54. waitKey( 0);
  55. //
  56. namedWindow( "伽马矫正", 1);
  57. char TrackbarName[ 50];
  58. sprintf_s(TrackbarName, "fGamma %d", g_nMaxValueSlider);
  59. createTrackbar(TrackbarName, "伽马矫正", &g_fGammaValueSlider, g_nMaxValueSlider, on_Trackbar); //滑动条
  60. on_Trackbar(g_nMaxValueSlider, 0);
  61. waitKey( 0);
  62. return 0;
  63. }
  64. //--------------------------------------滑动条回调函数
  65. //fGamma =50 原图
  66. //fGamma <50 变亮
  67. //fGamma >50 变暗
  68. void on_Trackbar(int, void*)
  69. {
  70. float fGamma = ( float)g_fGammaValueSlider / 50;
  71. Mat GammaImage;
  72. unsigned char lut[ 256];
  73. for ( int i = 0; i < 256; i++)
  74. {
  75. lut[i] = saturate_cast<uchar>( pow(( float)(i / 255.0), fGamma) * 255.0f);
  76. }
  77. GammaImage = srcImage. clone();
  78. MatIterator_<Vec3b> it, end;
  79. for (it = GammaImage. begin<Vec3b>(), end = GammaImage. end<Vec3b>(); it != end; it++)
  80. {
  81. (*it)[ 0] = lut[((*it)[ 0])];
  82. (*it)[ 1] = lut[((*it)[ 1])];
  83. (*it)[ 2] = lut[((*it)[ 2])];
  84. }
  85. imshow( "伽马矫正", GammaImage);
  86. }
  87. //------------------------实现三通道分离并显示
  88. //Mat rgbChannels[3];
  89. //Mat BlueChannelDisplay;
  90. //Mat GreenChannelDisplay;
  91. //Mat RedChannelDisplay;
  92. //
  93. //split(srcImage, rgbChannels);//三通道分离
  94. //BlueChannelDisplay = rgbChannels[0];
  95. // GreenChannelDisplay = rgbChannels[1];
  96. //RedChannelDisplay = rgbChannels[2];
  97. //
  98. //namedWindow("raw picture");//raw
  99. //imshow("raw picture", srcImage);
  100. // waitKey(0);
  101. // namedWindow("r_channel");//R
  102. // imshow("r_channel", RedChannelDisplay);
  103. // waitKey(0);
  104. // namedWindow("g_channel");//G
  105. // imshow("g_channel", GreenChannelDisplay);
  106. // waitKey(0);
  107. // namedWindow("b_channel");//B
  108. // imshow("b_channel", BlueChannelDisplay);
  109. // waitKey(0);

参考:

https://blog.csdn.net/qq_15971883/article/details/88699218

https://www.zhihu.com/question/21849710

https://zhuanlan.zhihu.com/p/410810114

https://blog.csdn.net/qq_38574198/article/details/108851134


转载:https://blog.csdn.net/peng_258/article/details/127352238
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场