![]() |
|
||||||||||
|
|||||
|
Привет, ребята
![]() Вот в чем суть проблемы: есть папка A, в которой имеется порядка 10 000 изображений такого вида: и есть папка B, в которой имеется порядка 100 изображений такого вида: И задача состоит в том, что нужно среди изображений из папки A найти совпадающие с изображениями из папки B. Также известно следующее: 1) Водяной знак присутствует только на картинках из папки B, располагается в центре изображения и имеет фиксированные размеры. 2) Если картинки совпадают, как на примере выше, то они точно имеют одинаковые размеры и отличаются, по сути, только наличием водяного знака. 3) Картинки из папки A могут иметь различные размеры. 4) Фон картинки необязательно белый и может быть сколь угодно пестрым. 5) И самое коварное – неизвестно, есть ли в папке A изображение совпадающее с изображением из папки B. Я попробовал решить задачу в лоб: 1) Берем очередную картинку из папки B и последовательно сравниваем ее со всеми картинками из папки A. 2) Если их размеры не совпадают, то переходим к следующей картинке из папки A. 3) Если размеры совпадают начинаем сравнивать их попиксельно. И если (кол-во совпавших пикселей / полное кол-во пикселей) > 0.8, то считаем изображения совпадающими. if (WMBitmapData.width == picBitmapData.width && WMBitmapData.height == picBitmapData.height) { var coinCount:int = 0; var w:int = WMBitmapData.width; var h:int = WMBitmapData.height; for (var a:int = 0; a < w; ++a) for (var b:int = 0; b < h; ++b) { if (WMBitmapData.getPixel32(a, b) == picBitmapData.getPixel32(a, b)) ++coinCount; } if (Number(coinCount) / Number(w * h) > 0.8) { // Фиксируем совпадение ... } } Проблема в том, что иногда алгоритм ошибается, неверно определяя совпадение картинок. Думаю здесь дело в большом количестве белого фона, что гарантирует превышение лимита совпадения в 0.8. Но дело в том, что я не представляю как подобрать нужную константу вместо 0.8, потому что картинка может быть и меньших размеров (приведенные выше были 500x500), и тогда водяной знак будет занимать значительную площадь изображения. Подскажите, как быть? P.S. Также вместо getPixel32 я использовал BitmapData.compare, но это не суть, так как относится уже к реализации. |
![]() |
Часовой пояс GMT +4, время: 20:10. |
|
|
« Предыдущая тема | Следующая тема » |
| Теги |
| распознавание изображений |
| Опции темы | |
| Опции просмотра | |
|
|