如何比较两张图片&识别图像中的图案,无论其大小和图案大小如何,并使用.Net C#?此外,从图像处理中使用哪些算法?
答案 0 :(得分:7)
请参阅Scale-invariant feature transform,template matching和Hough transform。快速且不准确的猜测可能是制作颜色直方图并进行比较。如果图像足够复杂,您可以区分几组图像。
为了简单起见,假设我们有三个用于R,G和B的桶。完全白色的图像((100,100%,100%)用于(R,G,B)。完全红色的图像会有(100%,0%,0%)。复杂的图像可能有类似的东西(23%,53%,34%)。如果你采用那个(R,G,B)空间中的点之间的距离,你可以比较哪一个是“更接近”。
答案 1 :(得分:2)
我不是图像识别方面的专家,我曾经在用{C#编写的AForge库中进行图像识别。也许它可以帮助......
答案 2 :(得分:2)
图像匹配和图像识别技术可能非常不同。对于第一项任务,您可以使用SIFT或手工制作您自己的距离函数,基于RGB或其他方式。对于识别,可以使用大量的机器学习技术,更流行的技术涉及Adaboost,SVM和其他混合神经网络方法。该领域不乏相关的研究论文。谷歌是你的朋友。
答案 3 :(得分:1)
查找模式识别。除了名字之外,我对此知之甚少。
警告:如果这就是你想要的,那就是已知的最难的“现实世界”编程问题之一。
答案 4 :(得分:1)
Jinmala,你在这里问了一个非常广泛的问题。关于这些主题的文献中有数千篇论文。没有正确的答案,图像比较中有许多未解决的问题,所以你真的可能不希望有一个简单的解决方案,只是有效(除非你的情况非常简单和受限制)
如果你缩小范围,我可以提供帮助。
答案 5 :(得分:1)
你可能正在寻找这个
System.Drawing.Bitmap sourceImage =(Bitmap)Bitmap.FromFile(@“C:\ SavedBMPs \ 1.jpg”); System.Drawing.Bitmap template =(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);
我警告你,它很慢,需要大约6秒才能处理1024x768的图像,并在其中查找尺寸为50x50的pciture。enter code here
答案 6 :(得分:1)
模板匹配,你可以用EmguCV,OpendotnetCV,Aforge.net
来做到这一点答案 7 :(得分:0)
Scale-invariant feature transform (SIFT)可能就是你要找的东西。然而,理解或实施起来并不简单。
答案 8 :(得分:0)
ImageMagick有一篇有趣的文章:http://www.imagemagick.org/Usage/compare/#sub-image