資源簡介
采用精確背景補(bǔ)償,實(shí)現(xiàn)動態(tài)背景下動態(tài)目標(biāo)檢測,通過KNN匹配、比率篩選、對稱約束三層篩選提取良好匹配點(diǎn)對,結(jié)合自適應(yīng)外點(diǎn)濾除算法,實(shí)現(xiàn)對復(fù)雜環(huán)境的精確補(bǔ)償。

代碼片段和文件信息
#include?
#include?
#include?
#include?“iostream“
#include?“func.h“
using?namespace?cv;
using?namespace?std;
using?namespace?xfeatures2d;
#define?pi?3.1415926
//使用說明
void?Func::attention()
{
printf(“[0]表示前一幀,[1]表示當(dāng)前幀\n\n“);
}
//讀視頻文件
void?Func::readVideo(String?&videoFile)
{
capture.open(videoFile);
//capture.open(0);
if?(!capture.isOpened())
{
cout?<“Could?not?initialize?capturing...\n“;
system(“pause“);
}
width?=?capture.get(CV_CAP_PROP_frame_WIDTH);
height?=?capture.get(CV_CAP_PROP_frame_HEIGHT);
}
//讀frame
void?Func::readframe()
{
capture.read(cur_frame); //讀當(dāng)前幀
cvtColor(cur_frame?cur_gray?COLOR_BGR2GRAY);
if?(prev_gray.empty())?{
cur_gray.copyTo(prev_gray); //更新前一幀
cur_frame.copyTo(prev_frame); //更新前一幀
}
}
//SURF特征檢測
void?Func::surfDetect()
{
Pts[0].clear();?Pts[1].clear();
desc[0].release();?desc[1].release();
surfDetector->detectAndCompute(prev_gray?Mat()?Pts[0]?desc[0]);
surfDetector->detectAndCompute(cur_gray?Mat()?Pts[1]?desc[1]);
//drawKeypoints(cur_frame?Pts[1]?cur_frame?Scalar(0?0?255));
//printf(“SURF檢測點(diǎn)數(shù):%d、%d?\n“?Pts[0].size()?Pts[1].size());
}
//KNN匹配
void?Func::BfMatch()
{
knnMatches[0].clear();
matcher.knnMatch(desc[0]?desc[1]?knnMatches[0]?2); //正向匹配
//BBF搜索算法
//BBFmatches.clear();
BBFpts[0].clear();?BBFpts[1].clear();
for?(size_t?i?=?0;?i? const?DMatch&?bestMatch?=?knnMatches[0][i][0]; //漢明距離最小
const?DMatch&?betterMatch?=?knnMatches[0][i][1]; //漢明距離次小
float??distanceRatio?=?bestMatch.distance?/?betterMatch.distance;
//利用漢明距離粗略過濾匹配點(diǎn)對
if?(distanceRatio? //BBFmatches.push_back(bestMatch);
BBFpts[0].push_back(Pts[0][bestMatch.queryIdx].pt);
BBFpts[1].push_back(Pts[1][bestMatch.trainIdx].pt);
}
}
//printf(“對稱約束前:BBFpts[0].size?=?%d?BBFpts[1].size?=?%d?\n“?BBFpts[0].size()?BBFpts[1].size());
knnMatches[1].clear();
matcher.knnMatch(desc[1]?desc[0]?knnMatches[1]?2); //反向匹配
BBFpts_rev[0].clear();
BBFpts_rev[1].clear();
for?(size_t?i?=?0;?i? const?DMatch&?bestMatch_rev?=?knnMatches[1][i][0]; //漢明距離最小
const?DMatch&?betterMatch_rev?=?knnMatches[1][i][1]; //漢明距離次小
float?distanceRatio?=?bestMatch_rev.distance?/?betterMatch_rev.distance;
//利用漢明距離粗略過濾匹配點(diǎn)對
if?(distanceRatio? //BBFmatches.push_back(bestMatch);
BBFpts_rev[0].push_back(Pts[0][bestMatch_rev.trainIdx].pt);
BBFpts_rev[1].push_back(Pts[1][bestMatch_rev.queryIdx].pt);
}
}
//printf(“對稱約束前:BBFpts_rev[0].size?=?%d?BBFpts_rev[1].size?=?%d?\n“?BBFpts_rev[0].size()?BBFpts_rev[1].size());
/*printf(“---------------------------------------------------------\n“);
for?(size_t?i?=?0;?i? {
printf(“(%d?%d)?(%d?%d)\n“?BBFpts[0][i].x?BBFpts[0][i].y?BBFpts[1][i].x?BBFpts[1][
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2019-04-19?19:05??基于SURF匹配的檢測算法改進(jìn)-3\
?????文件???????25188??2019-04-19?19:05??基于SURF匹配的檢測算法改進(jìn)-3\func.cpp
?????文件????????4987??2019-04-19?19:05??基于SURF匹配的檢測算法改進(jìn)-3\func.h
?????文件????????1704??2019-04-19?16:53??基于SURF匹配的檢測算法改進(jìn)-3\main.cpp
?????文件????????6073??2019-04-19?19:05??基于SURF匹配的檢測算法改進(jìn)-3\基于SURF匹配的檢測算法改進(jìn)-3.vcxproj
?????文件????????1154??2019-04-19?19:05??基于SURF匹配的檢測算法改進(jìn)-3\基于SURF匹配的檢測算法改進(jìn)-3.vcxproj.filters
?????文件?????????165??2019-04-19?16:51??基于SURF匹配的檢測算法改進(jìn)-3\基于SURF匹配的檢測算法改進(jìn)-3.vcxproj.user
評論
共有 條評論