Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.01.2015, 19:11   #1
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию Распознавание путем сравнения с прототипом

Имеется такая задача распознавания образов:
Набор рисунков BMP несколько сотен с разрешением около 200х300.( рисунки сложные, не простые фигуры)

Необходимо однозначно определять какой именно рисунок находится в данный момент в bitmap.

Расположения рисунков может отличатся на единицы может быть и десятков пикселей( то есть предполагается вносимый шум)

Самый простой способ я сделал сумму всех пикселей по R,G,B составляющим по каждому рисунку.
Сравнил первый рисунок со всеми остальными по этим данным.
Получил что минимальная разница по одной из составляющих доходит до +-0.3%. Я сравнил только по сумме R составляющей. При сравнении сразу по 3м составляющим при тех же данным можно добиться большей различимости, Но все равно при условии шума распознать походу не получится однозначно?.

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

Последний раз редактировалось Illusiony; 06.01.2015 в 19:15.
Illusiony вне форума Ответить с цитированием
Старый 06.01.2015, 19:23   #2
WinCoder
Заблокирован
 
Регистрация: 24.11.2014
Сообщений: 721
По умолчанию

Цитата:
Мне только одно в память приходит
Зависит от природы шума. В некоторых случаях шум можно частично (а порой полностью) убрать простыми алгоритмами фильтрации, что увеличит процент распознавания. В любом случае что-то однозначно советовать нельзя, пока нет самого изображения.
WinCoder вне форума Ответить с цитированием
Старый 06.01.2015, 19:31   #3
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

Поправка +-0.3% при сравнении с 100 рисунками, а при дальнейшем сравнении вообще даже 0.025% ((
Такой способ совсем не годится- это просто математическое замыливание .

Шум предполагается- это смещение прототипа относительно области рисунка в Bitmap, в областях где рисунок не попал будет часть другого рисунка.

Последний раз редактировалось Illusiony; 06.01.2015 в 19:37.
Illusiony вне форума Ответить с цитированием
Старый 06.01.2015, 20:03   #4
WinCoder
Заблокирован
 
Регистрация: 24.11.2014
Сообщений: 721
По умолчанию

Цитата:
Такой способ совсем не годится
Какой такой? Я способов пока не озвучивал. Лишь общее направление подсказал. Если не годиться, и Вы в этом уверены, тогда пардон, нету темы для обсуждения в виду нерешаемости задачи.
WinCoder вне форума Ответить с цитированием
Старый 06.01.2015, 21:54   #5
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,871
По умолчанию

если рисунок чёрно-белый, то можно попиксельно сравнивать, и если хотя бы доля неправильных пикселей состявляет 10/(200x300), то считать рисунок неверным. калибровать нужно.
а если они ещё и цветные, то ещё и цвета R,G, B тем же макаром сравнивать и для каждого ошибки искать: совпадает/не совпадает....
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
NetSpace вне форума Ответить с цитированием
Старый 07.01.2015, 13:38   #6
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

Рисунки цветные.
"Такой способ совсем не годится"- это я имел ввиду свой первый способ.
Illusiony вне форума Ответить с цитированием
Старый 07.01.2015, 16:05   #7
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,871
По умолчанию

есть ещё вариант - выбирать рандомно с кажого рисунка небольшой участок, скажем 10x10 пикс и сравнивать с таким же участком в других рисунках. то есть, не все 60.000 точек шмонать, а всего 100 с произвольного места на картинке. скажем, нижний левый угол. и центр картинки для пущей точности. а вообще, бери 5 участков: 4 по углам и один в центре. процессор, может не будет перегружен тогда
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
NetSpace вне форума Ответить с цитированием
Старый 07.01.2015, 17:52   #8
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

Цитата:
Сообщение от NetSpace Посмотреть сообщение
есть ещё вариант - выбирать рандомно с кажого рисунка небольшой участок, скажем 10x10 пикс и сравнивать с таким же участком в других рисунках. то есть, не все 60.000 точек шмонать, а всего 100 с произвольного места на картинке. скажем, нижний левый угол. и центр картинки для пущей точности. а вообще, бери 5 участков: 4 по углам и один в центре. процессор, может не будет перегружен тогда
Такой вариант я уже рассматривал.
Из-за того что шум- это сдвиг картинки то чем меньше участки изображения тем сильнее сказывается шум.
Предствьте , если из участка 10х10 сдвинули на 5 пикселей? то вообще ничего и близко сравнения с прототипом не будет.
Illusiony вне форума Ответить с цитированием
Старый 07.01.2015, 21:33   #9
NIKOLAYY2
Форумчанин
 
Регистрация: 23.12.2014
Сообщений: 220
По умолчанию

Если картинка имеет сдвиг со сравниваемой картинкой - это плохо иначе можно было бы не участки сравнивать, а выгружать картинки- битмапки в память и сравнивать наподобии сеткой через 10 пикселей по вертикали и 10 по горизонтали например, что увеличило бы скорость сравнения соответственно в 100 раз.
А тебе я незнаю что делать..
Хотя если шум - это только сдвиг то можно проехать в цикле картику например по середине слева на право и сверху вниз только по одной линии-полосе и если сдвиг даже на 50% был то 50% все равно абсолютно совпадут. Картинку можно считать идентичной со сравниваемой тогда. Иначе у тебя вряд ли совпадет и 10% пикселей думаю.
NIKOLAYY2 вне форума Ответить с цитированием
Старый 07.01.2015, 22:22   #10
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

Да вполне разумно. Нужно лишь узнать на сколько возможны отклонения и насколько загрузит процессор множественное сравнение.
Illusiony вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Слияние в MS Word - проблема с путем CrazyTactic Microsoft Office Word 6 20.03.2021 07:59
Продублировать путем перезаписи тинки-винки Общие вопросы C/C++ 1 11.05.2014 06:56
Падежи путем замены ie-pskov Microsoft Office Word 26 19.05.2011 10:00
Проблема с путем Cookie java_91 PHP 1 03.05.2011 14:55
Сохранение с путем из Edit amadi Общие вопросы Delphi 6 26.01.2011 18:56