实现本地化的Otsu二值化

时间:2011-04-13 05:48:52

标签: c matlab image-processing opencv computer-vision

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

请注意,这种方法最适合我。我知道opencv中提供的自适应阈值选项,这似乎对我不起作用,因为它与Otsu的二元化方法相比过于敏感。

等待回复。提前谢谢。

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

如果您尝试移动窗口而不是滑动怎么办?例如,对于每个像素,基于针对以该像素为中心的5x5或7x7色块获得的阈值进行二值化(在边缘处进行适当的包裹)。

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