通常我们很难观察一副非常亮或者暗的图像的细节信息,因此对于差异较大的图像,我们可以尝试改变其图像灰度分布来使图像灰度阶分布尽量均匀,进而增强图像细节信息。直方图均衡是通过拉伸各个像素分布来实现图像增强的,以累计分布函数变换为基础,通过特定映射来扩展像素的取值动态范围。均衡化的思想是吧一个给定的直方图按照特定的映射转换成一种更宽,更统一的分布,其核心是吧集中灰度分布映射成灰度均匀分布。
直方图均衡的目的是均衡利用动态范围的所有灰度阶。
图像均衡化算法步骤如下:
1.获取输入图像直方图
2.求了几分部直方图,构建查找表
3.通过图像映射,计算新的图像像素分布
代码如下:
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/opencv.hpp"
#include "opencv2/core/core.hpp"
#include <stdio.h>
#include <string>
using namespace std;
using namespace cv;
int main()
{
cv::Mat srcImage = cv::imread("C:\\Users\\LP\\Desktop\\C++\\ConsoleApplication4\\ConsoleApplication4\\RGBFlower4.jpg");
if (srcImage.empty())
{
return -1;
}
cv::imshow("原图像", srcImage);
//灰度转换
cv::Mat srcGray;
cv::cvtColor(srcImage, srcGray, CV_RGB2GRAY);
cv::imshow("srcGray", srcGray);
//直方图均衡化
cv::Mat heqResult;
cv::equalizeHist(srcGray, heqResult);
cv::imshow("heqResult", heqResult);
cv::waitKey(0);
return 0;
}