Если вы хотите найти радужную оболочку, вы должны быть прямо об этом.Часть радужной оболочки, которую вы ищете, на самом деле называется лимбом.Также обратите внимание, что контраст лимба намного ниже, чем у зрачка, поэтому, если позволяет разрешение изображения, зрачок является лучшей целью.Java не является хорошим вариантом в качестве языка программирования здесь, поскольку 1. Он медленный, а обработка интенсивная;2. Поскольку для классического круга Hough требуется 3D-аккумулятор, а Java, вероятно, означает использование мобильного телефона, требования к памяти будут жесткими.
То, что вы можете сделать, это использовать тот факт, что, вероятно, есть один (или только несколько) Конечности в изображении.Первое, что нужно сделать, это уменьшить размерность задачи с 3 до 2 с помощью ориентированных ребер: извлечь горизонтальные и вертикальные ребра, которые вместе представляют ориентацию ребер (их можно рассматривать как горизонтальные и вертикальные компоненты вектора ребер).Простая идея заключается в том, что доминантное пересечение краевых векторов является центром вашего лимба.Чтобы найти пересечение, вам нужны только два ориентированных ребра вместо трех точек, которые определяют окружность.Следовательно, уменьшение размерности с 3 до 2.
Вам также не нужно использовать классическое преобразование окружности Хафа с огромным аккумулятором и многочисленные вычисления, чтобы найти это пересечение.Рандомизированная Hough будет намного быстрее.Вот как это работает (~ для RANSAC): вы выбираете минимальное количество ориентированных ребер случайным образом (в вашем случае 2), находите пересечение, а затем находите все ребра, которые пересекаются примерно в одном и том же месте.Это вкладыши.Вы просто повторяете 10-30 раз, выбирая другую случайную выборку из 2 ребер, чтобы получить набор с максимальным числом вкладышей.Надеюсь, эти вкладыши лежат на лимбе.Медиана пересечений внутренних лучей даст вам центр круга, а медианное расстояние до внутренностей от центра - это радиус.
На рисунке ниже яркие цвета соответствуют внутренностям, а ориентация показана с небольшим отрезком линии.Набор оригинальных ребер показан посередине (только по горизонтали).В то время как исходные ребра лежат вдоль эллипса, ребра Хафа были преобразованы с помощью аффинного преобразования, чтобы те, кто принадлежит лимбу, лежали на окружности.Также обратите внимание, что ориентация краев довольно шумная.