![]() |
|
![]() ![]() ![]() |
|
Pavia |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 6.12.2008 Репутация: 11 Всего: 12 |
deniska,
Можешь небольшую базу выложить? |
|||
|
||||
deniska |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 398 Регистрация: 1.7.2005 Где: Троицк Репутация: нет Всего: 0 |
Pavia,
пожалуйста. определение внешней границы радужки сделал по схожему алгоритму с внутренней (по производным интенсивности). но там свои проблемы: у кого-то почти вся граница открыта, у кого-то веки узкие, у кого-то ресницы длинные... в общем все это вносит ошибки. конечно будет возможность ручного наведения, но всеже хотелось бы чтоб их процент был очень низкий (5%). Присоединённый файл ( Кол-во скачиваний: 12 ) ![]() |
|||
|
||||
Pavia |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 6.12.2008 Репутация: 11 Всего: 12 |
deniska,
Немного расскажу почему так. 1)Чтобы не было проблем с разной резкостью надо про анализировать картинку и сделать её коррекцию или коррекцию параметра алгоритма. Думаю это можно решить пред обработкой путём выравниванием контрастности. Пред обработка это один из первичных пунктов распознавания образов. А вообще порог должен зависеть от магнитуды градиента, неужели и это не сделано в OpenCV. 2) По поводу внешней границы. В OpenCV, в алгоритме cvCanny не реализовано размытие по произвольному радиусу. Оно ограниченно 3 и 5 аппретурой. Это легко устранить сделав предварительное размытие. Рис. 1 и 2 3) Резкость проанализировать не сложно. Размываешь картинку потом вычитаешь из исходной и считаешь какую нибудь метрику типа сумма всех пикселей по модулю и делишь на размеры изображения. А вообще любой алгоритм распознавания требует обучения. Берешь часть базы. Варьируешь (изменяешь) параметры смотришь процент удачно распознанных. Тем самым выбираешь лучший результат. Есть и другие методы обучения, основанные на НС или МОВ. 4) Мусор можно отфильтровать применив преобразование Хафа для окружностей. Рис 1. ![]() Рис 2. ![]() |
|||
|
||||
deniska |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 398 Регистрация: 1.7.2005 Где: Троицк Репутация: нет Всего: 0 |
Pavia, а что скажете о способе, который я уже начал реализовывать? см. выше про радиальные производные. "костяк" его как бы уже сформирован, постоянно гоняю по базе (более 150 снимков), постоянно чего-то не нравится, дорабатываю напильником, только вот "напильник" (читай терпение) уже стирается)). про зрачок какбы уже можно забыть, он довольно сносно определяется и собственно основная проблема сейчас с внешним краем радужки, но этого и следовало ожидать. в моем варианте я беру радиальные производные интенсивности из центра зрачка. но брать все 360 градусов нельзя:
1.радужка не вмещается целиком в изображение 2.веки 3.ресницы так вот пункты 2 и 3 для каждого снимка естественно свои, и диапазон достаточный для одного снимка может оказаться избыточным (с захватом шумов из п2,3) для другого. ну допустим для 80% случаев подходит некий диапазон, а вот с остальными... если захватываются ресницы, да еще эта зараза так растет что прям недалеко от реального края радужки - получаем какое-то смещение, довольно часто значительное. то есть похорошему надо бы сначала както выбирать допустимый диапазон для радиальных производных. а по поводу различных алгоритмов выделения контуров (границ) я тоже много думал, прежде чем пойти по пути какого-либо из принципиальных способов. так вот избыточность этих контуров будет довольно частой, "отфильтровывать" нужное тоже совсем нетривиальная задача, ведь то, что явно видно и очевидно человеческому глазу, нужно еще объяснить компу)). например ваш рис 2: видите как "коварно" верхнее веко сливается с радужкой... или круги от подсветки - их запросто можно принять за границы зрачка, ну и таких, непреодолимых (для меня) "но", можно найти сколько угодно. конечно можно ответить просто: не можешь - не берись, слаб в математике - не лезь... но работа есть работа. так что жду советов, критики с уважением ко всем читающим |
|||
|
||||
Pavia |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 6.12.2008 Репутация: 11 Всего: 12 |
deniska,
Я бы также делал. Просто алгоритм Хафа требователен к ресурсам, поэтому либо радиальные. Либо алгоритм сегментации как-то попробовать. Сегодня мысль пришла 95% распознанных 5% не распознанных. Если все изображения разбить на классы и к каждому классу применить свои свой алгоритм распознавания. То для достижения 95% распознавания в худшем случае потребуется реализовать 19 классов алгоритмов. А вот чтобы такого не происходила алгоритм должен быть гибким. Должны быть параметры при которых в одном классе это работает отлично и в другом работает отлично но с другими значениями параметра . А параметры распознавания должны выбираться классификатором после анализа изображения. В качестве классификатора может выступать НС. |
|||
|
||||
mrgloom |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 8.6.2011 Репутация: нет Всего: нет |
думаю что надо определять как то внешнюю радужку (покажите что у вас получается)
а потом ее апроксимировать до элипса или круга. ![]() т.е. как выделено на картинке области которые примерно определяются(можете так же сделать бросанием луча градиента из центра темного зрачка который хорошо определяется), а остальные можно достроить. т.е. вы найдете скажем несколько дуг(контуров), и определите у них радиус , а потом из подходящих сапроксимируете элипс. для НС скорее всего надо несколько тысяч образцов. Это сообщение отредактировал(а) mrgloom - 14.9.2011, 10:00 |
|||
|
||||
deniska |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 398 Регистрация: 1.7.2005 Где: Троицк Репутация: нет Всего: 0 |
вот что на выходе моего алгоритма с радиальными.
синим пунктиром эллипс зрачка. центр секторов - центр эллипса зрачка. области секторов(части кольца)-области где ищем производные. красные точки - максимальные производные, по которым строится эллипс радужки (желтый) с пом. cvFitEllipse(). Присоединённый файл ( Кол-во скачиваний: 16 ) ![]() |
|||
|
||||
mrgloom |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 8.6.2011 Репутация: нет Всего: нет |
ну вот вроде бы все работает или это не автомате?
|
|||
|
||||
deniska |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 398 Регистрация: 1.7.2005 Где: Троицк Репутация: нет Всего: 0 |
это автомат, и в этом случае работает довольно сносно. ниже приведен случай отвратной работы. красная окружность с красным крестом - вручную найденый край. видно насколько расходятся и края и центры автомата и ручного режима (красный и желтый). желтая точка в центре - центр эллипса по автомату.
собственно сейчас прихожу к тому, что изза плохой освещенности края радужки, всегда будут ложные производные(см. последнюю фотографию, правй сектор, нижняя его часть). аппроксимация к эллипсу вредит ИМХО, тк слишком много у него степеней свободы. вот окружность бы постороить, но в opencv такой функции нет. вот сейчас гуглю по поиску окружности методом наименьших квадратов. Это сообщение отредактировал(а) deniska - 14.9.2011, 13:29 Присоединённый файл ( Кол-во скачиваний: 14 ) ![]() |
|||
|
||||
deniska |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 398 Регистрация: 1.7.2005 Где: Троицк Репутация: нет Всего: 0 |
докладываю последние новости с фронта: откопал в инете статью по определнию окружности из набора точек по методу наименьших квадратов. математик из меня не очень, но реализовал, и метод работает. в моем случае, хоть край радужки и является вообще говоря эллипсом, лучше при его определнии аппроксимировать до окружности. выходит точнее.
может кому реализация метода пригодится:
Это сообщение отредактировал(а) deniska - 15.9.2011, 10:50 |
|||
|
||||
mrgloom |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 8.6.2011 Репутация: нет Всего: нет |
||||
|
||||
deniska |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 398 Регистрация: 1.7.2005 Где: Троицк Репутация: нет Всего: 0 |
![]() ![]() |
|||
|
||||
Pavia |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 6.12.2008 Репутация: 11 Всего: 12 |
deniska, Это ода из разновидностей кластеризации. Основанная на объединение соседних пикселей - так же известный как алгоритм бактерий фагоцита.
Картинка достаточно однородная так что возможно сделана простая заливка с допуском. Или с допуском по градиенту. У картинке надпись - активные контура. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |