图像中的网格提取

时间:2014-08-12 17:57:04

标签: c# image-processing grid

有图像,图像中有一些垂直或水平的网格线。我只想从图像中提取网格,但图像中有许多不必要的线条,干扰了我的工作。有没有人有更多方法通过C#提取网格?

我的想法是,对于网格线,有一些基本单位组成整个网格,所以如果我知道基本单位的大小,我知道网格的初始点,也许我可以重新绘制网格。因此,我认为这是解决问题的关键。

1 个答案:

答案 0 :(得分:0)

您可以采取两个方向:

  • 您要么看一下图像并绘制一个像
  • 那样的网格
  • 或者您尝试分析图像以找出绘制网格所需的参数

我将图像加载到Photoshop中,发现网格线从(6,10)开始,光栅为43像素,线宽为1.5-2像素。

使用这些值绘制这些线是微不足道的:

Image img = Image.FromFile(yourImage);
Bitmap bmp = new Bitmap(img.Width, img.Height);

using (Graphics G = Graphics.FromImage(bmp) )
using (Pen pen = new Pen(Color.DarkBlue, 2f) )
{
    G.Clear(Color.Black);
    for (int x = 6; x  < img.Width; x += 43)
        G.DrawLine(pen, x, 0, x, img.Height);
    for (int y = 10; y  < img.Height; y += 43)
        G.DrawLine(pen, 0, y, img.Width, y);
}
bmp.Save(yourGrid);
bmp.Dispose();
img.Dispose();

第二种选择并非无足轻重。如果图像实际上是典型的,那么好消息是直线和光栅是规则的。但是,从图像中自动提取这些值仍然不是那么简单。一个难题是网格的不同颜色。我会扫描多行并测试像素是不是黑色。那些会进入列表然后我会丢弃仅在少数这些列表中的点数。然后将对多个列重复此操作。

只有在需要对大量具有不同网格的文件进行此分析时,才会付出相应的努力。如果数量很小,半自动分析可能会更容易,如果只有一个文件,则可以进行手动分析!