Если вы хотите найти ирис, вы должны быть прямолинейны в этом вопросе. Та часть радужной оболочки, которая вам нужна, на самом деле называется лимбом. Также обратите внимание, что контрастность лимба намного ниже, чем у зрачка, поэтому, если разрешение изображения позволяет, зрачок является лучшей целью. Java не является хорошим вариантом в качестве языка программирования, поскольку 1. Он медленный, а обработка интенсивная; 2. Поскольку классический круг Хафа требует 3D-аккумулятора, а Java, вероятно, означает использование мобильного телефона, требования к памяти будут жесткими.
Что вы можете сделать, так это использовать тот факт, что на изображении, вероятно, есть один (или только несколько) лимбов. Первое, что нужно сделать, это уменьшить размерность задачи с 3 до 2, используя ориентированные ребра: выделить горизонтальные и вертикальные ребра, которые вместе представляют ориентацию ребер (их можно рассматривать как горизонтальные и вертикальные компоненты вектора ребер). Простая идея состоит в том, что доминирующее пересечение краевых векторов находится в центре вашего лимба. Чтобы найти пересечение, вам нужны только два ориентированных ребра вместо трех точек, определяющих окружность. Отсюда уменьшение размерности с 3 до 2.
Вам также не нужно использовать классическое преобразование окружности Хафа с огромным аккумулятором и многочисленными вычислениями, чтобы найти это пересечение. Рандомизированный Hough будет намного быстрее. Вот как это работает (~ к RANSAC): вы выбираете минимальное количество ориентированных ребер случайным образом (в вашем случае 2), находите пересечение, затем находите все ребра, которые пересекаются примерно в одном и том же месте. Это вкладыши. Вы просто повторяете 10-30 раз, выбирая другую случайную выборку из 2 ребер, чтобы установить набор с максимальным количеством вставок. Будем надеяться, что эти вкладыши лежат на лимбе. Медиана пересечений внутренних лучей даст вам центр круга, а срединное расстояние до внутренних лучей от центра - это радиус.
На рисунке ниже яркие цвета соответствуют вставкам, а ориентация показана небольшим отрезком линии. Набор исходных ребер показан посередине (только по горизонтали). В то время как исходные ребра лежат вдоль эллипса, ребра Хафа были преобразованы с помощью аффинного преобразования, чтобы сделать ребра, принадлежащие лимбу, лежащими на окружности. Также обратите внимание, что ориентация краев довольно шумная.
![введите здесь описание изображения](https://i.stack.imgur.com/WfmZY.png)
person
Vlad
schedule
21.02.2015