У меня есть два растровых изображения в коде (.NET). Я хотел бы поискать небольшой рисунок (иглу) на большом изображении (стог сена). Как это может быть сделано?Сопоставьте шаблон/иглу (желательно растровое изображение) в растровом растрове сена?
ответ
Это зависит от того, выполняется ли вы «точное» совпадение с побитовыми шаблонами или приблизительное (нечеткое) совпадение изображений. Если вы делаете точное совпадение, просто обрабатывайте растровые изображения как общий поиск массива 2D-данных.
Наименьшая, но очень простая реализация для точного соответствия может быть выполнена в N * M, где N - количество пикселей в стоге сена, а M - количество пикселей в игле.
С учетом размера Haystack (S, T) и размера бит иглы (U, V) вы можете перебирать стог с X = [0, S-U) & Y = [0, T-V). Для каждого местоположения вы можете посмотреть на 2D-под-массив того же размера, что и Needle [{X, Y}, {X + U, Y + V}) и сравнить его с иглой [{0,0}, { U, V}).
Вы можете сделать это через Image Registration, хотя я не знаю (хорошей) библиотеки .NET, пригодной для использования непосредственно для этого.
Если вы хотите использовать C++, у Insight Toolkit есть много инструментов, которые помогут вам сделать это, в том числе возможность для вашего «стога сена» точно не соответствовать «иглам» (то есть: «нечеткий» поиск/сопоставление).
Я никоим образом не специалист по обработке изображений. Просто поиграть с идеей из головы здесь :)
Скажите, что вы смотрите на линию пикселей в вашей иголке. Эта строка может служить основой для вычисления контрольной суммы для данной строки, поэтому давайте назовем ее отпечатком пальца. Теперь вы можете искать все горизонтальные линии в стоге сена для подмножеств одинаковой длины с той же контрольной суммой. Когда вы найдете своих горизонтальных кандидатов, вы можете проверить их для вертикального соответствия.
Проблема с этим алгоритмом, очевидно, является его скоростью. Это O (Страшно) в случаях, когда у вас будет много совпадений на вашем горизонтальном отпечатке пальца (например, если вы выбрали верхнюю строчку, все будут черные). Шаблон, который много показан в стоге сена), поэтому так или иначе вам нужно выбрать отпечаток пальца с приятным, отличным поведением.
Я уверен, что есть много лучших способов сделать это, но я думал, что я хотел бы поделиться своими мыслями :)
Удачи
Вы можете посмотреть на «edge detection» родовое за то, что вы пытаетесь сделать.
Эти две ссылки выглядят полезными, но дело больше с регистрацией цвета, чем обработка изображений:
суть того, что вы хотите сделать, это:
- Отрежьте изображение «Найти» до минимального размера
- Переверните «найти» изображение и убедитесь, что края являются чистыми (имеют высокие градиенты) как можно
- Сканирование «целевое» изображения и обнаружить все ребра
- Подразделите «мишень» изображение в разделы " найдите «размер (плюс некоторая ошибка)) и возьмите только регионы, где есть большое количество ребер.
- Передняя часть в« целевом »XOR« найти »изображение в разделе (при необходимости увеличивая) и посмотреть, порог ниже вашего обнаруженного порога
Итак, основы вы зажимаете свое изображение «найти», в vert it (для XOR позже), найдите все ребра в целевом изображении, затем примените карту XOR к этим регионам и найдите самый высокий процент соответствия.
В качестве альтернативы, если изображения достаточно малы, вы можете «скользить» применять ту же технику, инвертировать изображение поиска и перемещать его по «целевому» изображению в поисках соответствия.
Основная проблема с этими методами заключается в том, что составляет «соответствие», обычно это не 100-процентное совпадение, и у вас должен быть код, с которым приходится иметь дело, когда это произойдет.
Если вам нужно это сделать, я рекомендую найти библиотеку, которая уже делает это, например, что предложил Рид. Если вы хотите опрокинуть свои собственные, потратьте некоторое время на Википедию и Codeproject, которые смотрят на библиотеки обработки изображений.
- 1. Как успешно нарисовать растровое изображение на другом растровом изображении?
- 2. Android: как просто нарисовать растровое изображение на другом растровом
- 3. Загрузить изображение с Picasso в растровое изображение
- 4. Растровое изображение - неправильные координаты
- 5. Android - Нарисуйте растровое изображение
- 6. Как добавить цвет текста в растровое изображение?
- 7. Canvas в растровое изображение в андроида
- 8. Как мне добавить изображение в растровое изображение в Android Studio?
- 9. Я хочу сохранить растровое изображение в галерее
- 10. Android растровое или растровое изображение?
- 11. Преобразовать растровое изображение в изображение
- 12. Как преобразовать smartimageview в растровое изображение?
- 13. Конвертировать растровое изображение в jpeg android
- 14. Как получить растровое изображение экрана Android?
- 15. Как визуализировать растровое изображение в Факторе?
- 16. Android - Конвертировать холст в растровое изображение
- 17. рисование изображения в более крупное растровое изображение
- 18. конвертировать растровое изображение в 1 бит растровое изображение
- 19. Как преобразовать коврик в растровое изображение и растровое изображение?
- 20. Как правильно преобразовать управляемое растровое изображение в неуправляемое растровое изображение?
- 21. Скопировать растровое изображение в другое растровое изображение с WPF
- 22. рисовать раздутый макет xml на растровое изображение
- 23. PNG ImageData в растровом изображение в андроиде
- 24. Преобразование FrameLayout как растровое изображение
- 25. Сохранение холста в растровое изображение на Android
- 26. Загрузка ресурса в изменяемом растровое изображение
- 27. Показать растровое изображение любого размера в Android
- 28. downsample растровое изображение пикселей actionscript 3?
- 29. Как нарисовать растровое изображение с помощью Scala?
- 30. Извлечь растровое изображение (или bitmapdata) из формы
Я хочу сделать нечеткое совпадение ... Я считаю, что это доступно в рамках AForge, который я использую? – Ropstah
Я действительно понятия не имею, куда перейти от двух растровых изображений на нечеткой логике :) – Ropstah
Ну, с нечетким совпадением, хотите ли вы масштабировать/вращать/допускать перекос? – Adisak