2013-12-22 44 views
0

Point数组的视觉表示(放大到800%):http://i.cubeupload.com/2Y3JPf.png如何摆脱此Point数组中的异常值?

请不要重新上传到Imgur。 Imgur的压缩使得图像在高倍变焦时模糊不清。

(在与相关的点的图像的一部分的放大高亮:)
enter image description here

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

正如您所看到的,大多数红点位于网格中,但窗口左上角有几个异常值,右下角显示了地雷的数量。我将如何摆脱异常值?我曾经想过逐一解析每个点,看看它们是否相距一定数量的像素,但是在哪一点上我会开始? pointArray[0]位于左上方,所以它甚至不是网格的一部分,这意味着找到恒定的像素间隙不会起作用。

任何想法?

+0

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

回答

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; 
} 
相关问题