2012-06-23 4 views
2

Я хотел бы сравнить 2 изображения схожесть с процентом. Я хочу обнаружить 90% одинаковых изображений. Каждый размер изображения составляет 16x16 пикселей. Мне нужна подсказка, помощь в этом. Сейчас я нахожусь в состоянии обнаружить 100% такие же изображения при сравнении с кодом нижеCompare 2 16x16 pixel images сходство

for (; x < irMainX; x++) 
{ 

    for (; y < irMainY; y++) 
    { 
     Color pixelColor = image.GetPixel(x, y); 
     if (pixelColor.A.ToString() != srClickedArray[x % 16, y % 16, 0]) 
     { 
      blSame = false; 
      y = 16; 
      break; 
     } 
     if (pixelColor.R.ToString() != srClickedArray[x % 16, y % 16, 1]) 
     { 
      blSame = false; 
      y = 16; 
      break; 
     } 
     if (pixelColor.G.ToString() != srClickedArray[x % 16, y % 16, 2]) 
     { 
      blSame = false; 
      y = 16; 
      break; 
     } 
     if (pixelColor.B.ToString() != srClickedArray[x % 16, y % 16, 3]) 
     { 
      blSame = false; 
      y = 16; 
      break; 
     } 
    } 

    y = y - 16; 

    if (blSame == false) 
     break; 
} 

Например я хотел бы признать эти 2 изображения, как то же самое. В настоящее время программное обеспечение распознает их как различные изображения, так как они не точно такие же

enter image description here enter image description here

+0

Определите «подобие». –

+0

у вас есть пункт. я уточню вопрос одну секунду – MonsterMMORPG

+0

вопрос обновлен с примером 2 изображения – MonsterMMORPG

ответ

2

Используйте счетчик для числа пикселей, которые не совпадают:

public const double PERCENT_MATCH = 0.9; 

int noMatchCount = 0; 
for (int x = 0; x < irMainX; x++) 
{ 
    for (int y = 0; y < irMainY; y++) 
    { 
     if (!pixelsMatch(image.GetPixel(x,y), srClickedArray[x%16, y%16]) 
     { 
      noMatchCount++; 
      if (noMatchCount > (16 * 16 * (1.0 - PERCENT_MATCH)) 
       goto matchFailed; 
     } 
    } 
} 
Console.WriteLine("images are >=90% identical"); 
return; 
matchFailed: 
Console.WriteLine("image are <90% identical"); 

Вы можете рассчитывать соответствие пикселей, но это будет медленнее. Посмотрите, сколько двух пикселей отличается. Для большинства целей вы можете иметь ВСЕ пиксели, которые не соответствуют точно, но все же изображения выглядят визуально одинаковыми.

+2

Операции goto не должны использоваться здесь. –

+0

благодаря этой идее, похоже, в значительной степени решает мою проблему. – MonsterMMORPG

+0

@Cole: педантичный. Его псевдокод, предназначенный для иллюстрации принципа. –

2

Я бы не использовал image.GetPixel (x, y), так как это намного медленнее, чем использование небезопасного кода для проверки определенные байты, связанные с каждым изображением.

Отъезд Lockbits

 Смежные вопросы

  • Нет связанных вопросов^_^