如何从噪音圈中分离出模式圈?

时间:2017-10-04 22:46:08

标签: algorithm opencv computer-vision

我有一组点,其中一部分属于模式,其他是噪音。我该如何过滤它们? 我认为使用ceres-solver库来找到最接近点的模式的位置,因此也会知道噪声。

你还可以推荐什么?

图案: circles pattern

1 个答案:

答案 0 :(得分:0)

如果要为此问题构建分类模型,则需要一个特征向量f[i],可以对点p[i]进行评估。我们可以构建的一个特征是该点与其K Karest Neighbors的距离。假设我们选择k = 4。并且特征向量看起来像伪代码,

for i = 1 to count(PositivePoints)
  k = 4
  nn = KNN(p[i],k)
  for j= 1 to k
    vec = nn[j] - p[i]
    f[i][j] = norm(vec)
  end
end

在上面的代码中,f是每行(f[i])的矩阵,其中的一个特征向量(点p[i])和norm是{{为矢量定义的3}}(类似于欧氏距离)。 PositivePoints是属于该模式的点集。

现在,您可以建立模型p(y|F)的可能性。即如果您获得模型F(由矩阵f推测),那么点(y)属于该模式的可能性是多少。为了在一般情况下执行此操作,可以使用L2 normMaximum apostriori estimation。 但为了简单起见,让我们构建p(y|F)如下,

if(norm(y - F) < t) then
  p(y|F) = 1
else
  p(y|F) = 0

在上面的伪代码中,t是一个任意阈值,你可以根据经验找到它取决于正点的噪声,y是你想要知道的有趣点,如果它属于正面,F是由伪代码决定的模型,

for j= 1 to k
  F[j] = median(f[:][j])
end

在上面的代码中,f[:][j]类似于矩阵f j 列,而F[j]是到 j的距离邻居,这是积极点中最常见的。我选择中位数而不是平均值,因为它对噪音更强。虽然从您分享的图像来看,您似乎没有噪音。