我正在使用OpenCV库中的cvThresholding()例程来使用Otsu的阈值方法执行二值化。有时接近失败,这是可以理解的,因为Otsu计算整个图像的单个阈值。为了改善结果,我决定将图像分解为网格,然后对网格的每个部分执行Otsu binarisation。结果现在似乎令人鼓舞,但是基于网格的分区使得输出二进制图像本质上是不连续的,尤其是在网格的边缘处。有办法解决这个问题吗?
请注意,这种方法最适合我。我知道opencv中提供的自适应阈值选项,这似乎对我不起作用,因为它与Otsu的二元化方法相比过于敏感。
等待回复。提前谢谢。
答案 0 :(得分:3)
最简单的可能是在网格中心之间插入阈值。虽然阈值图像是不连续的(梯度,而不是幅度),但它不太可能出现在最终结果中。
答案 1 :(得分:3)
如果您尝试移动窗口而不是滑动怎么办?例如,对于每个像素,基于针对以该像素为中心的5x5或7x7色块获得的阈值进行二值化(在边缘处进行适当的包裹)。
移动窗口将使阈值在图像上逐渐且连续地变化。