循序渐进之(二)空间域图像增强之直方图处理直方图均衡化(HE)

本文深入探讨了数字图像处理中的直方图均衡化技术,包括其基本原理、AHE、CLHE和CLAHE等扩展算法。通过确保像素值的相对亮度关系并限制值域,累积分布函数在直方图均衡化中起到关键作用。同时,提到了OpenCV中实现直方图均衡化的源码学习资源和C++代码示例。
摘要由CSDN通过智能技术生成

                          循序渐进之(二)空间域图像增强之直方图处理直方图均衡化(HE)

            

冈萨雷斯第二版《数字图像处理》,直方图均衡化是3.3.1章节的内容。

(拓展:

HE算法:直方图均衡化。。

AHE算法:自适应直方图均衡化。。

CLHE算法:限制对比度直方图均衡化。。

CLAHE算法:限制对比度自适应直方图均衡化。。)

第一个问题。均衡化过程中,必须要保证两个条件:①像素无论怎么映射,一定要保证原来的大小关系不变,较亮的区域,依旧是较亮的,较暗依旧暗,只是对比度增大,绝对不能明暗颠倒;②如果是八位图像,那么像素映射函数的值域应在0和255之间的,不能越界。综合以上两个条件,累积分布函数是个好的选择,因为累积分布函数是单调增函数(控制大小关系),并且值域是0到1(控制越界问题),所以直方图均衡化中使用的是累积分布函数。

第二个问题。累积分布函数具有一些好的性质,那么如何运用累积分布函数使得直方图均衡化?比较概率分布函数和累积分布函数,前者的二维图像是参差不齐的,后者是单调递增的。

1.具体原理请参考:

直方图均衡化

直方图均衡化过程

2.opencv中equalizeHist()源码学习请参考:

opencv源码阅读之直方图均衡化(1)

3.代码主要参考:

直方图均衡化C++实现

#include<iostream>
#include<opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
	Mat originImage = imread("E://duibi.jpg",0);
	Mat equalizeImage(originImage.size(), originImage.type());
	Mat src(originImage.size(), originImage.type());
	vector<vector<int>> pixelNumber(256);//这里的双重vector主要是为了存储对应各个级别像素的个数,每次找到一个
	//一个灰度为x的像素,对应的将pixelNumber[x] push_back一个数进去,我们不关心实际的vector的数值,只关心pixelNumber[x]的size()即对应灰度像素的数量,
	for (int i = 0; i < (originImage.rows - 1); i++)
		for (int j = 0; j < (originImage.cols - 1); j++)
		{
			int x = originImage.at<uchar>(i, j);
			pixelNumber[x].push_back(0);
		}
    //下面这个数组的方法貌似更简洁点
    /* for (int j = 0; j < nHeight; j++)
    {
        for (int i = 0; i < nWidth; i++)
        {
            arrayDstNum[matDst.at<uchar>(j, i)]++;
        }
    }*/
	for (int i = 0; i < (originImage.rows - 1); i++)
		for (int j = 0; j < (originImage.cols - 1); j++)
		{
			int pixelNumberTotal = 0;
			int x = originImage.at<uchar>(i, j);
			for (int k = 0; k < x+1; k++)//这里主要计算累计分布,即像素灰度为x的pixelNumberTotal为灰度≤x的所有像素数量的总和
				pixelNumberTotal += pixelNumber[k].size();
			equalizeImage.at<uchar>(i, j) = pixelNumberTotal * 255 / (equalizeImage.rows*equalizeImage.cols);//利用公式计算均衡化后的灰度值
		}
	equalizeHist(originImage, src);
	imshow("原图", originImage);
	imshow("均衡化图", equalizeImage);
	imshow("opencv默认均衡化图", src);
	waitKey(0);
	return 0;
}

结果:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Coming_is_winter

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值