最近用到:harris檢測影象中邊緣處的特徵點,並且需要兩張圖特徵點匹配起來。harris只是乙個角點檢測的演算法,最終只得到特徵點座標,想要匹配需要描述,而harris是單尺度的,自己寫描述函式又有些麻煩。找到matlab和opencv都有整合的函式:
matlab版本通過調節引數,效果還可以,存在一定的誤匹配。
clc,clear
%讀取、灰度化、顯示
i1=rgb2gray(i1); %把rgb影象變成灰度影象
%尋找特徵點
points1 = detectharrisfeatures(i1,'minquality',0.002); %讀取特徵點,'minquality',0.005
% points2 = detectsurffeatures(i2);
points2 = detectharrisfeatures(i2,'minquality',0.002);
figure
imshow(i1);
hold on;
plot(points1);
figure
imshow(i2);
hold on;
plot(points2);
%extract the features.計算描述向量
[f1, vpts1] = extractfeatures(i1, points1);
[f2, vpts2] = extractfeatures(i2, points2);
%進行匹配
indexpairs = matchfeatures(f1, f2,'method','nearestneighborsymmetric','matchthreshold',20) ;
%用'method','nearestneighborsymmetric',閾值調節用'matchthreshold',範圍0-100,表示選擇最強的匹配的百分比,越大匹配點越多
%用'method','nearestneighborratio',閾值調節'maxratio',0.7,範圍0-1,預設0.6,較大該值獲得較多匹配
matched_pts1 = vpts1(indexpairs(:, 1));
matched_pts2 = vpts2(indexpairs(:, 2));
resultpairs1 = matched_pts1.location; %儲存匹配點座標
resultpairs2 = matched_pts2.location;
%顯示匹配
figure('name','匹配後的影象');
showmatchedfeatures(i1,i2,matched_pts1,matched_pts2,'montage');
legend('matched points 1','matched points 2');
opencv版本誤匹配實在太多,沒找到具體原因,選擇的匹配方法是bruteforce。優點是opencv內部有harris的改進版本goodfeaturestotrack,可以進行shi-tomasi角點檢測,能夠設定角點數目,角點之間的最小距離,避免harris點過於密集重複。 Harris角點檢測
貼一下 計算機視覺課的作業 有時候 需要用下 function f detectcorner i,threshold,sigma harris corner detect by lifeiteng version1.0 灰度影象 2013 5 08 version1.1 彩色影象 2013 5 13...
HARRIS角點檢測
cvinvoke.cornerharris image.convert b,2 注意 角點檢測傳出的為float型別的資料 cvinvoke.normalize b,b,0,255,normtype.minmax,depthtype.cv32f 正常化輸入陣列,使得它的範數或值範圍取一定值 多個 d...
Harris角點檢測
1 什麼是harris角點 在影象中,可以認為角點是物體輪廓線的連線點,是影象中重要的特徵點。角點數目遠小於畫素點,通過檢測角點可較準確地識別物體並減少計算量。角點檢測在目標識別 目標跟蹤 影象匹配等方面具有重要作用。如下圖,紅色圓圈標註的點可看做角點。2 如何檢測harris角點 可將影象分為三個...