如何找到离中心最远的图像边缘?

时间:2014-11-28 10:04:43

标签: c# image-processing

我在c#中编写了一个示例程序,在页面中绘制了一些点 我用计算点的距离设定中心点 但是怎样才能找到距离中心点最远的距离? 示例代码:

void draw(string label,float x,float y)
{
    Graphics g = panel1.CreateGraphics();
    Pen p = new Pen(Color.YellowGreen, 5);
    Random randomGen = new Random(Convert.ToInt32(label));
    KnownColor[] names = (KnownColor[])Enum.GetValues(typeof(KnownColor));
    KnownColor randomColorName = names[randomGen.Next(names.Length)];
    Color randomColor = Color.FromKnownColor(randomColorName);
    SolidBrush s = new SolidBrush(randomColor);
    g.FillEllipse(s, x * 1, y * 1, 10, 10);
}

enter image description here

2 个答案:

答案 0 :(得分:1)

我能想到的解决这个问题的最好和最简单的方法是:

1)水平和垂直扫描图像/坐标系

2)对于每个行/列,存储具有非零强度的最低和最高坐标

这将是你的边界点

答案 1 :(得分:0)

您可以定义角度的最远点。这可以解决凸壳的问题,但这种技术只适用于圆形空间,非常像你的。

对于每个角度,您必须找到最远点,然后为其指定红色。 您可以根据需要使用尽可能多的角度。

...伪

npoints = 10;

furthestPts    = zeros(npoints );//Initialize vectors with 0
distances      = zeros(npoints );
for each pt in points
   angle = atan((pt.y - c.y)/pt.x - c.x) * 360 / ( 2 * pi); //degres
   angle = (int) (angle/npoints); //we will have only 10 points separated by 36 degrees
   d = distance(pt,center);

   if(distances[angle] < d){
      distances[angle] = d;      //Updating furthest point
      furthestPts.[angle] = (pt); //Updating furthest point
    }

如果点远离中心或者点相距很远,你会发现这个算法有一些问题。