【问题标题】:How do I get rid of the outliers in this Point array?如何摆脱这个 Point 数组中的异常值?
【发布时间】:2014-01-10 14:46:12
【问题描述】:

Point 数组的可视化表示(放大到 800%):http://i.cubeupload.com/2Y3JPf.png

请不要重新上传到 Imgur。 Imgur 的压缩使图像在高缩放时过于模糊。

(放大了图像的一部分,并突出显示了相关的点:)

在图像中,每个红点代表一个点。所有红点组合起来代表 Point 数组。仅供参考,Point 数组从左到右,从上到下排列。所以pointArray[0]在左上角,pointArray[1]在右上角,pointArray[2]在左上角,但也比pointArray[0]pointArray[1]低一行。

如您所见,大多数红点位于网格中,但窗口左上角和右下角显示地雷数量的位置有几个异常值。我将如何摆脱异常值?我想过一个一个地解析每个点,看看它们是否是一个恒定数量的像素,但是我从什么时候开始呢? pointArray[0] 位于左上角,因此它甚至不是网格的一部分,这意味着无法找到恒定的像素间隙。

有什么想法吗?

【问题讨论】:

  • 帖子应该是自包含的,是的,包括图像,是的,应该托管在 Imgur 上(然后内联)。当我阅读这个问题时,似乎并不特别难以构建不需要如此高分辨率的图像 - 可能只是图像的放大部分,或者完全不同的图像,可能带有链接到原文。

标签: c# arrays data-structures computer-vision heuristics


【解决方案1】:

这是一种适用于所有网格尺寸的方法:

计算每行的点数,以及每列的点数。
然后删除行和列中所有点数少于平均点数的点。

您可以使用字典有效地构建这样的直方图:

var numDotsPerRow = new Dictionary<int,int>();
var numDotsPerColumn = new Dictionary<int,int>();

foreach (var point in pointArray)
{
    int count;
    numDotsPerRow.TryGetValue(point.X, out count);
    numDotsPerRow[point.X] = count+1;
    numDotsPerColumn.TryGetValue(point.Y, out count);
    numDotsPerColumn[point.Y] = count+1;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 2021-07-07
    • 2020-12-05
    • 1970-01-01
    • 2012-10-08
    相关资源
    最近更新 更多