如何摆脱此Point数组中的异常值?

时间:2013-12-22 02:27:37

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

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

请不要重新加载到Imgur。 Imgur的压缩使得图像在高变焦时太模糊。

(图像的放大部分突出显示相关的点:)
enter image description here

在图像中,每个红点代表一个点。所有组合的红点代表Point数组。仅供参考,Point数组从左到右,从上到下排序。因此pointArray[0]位于左上角,pointArray[1]位于右上角,pointArray[2]位于左上角,但也位于pointArray[0]下方的一行和{{1} }}

如您所见,大多数红点都在网格中,但窗口左上角和右下角有一些异常值,显示的是地雷数量。我如何摆脱异常值?我想过逐个解析每个点,看看它们是否是彼此远离的恒定像素数,但我从哪个点开始? pointArray[1]位于左上方,因此它甚至不是网格的一部分,这意味着找到一个恒定的像素间隙也无法正常工作。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

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

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

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

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;
}