从直方图中删除不必要的直方图峰值。

时间:2014-01-29 16:15:23

标签: matlab image-processing computer-vision histogram

我正在处理对象跟踪问题。我有一个对象的两个直方图 一个连续的帧。假设这些直方图是在时间实例t-1t计算的。以下是这两个直方图的示例。

从第一直方图(在时刻t-1计算)可以看出,直方图的所有峰值/分布都集中在强度值100附近。这基本上代表了一个对象。但是,在时刻t,会出现一些不必要的峰值(强度值为75左右)。

我想从第二个直方图中删除这些峰值,因此,想询问是否存在一些强大的方法来完成这项工作。这些不必要的峰值几乎存在于每一帧中,因此,通过使用一些简单的阈值处理对我没有帮助。

我目前正在做什么(阈值方法):我使用以下公式计算t-1处柱状图的中位数和标准差以及t处的阈值当前直方图:

low_thresh = med(t-1) - alpha*std(t-1)

high_thresh = med(t-1) + alpha*std(t-1)

hist_without_unnecessary_peaks = low_thresh < current_hist(t) < high_thresh

alpha是可以调整的参数。这样,我在所有帧中传播这个阈值。但是,我没有得到强有力的结果。如果有人能帮助我,我会很高兴的。谢谢。

enter image description here

enter image description here

3 个答案:

答案 0 :(得分:1)

你可以使用更多的连续帧吗?如果是这样,并且您希望保持的峰值足够一致(看起来像它们那样),那么您可以在多个帧中获取中值。

因此,不是计算整个直方图的中位数,而是针对前一帧和下一帧(或更多帧以获得更高精度)的每个单独强度值进行计算。然后使用中值作为直方图中的新强度值。这将删除异常值(即您在第二帧中看到的噪声)。

答案 1 :(得分:1)

Sanchit,当我使用RGBD相机处理时,我不得不解决这个问题。

解决方案:

(A)在直方图上应用以下对比度函数: Contrast Function 其中C(i,n)是索引i(旧直方图)的新直方图,n是您选择(并调整)的参数 - 请注意,这会产生新的直方图, n只是一个参数

(B)找到直方图上的所有局部最大/最小点并选择最大点。 有很多最大/最小值在网上找到Matlab代码,所以你不会有问题。

希望它有所帮助。

答案 2 :(得分:0)

您可以尝试群集数据并仅保留具有最多成员的群集。这可以通过在直方图中找到峰值(这可能很棘手,取决于您有多少噪音)并将其用作kmeans中的k值来完成。