ProgRoman 9 Жалоба Опубликовано January 24, 2012 Добрый день у меня вопрос правильно ли я понял само расстояние как оно считается Пусть есть два изображения X и Y вытягиваем эти два изображения в вектор длина которого пусть N H(X,Y)- это расстояние Хаусдорфа, H(X,Y)=max(h1,h2) h1=maximinj|xi-yj| h2=maxjmini|xi-yj| то есть само расстояние разница берётся по пикселям изображений ниже приведён код double calcHausdorff(const Mat &v1,const Mat &v2) { double res=0,h1=-100000,h2=-100000; int n=v1.size().area(); //calc h1 for(int i=0; i<n; i++) { double xi = v1.at<double>(i); double dmj=100000; for(int j=0; j<n; j++) { double yj = v2.at<double>(j); dmj=MIN(dmj,abs(xi-yj)) } h1=MAX(h1,dmj); } //calc h2 for(int j=0; j<n; j++) { double yj = v2.at<double>(j); double dmj=100000; for(int i=0; i<n; i++) { double xi = v1.at<double>(i); dmj=MIN(dmj,abs(xi-yj)) } h2=MAX(h2,dmj); } res=MAX(h1,h2); return res; } похоже ли на правду ну что я реализовал или где-то ошибаюсь?... Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано January 24, 2012 Что то у Вас как то просто слишком Хотя по смыслу похоже. Вот тут как то сложнее: http://www.cs.cornell.edu/~dph/papers/HKR-TPAMI-93.pdf Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Pavia00 32 Жалоба Опубликовано January 24, 2012 Всё правильно. Smorodov Метрика простая, а вот в способ применения надо вникать. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано January 24, 2012 Ну да, контекст применения метода часто намного сложнее самого метода. ЗЫ: Чтобы не писать в таком духе: double res=0,h1=-100000,h2=-100000; в заголовочнике float.h определены удобные константы: #define DBL_DIG 15 /* # of decimal digits of precision */ #define DBL_EPSILON 2.2204460492503131e-016 /* smallest such that 1.0+DBL_EPSILON != 1.0 */ #define DBL_MANT_DIG 53 /* # of bits in mantissa */ #define DBL_MAX 1.7976931348623158e+308 /* max value */ #define DBL_MAX_10_EXP 308 /* max decimal exponent */ #define DBL_MAX_EXP 1024 /* max binary exponent */ #define DBL_MIN 2.2250738585072014e-308 /* min positive value */ #define DBL_MIN_10_EXP (-307) /* min decimal exponent */ #define DBL_MIN_EXP (-1021) /* min binary exponent */ #define _DBL_RADIX 2 /* exponent radix */ #define _DBL_ROUNDS 1 /* addition rounding: near */ #define FLT_DIG 6 /* # of decimal digits of precision */ #define FLT_EPSILON 1.192092896e-07F /* smallest such that 1.0+FLT_EPSILON != 1.0 */ #define FLT_GUARD 0 #define FLT_MANT_DIG 24 /* # of bits in mantissa */ #define FLT_MAX 3.402823466e+38F /* max value */ #define FLT_MAX_10_EXP 38 /* max decimal exponent */ #define FLT_MAX_EXP 128 /* max binary exponent */ #define FLT_MIN 1.175494351e-38F /* min positive value */ #define FLT_MIN_10_EXP (-37) /* min decimal exponent */ #define FLT_MIN_EXP (-125) /* min binary exponent */ #define FLT_NORMALIZE 0 #define FLT_RADIX 2 /* exponent radix */ #define FLT_ROUNDS 1 /* addition rounding: near */ [/code] Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nuzhny 243 Жалоба Опубликовано January 24, 2012 ЗЫ: Чтобы не писать в таком духе: double res=0,h1=-100000,h2=-100000; в заголовочнике float.h определены удобные константы: ... А для С++-эстетов есть std::numeric_limits<> Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
DoctorZelen 0 Жалоба Опубликовано January 25, 2012 У меня один вопрос: что за расстояние Хаусдорфа и как его применить к изображению ? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ProgRoman 9 Жалоба Опубликовано January 25, 2012 ok, спасибо) я применяю её для сравнения двух изображений к примеру дорожных знаков, и что-то как то не особо успешно... на одном и том же изображении она даёт 0 в других случаях всё как-то не особо понятно... к примеру при сравнении этой мерой 3-х прикреплённых изображений первые два из одного класса а второе из другого такие результаты первое с третьим 0.0352941 первое со вторым 0.117647 на мой взгляд это странно я думал для более похожих изображений расстояние будет меньше чем для более отличающихся изображений Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
DoctorZelen 0 Жалоба Опубликовано January 25, 2012 на мой взгляд это странно я думал для более похожих изображений расстояние будет меньше чем для более отличающихся изображений может стоить переводить картинки в градацию серого, убирая таким образом все цвета, вы ж сравниваете картинки попиксельно. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано January 25, 2012 А я думаю все верно, попробуйте перевести в серый цвет или привести цветовые тона к одной палитре. Или пропустить изображение через фильтр поиска граней. Плюс к тому, неплохо-бы убрать фон. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ProgRoman 9 Жалоба Опубликовано January 25, 2012 эти результаты уже с приведением изображений в градации серого, при бинаризации почему-то у меня всегда 0 получается.... фон пока не пробовал вычитать..., но я как то думал, что она и так должна бы работать ну пусть хуже чем с контурами объектов, но всё равно должна бы давать какие-то разумные реультаты... а эти что-то не особо понятны... Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано January 25, 2012 такие результаты имхо из-за того что фон в одном случае белый, а в другом чёрный. и вообще просто сравнивать пиксели изображений или там гистограммы это как мне кажется очень не точный метод. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ProgRoman 9 Жалоба Опубликовано January 25, 2012 согласен, что такие методы не особо точны вот ещё по самому методу я при вычислении расстояния вычислял разность между пикселями каждый с каждым dmj=MIN(dmj,abs(xi-yj)) не стоит ли брать не только разность интенсивностей у пикселей, но и их расположение ну т.е. dmj=MIN(dmj,abs(xi-yj)+abs(i-j)) Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ProgRoman 9 Жалоба Опубликовано January 25, 2012 попробовал вроде бы результаты лучше... также картинки очистил от фона т.е. остались только знаки Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано January 25, 2012 Сравнение можно упростить размыв, или сильнее уменьшив изображение. И почему бы здесь просто по дескрипторам не сравнивать? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Pavia00 32 Жалоба Опубликовано January 25, 2012 Метрика работает правильно. А вот применение не правильное. Все эти три изображения для данной метрики будут похожи так как все они содержат одинаковые цвета. Суть этой метрики в том чтобы найти минимальное отличие и выбрать из них максимальное. Данная метрика будет хорошо работать если сравнивать не цвета, а к примеру найти границу посчитать расстояние границы до центра изображения и тогда уже сравнивать. 1 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано January 26, 2012 можно вырезать только круглые и квадратные области с изображений, привести к одному размеру. найти границы и для каждой точки границы посчитать shape context дескрипторы только еще с доп. информацией о цветах в пространстве HSV. потом для сравнения векторов дескрипторов уже применять какую либо метрику. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано January 26, 2012 вот еще что то продвинутое bag of features (c сорцами) http://www.cvc.uab.cat/~aldavert/plor/ Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ProgRoman 9 Жалоба Опубликовано February 1, 2012 Спасибо большое, сейчас разбираюсь с shape context и просматриваю SIFT Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано February 1, 2012 вообще говоря странно как SIFT используется для CBIR (но как бы публикации на эту тему есть и с результатами) например http://caim.uib.no/publications/Bakken_N30-2007.pdf http://www.ic.unicamp.br/~siome/papers/FSMA_SI_2009_2_Principal_2.pdf и т.д. google-> cbir+sift но на практике у меня например не находило участок вырезанный из изображения и немного отресайзеный.(ну тут конечно можно грешить на интерполяцию) или например тут недавно была тема с самолётами, там тоже если вырезать 1 самолет то найдет только его самого.( + с продуктами на полках+с одеждой). возможно там находятся много точек и может быть там используются какие то доп метрики. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах