前言
对于光照不均匀的图像,用通常的图像分割方法不能取得满意的效果。为了解决这个问题,论文《一种基于亮度均衡的图像阈值分割技术》提出了一种实用而简便的图像分割方法。该方法针对图像中不同亮度区域进行亮度补偿,使得整个图像亮度背景趋于一致后,再进行常规的阈值分割。实验结果表明,用该方法能取得良好的分割效果。关于常规的阈值分割不是我这篇推文关注的,我这里只实现前面光照补偿的部分。算法的原理可以仔细看论文。论文原文见附录。
算法步骤
如果是RGB图需要转化成灰度图。
求取原始图src的平均灰度,并记录rows和cols。
按照一定大小,分为
个方块,求出每块的平均值,得到子块的亮度矩阵
。
用矩阵
的每个元素减去原图的平均灰度,得到子块的亮度差值矩阵
。
用双立方插值法,将矩阵
resize成和原图一样大小的亮度分布矩阵
。
得到矫正后的图像:
。
代码实现
Mat speed_rgb2gray(Mat src) {
Mat dst(src.rows, src.cols, CV_8UC1);
#pragma omp parallel for num_threads(12)
for (int i = 0; i < src.rows; i++) {
for (int j = 0; j < src.cols; j++) {
dst.at(i, j) = ((src.at(i, j)[0] << 18) + (src.at(i, j)[0] <&l