Перейти к содержимому
Compvision.ru
Paft

FeatureDetector+DescriptorExtractor - процент схожести?

Recommended Posts

Здравствуйте!

Пользуюсь FeatureDetector, DescriptorExtractor для определения особенностей изображений.

Сопоставляю особенности при помощи BruteForceMatcher, но не могу определить адекватность полученных результатов - требуется выражение схожести в форме процента.

Пример программы:

Mat image1 = imread("C:\\1.png", 1);       

Mat image2 = imread("C:\\2.png", 1);   


vector<KeyPoint> keypoints1;

vector<KeyPoint> keypoints2;


FastFeatureDetector detector(10);

detector.detect(image1, keypoints1);

detector.detect(image2, keypoints2);


cv::Mat descriptors1;

cv::Mat descriptors2;


BriefDescriptorExtractor descriptorExtractor; 

descriptorExtractor.compute(image1, keypoints1, descriptors1);

descriptorExtractor.compute(image2, keypoints2, descriptors2);


BruteForceMatcher<HammingLUT> matcher;

std::vector<cv::DMatch> matches;

matcher.match(descriptors1, descriptors2, matches);

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ну вы определите критерий схожести.

ваш код просто находит пары точек.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Можно применить преобразование гомографии, и сравнить картинки корреляцией.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Простите за непонятливость, но не могли бы вы простенький примерчик дать? Я примерно представляю как рассчитать гомографию, но что такое корелляция ума не приложу :-) И нужны ли будут данные картинок для сравнения? Необходимо, чтобы картинки в сравнении не участвовали, только описательные данные (по аналогии сравнения по хэшу - т.е. я полагал, что можно будет заранее рассчитать дескрипторы BRIEF и хранить их в базе для последующего сравнения).

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

примерно то же что и Template Matching

посмотреть можно здесь:

http://dasl.mem.drexel.edu/~noahKuntz/openCVTut6.html

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Идею понял, но проблема как раз в том, что для сравнения понадобятся оба изображения, а этого необходимо избежать из соображений производительности.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

какую задачу вы пытаетесь решить?

если кружка одна и та же на нескольких снимках, то кол-во хороших пар точек и будет критерием схожести.

можно добавить доп критерий, чтобы отношения между точками были те же самые (расстояния между точками одни и те же или учитывая еще афинные преобразования будет более сложный)

если кружки разные, а имеют только лишь похожу форму,т.е. надо определить класс объектов, то почитать публикации отсюда http://pascallin.ecs.soton.ac.uk/challenges/VOC/

вообще как то люди делают CBIR системы и на дескрипторах особых точек, но мой опыт опыт использования из opencv показывает, что эти детекторы ищут только тот же самый предмет ,возможно я делаю что то не так.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Объект один и тот же везде (но может быть под разным углом/сжат/растянут). Но как выделить именно хорошие точки из найденного массива? Если бы это получилось более-менее адекватно сделать, то можно было бы и выразить в виде процента отношение числа "хороших" точен к общему числу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

можно дополнительно учитывать расстояние между точками в каждом наборе точек(но это становится сложно, если есть афинные искажения), можно дополнительно отсеивать ouliner'ы и оставлять inliner'ы с помощью ransac.

еще про классы.

вот еще на всякий случай статья там вместо дескрипторов используются маленькие патчи.

http://habrahabr.ru/blogs/image_processing/129685/

+расширенная лекция на английском

там есть и про дескрипторы с особыми точками

http://summerschool2011.graphicon.ru/files/lectures/mscvs2011_lepetit.pdf

и еще тут в оcновном про cbir, но есть еще и про сопоставление точек кое чего.

http://courses.graphicon.ru/files/courses/vision/2011/lectures/cv2011_10_cbir.pdf

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×