轻量级前端框架助力开发者提升项目效率与性能
816
2022-10-18
adaptiveThreshold自适应二值化源码分析
自适应二值化介绍:二值化算法是用输入像素的值I与一个值C来比较,根据比较结果确定输出值。自适应二值化的每一个像素的比较值C都不同,比较值C由这个像素为中心的一个块范围计算在减去差值delta得到。C的常用计算方法有两种: 1.平均值减去差值delta(使用盒过滤boxfilter,性能会非常不错) 2.高斯分布加权和减去差值delta (使用高斯滤波GaussionBlur) 只要高兴用什么其他方法都行。最后,总算法就是用每一个像素的灰度值I,与所对应的比较值C,确定结果输出到对应的像素。 举个例子:如果使用平均值方法,平均值mean为190,差值delta为30。那么灰度小于160的像素为0,大于等于160的像素为255。如下图:如果是反向二值化,如下图:delta选择负值也是可以的。 opencv中adaptiveThreshold函数分析:参数: _src 要二值化的灰度图 _dst 二值化后的图 maxValue 二值化后要设置的那个值 method 块计算的方法(ADAPTIVE_THRESH_MEAN_C 平均值,ADAPTIVE_THRESH_GAUSSIAN_C 高斯分布加权和) type 二值化类型(CV_THRESH_BINARY 大于为最大值,CV_THRESH_BINARY_INV 小于为最大值) blockSize 块大小(奇数,大于1) delta 差值(负值也可以)源码和注释如下:复制代码/** @brief 自适应二值化*@param _src 要二值化的灰度图*@param _dst 二值化后的图*@param maxValue 二值化后要设置的那个值*@param method 块计算的方法(ADAPTIVE_THRESH_MEAN_C 平均值,ADAPTIVE_THRESH_GAUSSIAN_C 高斯分布加权和)*@param type 二值化类型(CV_THRESH_BINARY 大于为最大值,CV_THRESH_BINARY_INV 小于为最大值)*@param blockSize 块大小(奇数,大于1)*@param delta 差值(负值也可以)*/void cv::adaptiveThreshold(InputArray _src, OutputArray _dst, double maxValue, int method, int type, int blockSize, double delta){ Mat src = _src.getMat(); // 原图必须是单通道无符号8位 CV_Assert(src.type() == CV_8UC1); // 块大小必须大于1,并且是奇数 CV_Assert(blockSize % 2 == 1 && blockSize > 1); Size size = src.size(); // 构建与原图像相同的图像 _dst.create(size, src.type()); Mat dst = _dst.getMat(); if (maxValue < 0) { // 二值化后值小于0,图像都为0 dst = Scalar(0); return; } // 用于比较的值 Mat mean; if (src.data != dst.data) mean = dst; if (method == ADAPTIVE_THRESH_MEAN_C) // 计算平均值作为比较值 boxFilter(src, mean, src.type(), Size(blockSize, blockSize), Point(-1, -1), true, BORDER_REPLICATE); else if (method == ADAPTIVE_THRESH_GAUSSIAN_C) // 计算高斯分布和作为比较值 GaussianBlur(src, mean, Size(blockSize, blockSize), 0, 0, BORDER_REPLICATE); else CV_Error(CV_StsBadFlag, "Unknown/unsupported adaptive threshold method"); int i, j; // 将maxValue夹到[0,255]的uchar范围区间,用作二值化后的值 uchar imaxval = saturate_cast
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~