Я хочу обнаружить объекты на изображении и перерисовать его на другой странице, поэтому кто-нибудь может предложить, какой алгоритм можно использовать? - PullRequest
0 голосов
/ 08 февраля 2012

Я делаю проект на image processing (идентификация молекул на изображении и рисование этих молекул в редакторе). Поэтому вам нужна помощь в определении того, какой алгоритм можно использовать для обнаружения таких объектов, как линии, кривые, бифуркации и символы на изображении.

Да, алгоритм Канни обнаруживает края на изображении. Но чтобы нарисовать эти ребра в редакторе, мне нужны конечные точки (значения пикселей) этих ребер. Так как алгоритм Кэнни будет полезен для этого? или есть какие-нибудь алгоритмы для распознавания этих конечных точек линий?

Пример изображения следующим образом

enter image description here

Ответы [ 2 ]

3 голосов
/ 09 февраля 2012

Как уже заметил гкалметт, Hough может обнаружить строк . Тем не менее, вы ищете отрезки, что является небольшим препятствием для стандартного алгоритма.

Другим вариантом является алгоритм RANSAC, который стоит изучить, поскольку он следует совершенно другому подходу:

http://en.wikipedia.org/wiki/RANSAC

Техника Хафа также может быть использована для поиска кругов. Для подгонки кривых вы можете использовать методы подгонки сплайнов или иногда даже полиномиальные подгонки, хотя последние, как правило, менее полезны для анализа изображений в реальном мире.

Вы должны быть осторожны со скелетонизацией / прореживанием (или преобразованием медиальной оси), потому что прореживание будет приводить к нежелательным кривым вокруг 3-сторонних пересечений, таких как два Т-пересечения в символе "H". Тем не менее, алгоритмы разбавления могут быть быстрыми. Ознакомьтесь с реализациями алгоритмов прореживания Стентифорда и Чжан-Суена в WinTopo, приложении для преобразования растра в вектор (то есть пикселей в кривые):

http://wintopo.com/

В вашем образце изображения есть несколько примеров 2-сторонних и 3-сторонних пересечений с известным фиксированным углом. Если вы немного изучите обнаружение углов, вы должны увидеть, как расширить его до обнаружения пересечений для фиксированных углов.

http://en.wikipedia.org/wiki/Corner_detection

Если размер символов и цифр на изображениях постоянен - ​​например, если «H» всегда высотой 40 пикселей - тогда сопоставление с шаблоном можно использовать для поиска практически любого шаблона. (Ищите термин «нормализованная взаимная корреляция», хотя статья в Википедии может оказаться не такой уж полезной.)

http://en.wikipedia.org/wiki/Template_matching

Вкратце, если объекты на изображении будут иметь постоянный размер, вы можете создать шаблон (что-то вроде маски или трафарета), который соответствует светло-темному рисунку объекта, который будет идентифицирован. Сопоставление с шаблоном относительно легко реализовать и отладить, и оно немного более интуитивно понятно, чем Hough.

Говоря простым языком, представьте, что вы должны присвоить каждому черному пикселю значение 0 (отсутствие отражения), а каждому белому пикселю - значение 1 (полное отражение). Чтобы найти незаполненный черный квадрат размером 3 x 3, вы должны создать такой шаблон:

1 1 1 1 1
1 0 0 0 1
1 0 1 0 1
1 0 0 0 1
1 1 1 1 1

Затем вы проверяете этот шаблон на совпадения в исходном изображении. У вас есть совпадение, если все белые пиксели в шаблоне соответствуют белым пикселям на изображении, и все черные пиксели в шаблоне соответствуют черным пикселям на изображении.

Чтобы соответствовать маленькому шестиугольнику для вашего бензольного кольца (или что бы то ни было), у вас может быть такой шаблон:

1 1 0 1 1 
1 0 1 0 1 
0 1 1 1 0 
0 1 1 1 0 
0 1 1 1 0 
1 0 1 0 1 
1 1 0 1 1 

Это не совсем правильная форма, поскольку углы не будут 45 градусов.

В некоторых случаях вы не получите идеального соответствия для шаблона, потому что другие фигуры, такие как отрезки, круги и символы, входят в прямоугольник, описывающий любую особенность, которую вы хотите найти. Вместо идеального соответствия вам может потребоваться, чтобы 90% или более всех пикселей в шаблоне соответствовали. «Нормализованная» часть «нормализовать взаимную корреляцию» делает шаблон более устойчивым при изменении контраста: например, ваше изображение может быть темно-серыми цифрами на светло-сером фоне, а не черными фигурами на белом фоне.

После изучения различных комбинаций различных фигур вы можете идентифицировать определенные элементы в 2D-шаблоне как «все равно», то есть элемент может быть либо черным, либо белым. Поскольку у вас могут быть отрезки, представляющие связи в углах шестиугольника, у вас есть несколько хороших кандидатов на пиксели «пофиг».

Пиксели "пофиг", расположенные ниже, помечены знаком X. Определение того, какие элементы в шаблоне могут быть пикселями "пофиг", требует некоторого изменения и настройки.

X 1 0 1 X 
1 0 1 0 1 
0 1 1 1 0 
0 1 X 1 0 
0 1 1 1 0 
1 0 1 0 1 
X 1 0 1 X 

Конечно, есть более сложные способы поиска различных фигур, но я рекомендую сначала самые простые подходы, если они работают. Методы Hough и RANSAC можно обобщить, чтобы найти что угодно, но реализация может быть сложной.

1 голос
/ 09 февраля 2012

Вы можете использовать преобразование Хафа для обнаружения прямых линий или окружностей. Очень простая реализация этого алгоритма была реализована, например, в scikits-image librairy (python). См. пример .

Из изображения, которое вы привели в качестве примера, вы можете рассмотреть возможность применения алгоритма скелетонизации, чтобы уменьшить двоичные объекты до представлений шириной 1 пиксель перед применением преобразования Хафа.

...