2010-05-14 23 views
1

任何人都可以在.net中共享代码或算法(使用模式识别)进行图像比较。模式识别中的图像比较.net

我需要比较不同分辨率和纹理的2张图片,并找出差异。现在我有代码使用C#

// Load the images. 
Bitmap bm1 = (Bitmap) (Image.FromFile(txtFile1.Text)); 
Bitmap bm2 = (Bitmap) (Image.FromFile(txtFile2.Text)); 

// Make a difference image. 
int wid = Math.Min(bm1.Width, bm2.Width); 
int hgt = Math.Min(bm1.Height, bm2.Height); 
Bitmap bm3 = new Bitmap(wid, hgt); 

// Create the difference image. 
bool are_identical = true; 
int r1; 
int g1; 
int b1; 
int r2; 
int g2; 
int b2; 
int r3; 
int g3; 
int b3; 
Color eq_color = Color.Transparent; 
Color ne_color = Color.Transparent; 
for (int x = 0; x <= wid - 1; x++) 
{ 
    for (int y = 0; y <= hgt - 1; y++) 
    { 
     if (bm1.GetPixel(x, y).Equals(bm2.GetPixel(x, y))) 
     { 
      bm3.SetPixel(x, y, eq_color); 
     } 
     else 
     { 
      bm1.SetPixel(x, y, ne_color); 
      are_identical = false; 
     } 
    } 
} 

// Display the result. 
picResult.Image = bm1; 

    Bitmap Logo = new Bitmap(picResult.Image); 
    Logo.MakeTransparent(Logo.GetPixel(1, 1)); 
    picResult.Image = (Image)Logo; 

//this.Cursor = Cursors.Default; 
if ((bm1.Width != bm2.Width) || (bm1.Height != bm2.Height)) 
{ 
    are_identical = false; 
} 
if (are_identical) 
{ 
    MessageBox.Show("The images are identical"); 
} 
else 
{ 
    MessageBox.Show("The images are different"); 
} 

//bm1.Dispose() 
// bm2.Dispose() 

找到2个图像之间的差异,但这种比较,如果在2个图像相同的分辨率和size.if一些阴影是有一个图像上(但2个图像是一样的)它显示了图像之间的差异..所以我试图比较使用模式识别。

+0

当你会发现一个普遍工作的解决方案喊“Hurray”,并制作大型图像搜索引擎,其他公司仍然在努力做。 – nkrkv 2010-05-14 06:45:10

回答

0

正如nailxx所说,没有“100%免费工作代码”之类的东西。几年前,我帮助实施了“脸部识别”应用程序,我们使用的其中一个是“区域二进制模式”。它不太容易,但它给了相当好的结果。在这里找到一个关于它的文章: Local binary patterns

编辑:恐怕我找不到最近使用的纸张,它缩短了并固定在LBP本身,而不是如何使用它与纹理。

0

您的要求是一项非常复杂的科学(甚至不是工程)任务。 基本明显的算法如下:

  1. 不知何故选择上都比较图像的所有对象。 这部分相对简单,可以通过多种方式解决。

  2. 比较所有对象。这部分是科学家的一项任务,考虑到它们可以移动,旋转,调整大小等等。 :) 但是,这可以解决的情况下,你有固定数量的实体识别。像“圆”,“三角形”,“矩形”,“线”。