C语言 实现局部大津二值化



我正在使用OpenCV库中的cvThresholding()例程使用Otsu的阈值方法执行二值化。有时这种方法会失败,这是可以理解的,因为Otsu为整个图像计算了一个阈值。为了改善结果,我决定将图像分解成网格,然后对网格的每个部分执行Otsu二值化。现在的结果似乎是令人鼓舞的,但是基于网格的分割使得输出的二值图像在本质上是不连续的,特别是在网格的边缘。有办法解决这个问题吗?

请注意,这种方法最适合我。我知道openv中可用的自适应阈值选项,但这似乎对我不起作用,因为与Otsu的二值化方法相比,它太敏感了。

等待响应。

最简单的可能是在网格中心之间插入阈值。虽然阈值图像是不连续的(在梯度上,而不是在大小上),但它不太可能出现在最终结果中。

如果你尝试移动窗口而不是网格呢?例如,对于每个像素,基于以该像素为中心的5x5或7x7补丁获得的阈值进行二值化(在边缘进行适当的包装)。

移动窗口将使阈值在图像上逐渐连续变化。

相关内容

  • 没有找到相关文章

最新更新