【问题标题】:Unable to match image of same image size but shifted blob pattern无法匹配相同图像大小但斑点图案偏移的图像
【发布时间】:2019-11-28 08:30:55
【问题描述】:

我正在尝试将图像与模板主图像匹配。所有图像的大小都相同,但图像中的斑点图案会发生变化。

我在 aforge 中尝试了 thresholdfilter,当缺陷表中的 blob 与模板图像完美对齐时,它可以很好地发现差异。如果有一点点变化,所有的 blob 都会被检测为缺陷(不同)。

var img1 = AForge.Imaging.Image.FromFile(@"compare2.jpg");
var img2 = AForge.Imaging.Image.FromFile(@"compare1.jpg");

// (* calculate absolute difference *)
var difference = new AForge.Imaging.Filters.ThresholdedDifference(15)
    {OverlayImage = img1}
    .Apply(img2);

// (* create and initialize the blob counter *)
var bc = new AForge.Imaging.BlobCounter();
bc.FilterBlobs = true;
bc.MinWidth = 5;
bc.MinHeight = 5;

 // (* find blobs *)
 bc.ProcessImage(difference);

 // (* draw result *)
 BitmapData data = img2.LockBits(
   new Rectangle(0, 0, img2.Width, img2.Height),
      ImageLockMode.ReadWrite, img2.PixelFormat);

 Pen redPen = new Pen(Color.Red, 2); 

 foreach (var rc in bc.GetObjectsRectangles())
    AForge.Imaging.Drawing.Rectangle(data, rc, Color.Red);

  img2.UnlockBits(data);
   imageBox1.Image = img2;

主图像:

移位的斑点"

如何对齐 2 张图像以使图案始终完美对齐?

【问题讨论】:

  • 在主图像中找到第一个 blob 的坐标,然后在第二个图像中找到第一个 blob 的坐标并移动图像,使这些坐标相同。
  • 你用谷歌搜索过“图像对齐”吗?有很多不同的方法可以做到这一点!
  • @Andrey ,我确实使用 aforge 中的 blob 计数器找到了 master 中第一个 blob 和第二个图像的坐标,但是如何移动图像?你能分享一些代码sn-p或链接吗?

标签: c# opencv emgucv aforge accord.net


【解决方案1】:

如果您知道两个图像上第一个斑点的坐标you can use CanvasMove 过滤器以完美对齐它们:

// create filter
CanvasMove filter = new CanvasMove(new IntPoint(
    YOUR_X_DIFF, YOUR_Y_DIFF
), Color.Green );
// apply the filter
filter.ApplyInPlace( image );

您还可以查看MoveTowards 过滤器,它尝试自动对齐图像(如果我理解正确的话),描述听起来可能有用:

这个过滤器的结果是一个图像,它是基于源图像的, 但更新的方式是减少与叠加图像的差异 - 源图像向叠加图像移动

【讨论】:

  • @Andrey,这很好用。我还有一个问题。有时,由于物体的弯曲,物体图像会略微翘曲,这仍然会导致错误的差异。有什么方法可以检查 2 张图像之间的差异而不使它们完全重叠以获得准确的结果?
  • @Roshan 不是。您需要一些将一个图像锚定到另一个图像的逻辑。蛮力方法是将一个图像逐个像素地移动到另一个图像上,直到差异最小,这就是 MoveTowards 过滤器所做的(尝试使用它)。你可以查看它的源代码,看看他们是如何实现的github.com/andrewkirillov/AForge.NET/blob/…
  • 我尝试了 Movetowards,它只是在源图像上创建了一个透明的叠加层。实际上并不移动图像。
  • @roshan 正如我所说,它可能不是您所需要的,但如果您查看 MoveTowards 的源代码,它可以让您了解如何自动将图像锚定到彼此上。
  • @Andrey,我找到了一种对齐图像的机械方法。所以这个问题已经解决了,你能帮我把blob分组吗?在上图中,一组中有 2 个斑点。我如何将它们组合在一起(可能是掩码),以便在 blob 信息中我得到两者的详细信息,如 blob 计数。
猜你喜欢
  • 2017-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多