用于谷值检测的平滑一维直方图(OpenCV)

时间:2010-08-10 09:19:32

标签: image-processing opencv

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

不幸的是,一些直方图具有迷你峰,间隙和锯齿状边缘。我写的算法就是卡在这些上面。我认为我需要平滑粗糙的边缘,因为我需要的山峰非常突出。

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

这显示了算法陷入锯齿状边缘并失败的地方:

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

蓝线:峰值
红线:山谷

3 个答案:

答案 0 :(得分:2)

尝试模糊直方图或图像。

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

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

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