【问题标题】:Implementing a localised Otsu binarisation实现本地化的 Otsu 二值化
【发布时间】:2011-08-04 10:26:52
【问题描述】:

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

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

等待回复。提前致谢。

【问题讨论】:

  • 嗨@Saurabh Gandhi 正在尝试以下语句“cvThreshold(Img1,Img1, 0, 255,CV_THRESH_BINARY|CV_THRESH_OTSU);” Img1 是 32F 1 通道图像,但它不断抛出异常。你可以帮帮我吗 。 pLzzzz

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


【解决方案1】:

如果您尝试移动窗口而不是网格怎么办?例如,对于每个像素,根据以该像素为中心的 5x5 或 7x7 补丁获得的阈值进行二值化(在边缘进行适当的环绕)。

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

【讨论】:

  • 对图像中的每个像素执行此操作听起来相当昂贵。也就是说,目前我自己想不出比这更好的了。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-29
    • 2022-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多