本文共 2951 字,大约阅读时间需要 9 分钟。
在图像处理领域,OTSU算法和最大熵算法作为全局阈值分割的代表方法,虽然在许多场景下表现出色,但在面对光照不均(阴影、亮斑等)的图像时往往显得力不从心。这种现象在实践中经常出现,如下图所示:
此类问题的根本原因在于传统的全局阈值方法无法有效捕捉到图像局部的亮度变化特征。这种局限性促使我们探索一种更加灵活的解决方案——自适应阈值法。
自适应阈值法(Adaptive Thresholding)与传统的全局阈值法有着本质的区别:它不是基于整个图像计算固定的阈值,而是根据图像不同区域的亮度分布,自适应地为每个局部区域计算最优的阈值。这种方法能够更好地适应复杂的光照条件,解决传统方法在处理光照不均图像时的不足。
具体而言,自适应阈值法通过以下方法实现局部阈值的计算:
值得注意的是,虽然均值法看似简单,但其在实践中表现出色,尤其在处理光照不均问题时能够提供较好的视觉效果。
OpenCV为开发者提供了丰富的API来实现自适应阈值法,以下是相关函数的说明:
void adaptiveThreshold( InputArray src, OutputArray dst, double maxValue, int adaptiveMethod, int thresholdType, int blockSize, double C);
ADAPTIVE_THRESH_MEAN_C
:使用均值法加偏移。ADAPTIVE_THRESH_GAUSSIAN_C
:使用高斯加权平均法加偏移。THRESH_BINARY
:二值化处理(阈值以上设为最大值,以下设为0)。THRESH_BINARY_INV
:取反后的二值化处理。以下是一个基于OpenCV实现自适应阈值法的示例代码:
#include#include using namespace cv;using namespace std;void AdaptiveThreshold(Mat& src, Mat& dst, double Maxval, int Subsize, double c) { if (src.channels() > 1) { cvtColor(src, src, CV_BGR2GRAY); } // 选择不同的滤波方法 Mat smooth; if (c == 0) { blur(src, smooth, Size(Subsize, Subsize)); } else { GaussianBlur(src, smooth, Size(Subsize, Subsize), 0, 0); } // 偏移调整 smooth -= c; // 复制原图并应用阈值处理 src.copyTo(dst); for (int r = 0; r < src.rows; ++r) { const uchar* srcPtr = src.ptr(r); const uchar* smoothPtr = smooth.ptr(r); uchar* dstPtr = dst.ptr(r); for (int c = 0; c < src.cols; ++c) { if (srcPtr[c] > smoothPtr[c]) { dstPtr[c] = Maxval; } else { dstPtr[c] = 0; } } }}int main() { Mat src = imread("I:\\Learning-and-Practice\\2019Change\\Image process algorithm\\Img\\Fig1049(a)(spot_shaded_text_image).tif"); if (src.empty()) { return -1; } if (src.channels() > 1) { cvtColor(src, src, CV_BGR2GRAY); } // 生成自适应阈值图像 Mat dst, dst2; AdaptiveThreshold(src, dst, 255, 21, 10); cv::adaptiveThreshold(src, dst2, 255, CV_ADAPTIVE_THRESH_MEAN_C, CV_THRESH_BINARY, 21, 10); // 显示图像 namedWindow("src", CV_WINDOW_NORMAL); imshow("src", src); namedWindow("dst", CV_WINDOW_NORMAL); imshow("dst", dst); namedWindow("dst2", CV_WINDOW_NORMAL); imshow("dst2", dst2); waitKey(0); return 0;}
cv::cvtColor
将其转换为灰度图,以便后续处理。通过上述方法,处理后的图像效果显著改善,如下图所示:
此方法在处理光照不均图像时,能够更好地保留细节信息,显著提升了图像的视觉质量。
转载地址:http://egrfk.baihongyu.com/