Разглеждали ли сте пробата descriptor_extractor_matcher.cpp на OpenCV ? Тази проба използва RANSAC за откриване на хомографията между двете входни изображения. Предполагам, че когато казвате обвиване, всъщност имате предвид изкривяване? Ако искате да изкривите изображението с хомографската матрица, която откриете, погледнете warpP перспектива функция. И накрая, ето няколко добри урока, използващи различните детектори на функции в 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