Как реализовать Hough Circle в Java

я хочу найти круглый объект (радужная оболочка глаза, я использовал Haar Cascase с алгоритмом альта Джонса). поэтому я обнаружил, что круг будет правильным способом сделать это. кто-нибудь может объяснить мне, как реализовать круг Хафа на Java или любую другую простую реализацию, чтобы найти радужную оболочку с помощью Java.

Спасибо,


person Keshan    schedule 29.01.2012    source источник


Ответы (3)


Если вы хотите найти ирис, вы должны быть прямолинейны в этом вопросе. Та часть радужной оболочки, которая вам нужна, на самом деле называется лимбом. Также обратите внимание, что контрастность лимба намного ниже, чем у зрачка, поэтому, если разрешение изображения позволяет, зрачок является лучшей целью. Java не является хорошим вариантом в качестве языка программирования, поскольку 1. Он медленный, а обработка интенсивная; 2. Поскольку классический круг Хафа требует 3D-аккумулятора, а Java, вероятно, означает использование мобильного телефона, требования к памяти будут жесткими.

Что вы можете сделать, так это использовать тот факт, что на изображении, вероятно, есть один (или только несколько) лимбов. Первое, что нужно сделать, это уменьшить размерность задачи с 3 до 2, используя ориентированные ребра: выделить горизонтальные и вертикальные ребра, которые вместе представляют ориентацию ребер (их можно рассматривать как горизонтальные и вертикальные компоненты вектора ребер). Простая идея состоит в том, что доминирующее пересечение краевых векторов находится в центре вашего лимба. Чтобы найти пересечение, вам нужны только два ориентированных ребра вместо трех точек, определяющих окружность. Отсюда уменьшение размерности с 3 до 2.

Вам также не нужно использовать классическое преобразование окружности Хафа с огромным аккумулятором и многочисленными вычислениями, чтобы найти это пересечение. Рандомизированный Hough будет намного быстрее. Вот как это работает (~ к RANSAC): вы выбираете минимальное количество ориентированных ребер случайным образом (в вашем случае 2), находите пересечение, затем находите все ребра, которые пересекаются примерно в одном и том же месте. Это вкладыши. Вы просто повторяете 10-30 раз, выбирая другую случайную выборку из 2 ребер, чтобы установить набор с максимальным количеством вставок. Будем надеяться, что эти вкладыши лежат на лимбе. Медиана пересечений внутренних лучей даст вам центр круга, а срединное расстояние до внутренних лучей от центра - это радиус.

На рисунке ниже яркие цвета соответствуют вставкам, а ориентация показана небольшим отрезком линии. Набор исходных ребер показан посередине (только по горизонтали). В то время как исходные ребра лежат вдоль эллипса, ребра Хафа были преобразованы с помощью аффинного преобразования, чтобы сделать ребра, принадлежащие лимбу, лежащими на окружности. Также обратите внимание, что ориентация краев довольно шумная.

введите здесь описание изображения

person Vlad    schedule 21.02.2015

Duda and Hart (1971) дает довольно четкое объяснение преобразования Хафа и работает пример. Нетрудно создать реализацию непосредственно из этого документа, так что это хорошее место для начала.

person snim2    schedule 29.01.2012

ImageJ предоставляет плагин Hough Circle. Я играл с ним несколько раз в прошлом. Вы можете взглянуть на исходный код, если хотите или вам нужно его изменить.

person Locked    schedule 17.10.2012