3

如何比较两个图像并识别图像中的图案,而不管其大小和图案大小,并使用.Net C#?另外,图像处理中使用了哪些算法?

4

8 回答 8

7

请参阅尺度不变特征变换模板匹配霍夫变换。快速且不准确的猜测可能是制作颜色直方图并进行比较。如果图像足够复杂,您可能能够区分几组图像。

为简单起见,假设我们有 R、G 和 B 的三个桶。一个完全白色的图像将有 (100%, 100%, 100%) 的 (R, G, B)。一个完全红色的图像将具有 (100%, 0%, 0%)。一个复杂的图像可能有类似 (23%, 53%, 34%) 的东西。如果你取那个 (R, G, B) 空间中的点之间的距离,你可以比较哪个“更接近”。

于 2008-11-20T05:21:16.363 回答
2

我不是图像识别方面的专家,因为我曾经偶然发现AForge库是用 C# 编写的并进行图像识别。也许它可以帮助...

于 2008-11-20T06:32:02.743 回答
2

图像匹配和图像识别的技术可能非常不同。对于第一个任务,您可以使用 SIFT 或根据 RGB 或其他方式手工制作您自己的距离函数。对于识别,您可以使用大量的机器学习技术,更流行的技术包括 Adaboost、SVM 和其他混合神经网络方法。该领域不乏相关研究论文。谷歌是你的朋友。

于 2008-11-20T07:08:43.090 回答
1

你可能正在寻找这个

System.Drawing.Bitmap sourceImage = (Bitmap)Bitmap.FromFile(@"C:\SavedBMPs\1.jpg"); System.Drawing.Bitmap 模板 = (Bitmap)Bitmap.FromFile(@"C:\SavedBMPs\2.jpg"); // 创建模板匹配算法的实例 // (将相似度阈值设置为 92.5%)

       ExhaustiveTemplateMatching tm = new ExhaustiveTemplateMatching(0.921f);
            // find all matchings with specified above similarity

            TemplateMatch[] matchings = tm.ProcessImage(sourceImage, template);
            // highlight found matchings

       BitmapData data = sourceImage.LockBits(
            new Rectangle(0, 0, sourceImage.Width, sourceImage.Height),
            ImageLockMode.ReadWrite, sourceImage.PixelFormat);
        foreach (TemplateMatch m in matchings)
        {

                Drawing.Rectangle(data, m.Rectangle, Color.White);

            MessageBox.Show(m.Rectangle.Location.ToString());
            // do something else with matching
        }
        sourceImage.UnlockBits(data);

我警告你,处理 1024x768 的图像在 50x50 大小的图片中找到的图像非常慢,大约需要 6 秒。enter code here

于 2012-02-25T11:55:26.517 回答
1

Jinmala,你在这里提出了一个非常广泛的问题。文献中关于这些主题的论文数以千计。没有正确的答案,而且图像比较中还有很多未解决的问题,所以你真的可能不能指望一个简单的解决方案就行了(除非你的情况非常简单和受限)

如果您缩小范围,我也许可以提供帮助。

于 2009-03-31T19:31:36.420 回答
1

查找模式识别。除了名字,我对它知之甚少。

警告:如果这是你想要的,那它是已知的最难的“现实世界”编程问题之一。

于 2008-11-20T05:21:19.173 回答
1

模板匹配,你可以用 EmguCV ,OpendotnetCV,Aforge.net

于 2016-01-26T15:45:19.847 回答
0

尺度不变特征变换 (SIFT)可能是您正在寻找的。然而,理解或实施并不简单。

于 2008-11-20T05:21:46.007 回答