Сравнение изображений ирисов с opencv

Мне нужна помощь в сравнении радужной оболочки.

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

Я подумал, что фильтр Габора будет полезен, поэтому я выбрал 12 различных значений параметров:

Mat kernel = Imgproc.getGaborKernel(new Size(25, 25), sigma, theta, lambda, gamma, psi, CvType.CV_64F);
Scalar sum = Core.sumElems(kernel); //kerner normalization
Core.divide(kernel, sum, kernel);   
Imgproc.filter2D(floatSource, dest, CvType.CV_64F, kernel);

Затем я вычисляю 12 расстояний Хэмминга, используя эту функцию:

dist_ham = Core.norm(it1.next(), it2.next(), Core.NORM_HAMMING);

И получить среднее.

И... не работает. Расстояние Хэмминга аналогично, когда я сравниваю 2 разных изображения одной и той же радужной оболочки или 2 разных радужных оболочек. Как я могу улучшить свой алгоритм? Может быть, мне следует использовать некоторые реализованные в openCV материалы для получения хороших результатов? Для меня не имеет значения, какой алгоритм я буду использовать, я просто хочу иметь хорошие результаты. А я начинающий.

Некоторые примеры изображений: Первый человек img1: введите здесь описание изображенияНормализованная радужная оболочка для первого человека img1: введите здесь описание изображения

Первый человек img2: введите здесь описание изображенияНормализованная радужная оболочка для первого человека img2: введите здесь описание изображения

Расстояние Хэмминга для этого примера составляет около 29000 (и это самое низкое расстояние, которое я получил, в большинстве случаев я получил около 30000-31000 для радужной оболочки одного и того же человека) Расстояние Хэмминга для разных людей составляет около 31000 (зависит от тестируемого изображения)


person Araneo    schedule 21.11.2014    source источник
comment
Я думаю, что этот вопрос довольно обширен, и существует более 1 подхода и решения! Но перед этим нам нужно больше входных данных. Первый На каком этапе вы сейчас находитесь? какие шаги предварительной обработки вы делаете перед сравнением? какую технику распаковки вы используете?   -  person Balaji R    schedule 21.11.2014
comment
Вы нормализовали размер зрачка? Будет ли работать сопоставление блоков, если обе радужки имеют одинаковую ориентацию? У вас есть образцы изображений?   -  person Micka    schedule 21.11.2014
comment
@BalajiR, как я уже сказал, я предварительно обрабатываю изображения глаз и получаю изображения радужной оболочки в декартовой системе. Например. изображение: ссылка Этот регион я получаю преобразованием круга Хафа.   -  person Araneo    schedule 21.11.2014
comment
@Micka Я редактирую свой пост и привожу пример   -  person Araneo    schedule 21.11.2014
comment
В ваших нормализованных радужках вы можете видеть, что яркость или контрастность радужной части различаются (в то время как размер/положение выглядит хорошо), а размер частей, не связанных с радужкой (ресницы и над ними и нижняя темная часть), сильно различается. Попробуйте обнаружить + исключить части без диафрагмы. Может быть, вы можете попробовать какой-нибудь дескриптор вашего изображения радужной оболочки: HOG/SIFT/BRISK и т. д.   -  person Micka    schedule 22.11.2014
comment
@Micka, какой сопоставитель из openCV вы рекомендуете решить мою проблему? Если любой из них будет хорошо?   -  person Araneo    schedule 08.12.2014
comment
почему бы просто не протестировать каждый и выбрать лучший? Я никогда не сопоставлял ни одну радужную оболочку ;) если вы опубликуете много более нормализованных изображений радужной оболочки, я (или кто-то другой) мог бы получить интуитивное представление о свойствах, которым должна соответствовать задача сопоставления. Вы искали научные статьи по проблеме?   -  person Micka    schedule 08.12.2014
comment
Конечно, я сделал. Наиболее распространенным методом является использование фильтров Габора и расстояния Хэмминга с вырезанием области ресниц, что я и пытался сделать. К сожалению, я не нашел решений или хотя бы предложений по использованию сопоставителей openCV в таких задачах, как моя (очень похожие, маленькие картинки). Фото выкладываю позже, после работы. Спасибо за ваш ответ.   -  person Araneo    schedule 09.12.2014
comment
Как вы сделали часть нормализации? я борюсь с этим   -  person Etun    schedule 29.04.2015
comment
Это похоже на преобразование между полярными и прямоугольными координатами.   -  person Araneo    schedule 06.05.2015
comment
@Araneo, я изо всех сил борюсь с обнаружением радужной оболочки (Хаф), не могли бы вы поделиться своим кодом?   -  person dasAnderl ausMinga    schedule 10.02.2016


Ответы (1)


Мне удалось это сделать, просто реализовав алгоритм/математику в статье Даугмана и т. д. Мое предложение состоит в том, чтобы фактически визуализировать ядра габора, чтобы найти осмысленную комбинацию параметров, таких как сигма и лямбда. Я не использовал OpenCV GetGaborKernel, а использовал созданный вручную.

person hiroki    schedule 19.12.2016