Вы смотрели пример OpenCV descriptor_extractor_matcher.cpp? ? В этом образце используется RANSAC для обнаружения гомографии между двумя входными изображениями. Я предполагаю, что когда вы говорите обертывание, вы на самом деле имеете в виду деформацию? Если вы хотите деформировать изображение с помощью обнаруженной вами матрицы гомографии, взгляните на warpPerspective а>функция. Наконец, здесь есть несколько хороших руководств по использованию различных детекторов функций в OpenCV.
РЕДАКТИРОВАНИЕ: у вас может не быть функций SURF, но у вас определенно есть точки функций с разными классами. Сопоставление на основе признаков обычно делится на две фазы: обнаружение признаков (которое вы уже сделали) и извлечение, необходимое для сопоставления. Итак, вы можете попробовать преобразовать свои функции в KeyPoint, а затем выполнение извлечения признаков и сопоставления. Вот небольшой фрагмент кода того, как вы можете это сделать:
typedef int RED_TYPE = 1;
typedef int GREEN_TYPE = 2;
typedef int BLUE_TYPE = 3;
typedef int PURPLE_TYPE = 4;
struct BenFeature
{
Point2f pt;
int classId;
};
vector<BenFeature> benFeatures;
// Detect the features as you normally would in addition setting the class ID
vector<KeyPoint> keypoints;
for(int i = 0; i < benFeatures.size(); i++)
{
BenFeature bf = benFeatures[i];
KeyPoint kp(bf.pt,
10.0, // feature neighborhood diameter (you'll probaby need to tune it)
-1.0, // (angle) -1 == not applicable
500.0, // feature response strength (set to the same unless you have a metric describing strength)
1, // octave level, (ditto as above)
bf.classId // RED, GREEN, BLUE, or PURPLE.
);
keypoints.push_back(kp);
}
// now proceed with extraction and matching...
Возможно, вам потребуется настроить силу отклика таким образом, чтобы она не превышала пороговое значение на этапе извлечения. Но, надеюсь, это иллюстрирует то, что вы можете попытаться сделать.
person
mevatron
schedule
09.12.2011