【问题标题】:Smooth 1D Histogram for Valley Detection (OpenCV)用于谷检测的平滑一维直方图 (OpenCV)
【发布时间】:2010-08-10 09:19:31
【问题描述】:

我正在尝试检测一维直方图中的第一个谷值,以用作阈值点。 (处理从暗到亮/从左到右)

不幸的是,有些直方图有小峰、间隙和锯齿状边缘。我写的算法被困在这些上面。我认为我需要平滑粗糙的边缘,因为我需要的峰谷非常突出。

有没有人指出在 OpenCV 中平滑一维直方图的最佳方法?

这显示了算法在锯齿状边缘被卡住并失败的地方:

http://applist.s3.amazonaws.com/junk/failed.png

蓝线:高峰
红线:谷

【问题讨论】:

    标签: image-processing opencv


    【解决方案1】:

    尝试模糊直方图或图像。

    谷可能存在,因为并非所有图像照明级别都用于源图像。您可以通过在制作直方图之前模糊图像来轻松解决此问题。或者尝试做一些直方图移动平均,这样突然的变化就会消失。

    【讨论】:

    • 粉碎,这工作得非常好。在计算直方图之前,我对源图像应用了高斯模糊。很简单,谢谢!
    【解决方案2】:

    在我看来,您正在执行某种细分。您可以尝试使用自适应算法来执行此操作,该算法通过计算点的一些平均值来设置阈值本身。该特定算法假定边界点代表背景,而其余点代表对象。算法如下:

    calculate u1 -> the grayscale average of boundary points
    calculate u2 -> the grayscale average of all other points
    T_old = 0
    T_new = (u1 + u2) / 2
    while (T_new != T_old) 
     //you might want to modify this by introducing an epsilon value, something like
     // if T_new near T_old (abs(T_new-T_old)>1)
     u1 = grayscale average of points where grayscale intensity is lower than T_new
     u2 = grayscale average of points where grayscale intensity is higher or equal to T_new
     T_old =T _new
     T_new = (u1 + u2) / 2
    end
    threshold = T_new
    

    这应该找到灰度图像的接近最佳阈值。

    【讨论】:

      【解决方案3】:

      克服这个问题的可能方法:

      • 用高斯曲线逼近直方图
      • 尝试扩张然后侵蚀直方图图像

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-20
        • 2015-05-29
        • 1970-01-01
        • 2021-03-25
        • 1970-01-01
        • 2014-07-16
        相关资源
        最近更新 更多