Перейти к содержанию
    

Поиск фрагмента изображения

Здравствуйте!

 

Сразу оговорюсь, что ранее обработкой изображений никогда не занимался, поэтому опишу вопрос максимально подробно. Заранее прошу прощения за излишнюю многословность :)

 

Основная задача: найти фрагмент изображения на картинке. Фрагмент заранее известен, не меняется, и всегда присутствует на основной картинке. Он не вращается и не масштабируется. Время выполнения не сильно критично.

Для решения поставленной задачи пошел "в лоб": делаю свертку основного изображения и искомого ядра (а если точнее, то не свертку, я корреляцию, т.к. ядро перед вычислением не переворачиваю), причем не через БПФ, а "по определению" через сумму произведений. Ядро размером 50х50. Знаю, что быстрее было бы делать БПФ, но решил попробовать написать наиболее простой вариант.

Как делал. Ядро и картинку привожу в greyscale по байту на пиксел. 255 - максимальное значение. Делаю свертку искомого шаблона с ядром 3х3 (центр 8, остальные -1) для выделения контуров. Свертка делается обычными вложенными циклами с последющей проверкой на вылет в отрицательный диапазон. Все отрицательные цисла заменяю на 0. Далее ищу максимум по ВСЕМ пикселям результата и делаю нормировку каждого пикселя: val = val / max * 255;

Полученное ядро аналогичным образом "сворачиваю" с основной картинкой и опять нормирую до 255.

Результат.

В тех местах, где искомые шаблоны действительно присутствуют, я вижу "пики" с ярко выраженным центральным пикселем амплитуды порядка 200ед. Ближайшие к пику точки около 160ед. Все как учили.

Внимание, вопрос! Очень смущает, что если на исходной картинке присутствуют большие (больше ядра) области, залитые белым (ну или почти белым), то и после свертки с ядром эти области так и остаются белыми (ну ессно размытыми). Причем уровень белого максимальный!!!

Как же мне теперь искать ту самую точку "пика", которая "однозначно" должна говорить о вхождении шаблона в картинку в данной точке, если у меня есть целые области, залитые белым и при том не содержащие искомого шаблона???

Что я не так делаю??? Я думал, что после свертки вся картинка будет достаточно темная и светлые места будут ТОЛЬКО там, где картинка содержит шаблон

Может у меня где-то идеологическая ошибка? Или все правильно и свертка действительно "не ищет" в светлых областях темные шаблоны? Или все правильно и я должен искать именно "пики" а на области не обращать внимания??? И как быть с тем, что "высота" правильного "пика" получается меньше чем высота обманного "плато"?

test.bmp

kernel.bmp

kernel_edge.bmp

conv.bmp

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это от того что у Вас ноль смещён, попробуйте для начала только шаблон поиска сместить так, чтобы сумма всех его элементов была равна нулю.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это от того что у Вас ноль смещён, попробуйте для начала только шаблон поиска сместить так, чтобы сумма всех его элементов была равна нулю.

 

Спасибо огромное!!! После смещения на медиану все заработало как часы! Единственный пик на картинке, независимо от расцветки. Остальное почти черное.

:beer:

conv.bmp

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Нельзя ли пожалуйста посмотреть код?)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Нельзя ли пожалуйста посмотреть код?)

 

Можно. Смотрите...

FindRegion.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...