平面物體檢測的主要演算法流程

2021-07-03 06:37:09 字數 1869 閱讀 8014

主要用於使用 features2d 和 calib3d 模組來檢測場景中的已知平面物體。

步驟:1、讀入兩幅影象;

mat img1 = imread(argv[1], cv_load_image_grayscale);

mat img2 = imread(argv[2], cv_load_image_grayscale);

2、檢測兩幅影象的關鍵點(尺度旋轉都不發生變化的關鍵點);

// 對第一幅影象進行關鍵點檢測

fastfeaturedetector detector(15);

vectorkeypoints1;

detector.detect(img1, keypoints1);

... // 對第二幅影象進行關鍵點檢測

3、計算每個關鍵點的描述向量(descriptor);

// 計算描述向量

surfdescriptorextractor extractor;

mat descriptors1;

extractor.compute(img1, keypoints1, descriptors1);

... // 計算第二幅影象中的關鍵點對應的描述向量

4、計算兩幅影象中的關鍵點對應的描述向量距離,尋找兩影象中距離最近的描述向量對應的關鍵點,即為兩影象中匹配上的關鍵點;

// 關鍵點描述向量匹配

bruteforcematcher> matcher;

vectormatches;

matcher.match(descriptors1, descriptors2, matches);

5、視覺化結果;

// 繪製出結果

namedwindow("matches", 1);

mat img_matches;

drawmatches(img1, keypoints1, img2, keypoints2, matches, img_matches);

imshow("matches", img_matches);

waitkey(0);

6、尋找兩個點集合中的單對映變換(homography transformation);

vectorpoints1, points2;

// 用點填充形成矩陣(array)

....

mat h = findhomography(mat(points1), mat(points2), cv_ransac, ransacreprojthreshold);

7、建立內匹配點集合同時繪製出匹配上的點。用perspectivetransform函式來通過單對映來對映點;

mat points1projected;
perspectivetransform(mat(points1), points1projected, h);

8、用 drawmatches 來繪製內匹配點;

drawmatches( img_object, keypoints_object, img_scene, keypoints_scene,good_matches, img_matches, scalar::all(-1), scalar::all(-1),vector(), drawmatchesflags::not_draw_single_points );

平面物體檢測

這個教程的目標是學習如何使用 features2d 和 calib3d 模組來檢測場景中的已知平面物體。測試資料 資料影象檔案,比如 box.png 或者 box in scene.png 等。建立新的控制台 console 專案。讀入兩個輸入影象。mat img1 imread argv 1 cv...

物體檢測中的mAP含義

1.對於某個類別 c c 在某一張上,首先計算 c role presentation style position relative c c在一張上的pr ecis ion pre cisi on precis ion 在一張圖 片上類別 c識別正 確的個數 也就是 iou 0.5 一 張 上 類...

基於特徵點的物體檢測

本教程是一種用於基於在參考影象和目標影象之間找到點對應關係來檢測特定物件的演算法。儘管尺度變化或平面內旋轉,它仍可以檢測物體。它對於少量的平面外旋轉和遮擋也很穩健。這種物件檢測方法最適用於呈現非重複紋理圖案的物件,這會產生獨特的特徵匹配。對於均勻著色的物件或包含重複圖案的物件,此技術不太適用。請注意...