Обнаружение и измерение размеров фигур (кругов) на изображении на Android

Требование состоит в том, чтобы создать приложение для Android, работающее на одном конкретном мобильном устройстве, которое записывает видео расширения зрачка человеческого глаза в ответ на яркий свет (который физически подключен к мобильному устройству). Затем видео обрабатывается кадр за кадром на устройстве для обнаружения и измерения диаметра зрачка И радужной оболочки в каждом кадре. Обратите внимание, что обработку изображений НЕ нужно выполнять в режиме реального времени. Конечным результатом будет набор данных, описывающий изменения размера зрачка (и радужной оболочки) с течением времени. Ожидается, что размер радужной оболочки можно использовать для повышения достоверности данных о диаметре зрачка (например, удаление крайне неверных данных о размере зрачка), а также в качестве относительной меры того, насколько расширен глаз в любой точке.

Я знаком с разработкой мобильных приложений для Android, но мой опыт обработки изображений очень ограничен. Я исследовал решения, и кажется, что ответ может заключаться в библиотеках OpenCV/JavaCv, которые должны обеспечивать обнаружение формы (например, http://opencvlover.blogspot.co.uk/2012/07/hough-Circle-in-javacv.html), но может ли кто-нибудь дать рекомендации по этим конкретным вопросам:

Правильно ли я думаю, что он может обнаружить две формы круга в растровом изображении, один внутри другого? т.е. фигуры внутри друг друга не проблема.

Правда ли, что JavaCv может обнаруживать круг и возвращать позицию и радиус/диаметр? т.е. он не возвращает набор вершин, которые затем требуют дальнейшей обработки для сравнения с кругом? Кажется, у него есть метод HoughCircle, так что я думаю, что да.

Какая обработка каждого кадра обычно используется перед определением формы? Например, алгоритм для улучшения краев, сглаживания или удаления цвета?

Могу ли я использовать его, чтобы не только обнаружить наличие, но и измерить диаметр обнаруженных кругов? (в пикселях, но затем могут быть легко преобразованы в реальные измерения, поскольку используется известное оборудование). Думаю, да, но было бы здорово услышать подтверждение от более знакомых.

Этот проект является некоммерческим благотворительным проектом, поэтому любая помощь особенно ценна.

Пример кадра видео


person Ollie C    schedule 21.03.2016    source источник
comment
Да, вы можете сделать это с OpenCV. 1) Я настоятельно рекомендую использовать официальные оболочки OpenCV для Java вместо JavaCV. Или еще лучше код на C++. 2) HoughCircles может быть правильным подходом, но позаботьтесь о том, чтобы он не мог найти концентрические круги. Вам нужно позаботиться об этом самостоятельно (много примеров на SO, например здесь).   -  person Miki    schedule 21.03.2016
comment
3) Результатом HoughCircles будет набор кругов, каждый из которых определяется 3 параметрами (x, y, радиус) 4) Для предварительной обработки нет волшебного правила... Пожалуйста, опубликуйте несколько изображений (без стрелок), чтобы получить лучшая идея.   -  person Miki    schedule 21.03.2016


Ответы (1)


Я бы действительно предложил использовать ndk, так как он немного богаче по функциям. Кроме того, он позволяет вам запускать и тестировать свои алгоритмы на ноутбуке с изображениями, прежде чем отправлять их на устройство, что ускоряет разработку.

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

Для определения радужной оболочки / зрачка houghcircles не очень хороший метод, методы обнаружения признаков, такие как MSER, лучше работают для не очень четко определенных кругов. Вот еще один ответ, который я написал по той же теме, в котором есть код, который может помочь.

Если вы хотите измерить регионы, я бы посоветовал пройти через эту блог. В нем есть четкое объяснение шагов, необходимых для достаточно точного измерения.

person Vasanth    schedule 21.03.2016