Harris角點檢測 sift描述匹配

2021-08-27 08:00:46 字數 1745 閱讀 1876

最近用到: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角點 可將影象分為三個...