灰度变换是指根据某种目标条件,按一定变换关系逐点改变源图像中每一个像素灰度值的方法,目的是为了改善画质,使图像的显示效果更加清晰。图像的灰度变换处理是图像增强处理技术中的一种非常基础、直接的空间域图像处理方法,也是图像数字化软件和图像显示软件的一个重要组成部分。
本文通过实现直方图均衡和线性变换分别对图像进行处理,研究其原理及效果。
1. 直方图均衡
算法流程
- 统计各灰度级的像素点个数,并计算从 0 到 255 的累积值。
- 根据频率的累积分布计算得到各灰度级变换后的灰度级。
- 对原图像的每个像素点进行映射变换。
主要代码
void equalizeHist(const Mat &srcImg, Mat &dstImg) {
dstImg.create(srcImg.size(), srcImg.type());
uchar *srcImgData = srcImg.data;
uchar *dstImgData = dstImg.data;
int *hist = new int[256];
memset(hist, 0, 256 * sizeof(int));
int pixNum = srcImg.cols * srcImg.rows;
for (int i = 0; i < pixNum; i++)
hist