日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

图像特征点检测与匹配评价准则——量化

發(fā)布時(shí)間:2023/11/27 生活经验 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 图像特征点检测与匹配评价准则——量化 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明出處,謝謝!

目前圖像匹配中,局部特征匹配占據(jù)了絕大部分,常用的局部特征匹配方法有Harris、SIFT、SURF、ORB等等,不同的特征點(diǎn)檢測和匹配方法尤其獨(dú)特的優(yōu)勢和不足;?
特征點(diǎn)匹配經(jīng)過Ransac算法優(yōu)化后仍存在錯(cuò)誤匹配點(diǎn)對(duì),需要優(yōu)化后的匹配結(jié)果進(jìn)行量化評(píng)價(jià);?
特征點(diǎn)檢測和匹配評(píng)價(jià)一般包括兩個(gè)部分,分別為檢測和匹配的評(píng)價(jià)。


1、特征點(diǎn)檢測評(píng)價(jià)

評(píng)價(jià)特征點(diǎn)檢測方法的優(yōu)劣常常用到repeatability(重復(fù)率)這個(gè)概念。?
《a performance evaluation of local descriptors》一文提出了特征點(diǎn)檢測器和匹配結(jié)果的評(píng)價(jià)準(zhǔn)則,我的理解是:圖A、B是兩幅待匹配圖像,圖A映射到圖B有一個(gè)單應(yīng)性矩陣H1,圖B映射到圖A有單應(yīng)性矩陣H2,圖A檢測出N1個(gè)特征點(diǎn),圖B檢測出N2個(gè)特征點(diǎn),因?yàn)閳D像A和B有部分圖像不重疊,故將A圖檢測的特征點(diǎn)坐標(biāo)由H1算出在B圖的坐標(biāo),去掉不合格(計(jì)算結(jié)果超出在B圖像坐標(biāo))的特征點(diǎn),剩下的特征點(diǎn)數(shù)記為n1;同樣,B圖的特征點(diǎn)經(jīng)過處理剩下n2個(gè);分母便是min(n1, n2)。將圖A剩下的特征點(diǎn)由H1計(jì)算出在圖B中的坐標(biāo),與圖B檢測出的特征點(diǎn)的坐標(biāo)求距離,即dist(h1*a1, b1),若距離小于閾值ε,則認(rèn)為是重復(fù)的,這么做是因?yàn)榈玫降膯螒?yīng)性矩陣不一定完全精確以及一些別的誤差原因。

《An affine invariant interest point detector》中對(duì)repeatability定義進(jìn)行了延伸,針對(duì)affine invariant的圖像特征點(diǎn)。?

repeatability計(jì)算式的分母可以和原來定義相同,分子的定義correspondence滿足兩個(gè)條件:?
1、同之前定義,即設(shè)定ε=1.5;?
2、regions映射到另一幅圖像中重疊誤差小于0.2。?
這里第二點(diǎn)是因?yàn)樘卣鼽c(diǎn)檢測器得到的特征點(diǎn)實(shí)際上是根據(jù)特征點(diǎn)附近區(qū)域計(jì)算梯度來選取特征點(diǎn),實(shí)際上檢測的特征區(qū)域(region),如Harris-Affine檢測的是一個(gè)橢圓區(qū)域,SIFT檢測的是一個(gè)圓形區(qū)域;當(dāng)左圖一特征點(diǎn)區(qū)域在經(jīng)過乘上單應(yīng)性矩陣H后實(shí)際,該區(qū)域會(huì)發(fā)生變化,所以需要判斷變化之后的區(qū)域與右圖某一特征點(diǎn)區(qū)域的重疊誤差,誤差<0.2,則判斷自是一對(duì)特征點(diǎn)。?


2、特征點(diǎn)匹配評(píng)價(jià)

特征點(diǎn)匹配的評(píng)價(jià)一般涉及到兩個(gè)概念,即Recall(召回率)和Precision(精確率),我們先來了解一下這兩個(gè)概念。?
精確率和召回率是廣泛用于信息檢索和統(tǒng)計(jì)學(xué)分類領(lǐng)域的兩個(gè)度量值,用來評(píng)價(jià)結(jié)果的質(zhì)量。?
——精確率是檢索出相關(guān)文檔數(shù)與檢索出的文檔總數(shù)的比率,衡量的是檢索系統(tǒng)的查準(zhǔn)率;?
——召回率是指檢索出的相關(guān)文檔數(shù)和文檔庫中所有的相關(guān)文檔數(shù)的比率,衡量的是檢索系統(tǒng)的查全率。?
在信息檢索中:

  1. 精確率 = 提取出的正確信息條數(shù) / 提取出的信息條數(shù)
  2. 召回率 = 提取出的正確信息條數(shù) / 樣本中的信息條數(shù)

下面是一個(gè)非常經(jīng)典的解釋Recall和Precision的圖,我做了一點(diǎn)兒說明:?

Precision和Recall指標(biāo)有時(shí)候會(huì)出現(xiàn)的矛盾的情況,可以繪制Precision-Recall曲線,曲線越靠上部,結(jié)果越好。

對(duì)比信息檢索的評(píng)價(jià),在特征點(diǎn)匹配時(shí):?
A指的是實(shí)際為匹配點(diǎn)對(duì),且該匹配算法得到了這些匹配對(duì);?
B指的是實(shí)際為匹配點(diǎn)對(duì),但該匹配算法沒有得到這些匹配對(duì);?
C指的是實(shí)際為錯(cuò)誤匹配對(duì),但該算法得到了這些匹配對(duì);?
即Precision為匹配結(jié)果中有多少是準(zhǔn)確的,Recall就是所有正確的匹配結(jié)果有多少通過匹配算法得到了。

在第一部分中已經(jīng)說明了根據(jù)兩圖像間的單應(yīng)性矩陣H計(jì)算兩個(gè)特征點(diǎn)是否重復(fù),這里設(shè)置一個(gè)correspondence變量,作為重復(fù)特征點(diǎn)的數(shù)量,則匹配結(jié)果評(píng)價(jià)的兩個(gè)參數(shù)Precision和Recall有如下公式:?

?

公式中,#correct matches表示匹配結(jié)果中正確匹配點(diǎn)對(duì),#correspondences表示特征點(diǎn)檢測時(shí)重復(fù)特征點(diǎn)對(duì)(特征點(diǎn)重復(fù)即認(rèn)為實(shí)際為正確匹配點(diǎn)對(duì),但可能被匹配算法匹配上,也可能未匹配上),#false matches表示匹配結(jié)果中錯(cuò)誤匹配點(diǎn)對(duì)。其中,正確與錯(cuò)誤匹配點(diǎn)對(duì)可以用上面提到的兩個(gè)判斷特征點(diǎn)是否重復(fù)的條件來判定。

因此,在評(píng)價(jià)特征點(diǎn)匹配結(jié)果時(shí),首先應(yīng)當(dāng)知道兩個(gè)圖像間的單應(yīng)性矩陣H,然后通過特征點(diǎn)檢測算法得到左右圖像中的特征點(diǎn)信息,根據(jù)單應(yīng)性矩陣得到重復(fù)特征點(diǎn)數(shù),即#correspondences;接著由特征點(diǎn)匹配算法得到的匹配結(jié)果計(jì)算Precision和Recall,繪制1-precision和recall曲線,曲線靠上方的結(jié)果較出色!?
參考曲線圖:?

?
(圖片來源——《A Performance Evaluation of Local Descriptors》)


以上內(nèi)容為我的理解,可能存在理解不當(dāng)?shù)牡胤?#xff0c;歡迎指正!

轉(zhuǎn)載請(qǐng)注明出處:圖像特征點(diǎn)檢測與匹配評(píng)價(jià)準(zhǔn)則——量化

參考資料:?
介紹Precision和Recall的博客:?
http://blog.csdn.net/pirage/article/details/9851339?
http://bookshadow.com/weblog/2014/06/10/precision-recall-f-measure/?
文章《A Performance Evaluation of Local Descriptors》?
https://www.robots.ox.ac.uk/~vgg/research/affine/det_eval_files/mikolajczyk_pami2004.pdf?
K Mikolajczyk大神的特征點(diǎn)重復(fù)率計(jì)算相關(guān)代碼:?
http://www.robots.ox.ac.uk/~vgg/research/affine/descriptors.html#binaries?
特征點(diǎn)檢測匹配標(biāo)準(zhǔn)數(shù)據(jù)庫:?

http://www.robots.ox.ac.uk/~vgg/data/data-aff.html




研究特征提取的方法,找到提取出來的特征精度最高,這里的最高是指在多幀運(yùn)動(dòng)變化圖片里應(yīng)用此算法都能找到固定位置的特征,而且這個(gè)特征不限,可以是邊緣、角點(diǎn)或區(qū)域塊等,然后根據(jù)不同特征、其運(yùn)動(dòng)變化及圖像成像質(zhì)量提供不同的算法,以達(dá)到最優(yōu)。這個(gè)方向剛開始的確十分頭大,完全不知道從什么著手,是邊緣提取算法呢?還是先作目標(biāo)分割,大概想一兩天,決定先從特征點(diǎn)(包括角點(diǎn))提取算法做起,先找到在特征點(diǎn)算法里非常優(yōu)秀的,然后結(jié)合各種背景(噪聲,運(yùn)動(dòng)變化)測試其變化。

這里主要的思路來自于一個(gè)仿射不變特征提取方法的檢測:http://www.robots.ox.ac.uk/~vgg/research/affine/

這個(gè)網(wǎng)站上面主要提供了一個(gè)仿射不變特征提取方法的評(píng)估,它提供了八組圖片,分別從噪聲、模糊、視點(diǎn)變化、縮放、旋轉(zhuǎn)、亮度變化來評(píng)估其仿射不變特征提取方法的效果。不過它主要是對(duì)相似區(qū)域進(jìn)行提取,涉及到橢圓區(qū)域的仿射變換,而我主要進(jìn)行點(diǎn)特征點(diǎn)提取的評(píng)估,要稍微簡單點(diǎn),當(dāng)然也借鑒了其代碼(這里面只有評(píng)估代碼,沒有特征提取算法的代碼,不過提供了一系列算法的執(zhí)行文件)

我首先要測試的sift算法對(duì)視點(diǎn)變化的評(píng)估,從上面的網(wǎng)站里下載了幾個(gè)圖片【img1.ppm、img2.ppm】、變化矩陣【H1to2p】及特征點(diǎn)提取文件【img1.haraff.sift】,我主要從特征向量匹配程度和實(shí)際匹配的位置進(jìn)行比較。我的代碼如下:

  1. function [matchFeaIndex, matchFeaRatio,matchLocal1]=matchPointFea(file1,file2,H,image1,image2)
  2. % 主要用特征點(diǎn)匹配效果測試:
  3. % 用法:[matchFeaIndex, matchFeaRatio,matchLocal1]=matchPointFea('img1.haraff.sift','img2.haraff.sift','H1to2p','img1.ppm','img2.ppm');
  4. % 輸入:
  5. % file1 - 圖像1特征點(diǎn)檢測文件
  6. % file2 - 圖像2特征點(diǎn)檢測文件
  7. % H - 圖像1到圖像2的仿射變換矩陣
  8. % image1 - 圖像1
  9. % image2 - 圖像2
  10. % 輸出:
  11. % matchFeaIndex - 保存圖像1中同圖像2匹配的特征點(diǎn)在file2中的標(biāo)號(hào),若不匹配則為0
  12. % matchFeaRatio - 對(duì)應(yīng)于matchIndex,保存特征點(diǎn)匹配程度,不匹配則為0
  13. % matchLocal1 - 保存圖像2中特征點(diǎn)位置同經(jīng)過仿射變換1之間的位置差別
  14. % matchLocal2 - 保存圖像1中特征點(diǎn)位置同經(jīng)過仿射變換2之間的位置差別(保留)
  15. % 特征點(diǎn)檢測文件格式:
  16. % file1, file2:
  17. % x1 y1 a1 b1 c1 c2 c3 ...
  18. % x2 y2 a2 b2 c1 c2 c3 ...
  19. %---------------------
  20. % 第一行 保存描述子數(shù)目及大小
  21. % x, y - 特征點(diǎn)位置
  22. % a, b - 特征點(diǎn)大小及方向(主要針對(duì)于sift變換)
  23. % d1 d2 d3 ... - 特征描述子向量(如果小于,則無效)
  24. close all;
  25. % loc存放位置及大小角度,des存放特征描述子向量,dimdesc存放描述子大小及數(shù)目
  26. [des1, loc1, dimdesc1]=loadFeatures(file1);
  27. [des2, loc2, dimdesc2]=loadFeatures(file2);
  28. % 導(dǎo)入圖像
  29. Im1=imread(image1);
  30. Im2=imread(image2);
  31. % 導(dǎo)入仿射矩陣文件
  32. H=load(H);
  33. fprintf(1,'numbers and length of descriptor in file1 %d %d\n',dimdesc1(1),dimdesc1(2));
  34. fprintf(1,'numbers and length of descriptor in file2 %d %d\n',dimdesc2(1),dimdesc2(2));
  35. if dimdesc1(2)&gt;1 &amp;&amp; dimdesc1(2)==dimdesc2(2)
  36. fprintf(1,'%s, %s look like files with descriptors...\n',file1,file2);
  37. else
  38. error('Different descriptor dimension in %s or %s files.',file1,file2);
  39. end
  40. % 計(jì)算兩個(gè)特征向量的匹配程度可以通過向量空間余弦相似度來衡量.
  41. % 設(shè)置比值distRatio,保證所匹配的特征點(diǎn)具有顯著相似度,即與第二相似度有較大差異.
  42. distRatio = 0.6;
  43. % 在圖像2中找到圖像1中每一個(gè)匹配點(diǎn).
  44. des2t = des2'; % 轉(zhuǎn)置
  45. desNum = dimdesc1(1); % 圖像1特征點(diǎn)個(gè)數(shù)
  46. matchFeaIndex=zeros(desNum,1);
  47. matchFeaRatio=zeros(desNum,1);
  48. matchNum=0;
  49. for i = 1 : desNum
  50. dotprods = des1(i,:) * des2t; % 計(jì)算乘積項(xiàng)
  51. [vals,indx] = sort(acos(dotprods)); % 排序余弦相似度
  52. % 找到最大余弦相似度.
  53. if (vals(1) &lt; distRatio * vals(2))
  54. matchFeaIndex(i) = indx(1);
  55. matchFeaRatio(i) = vals(1);
  56. matchNum=matchNum+1;
  57. else
  58. matchFeaIndex(i) = 0;
  59. end
  60. end
  61. fprintf(1,'numbers of match descriptor is %d \n',matchNum);
  62. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  63. % 確定圖像1中特征點(diǎn)變換到圖像2中的位置,及圖像2變換到圖像1中的位置
  64. % 要進(jìn)行仿射變換測試,要求圖像1和2必須大小相同
  65. if size(Im1)==size(Im2)
  66. HI=H(:, 1:3); %圖1到圖2
  67. H=inv(HI); %圖2到圖1
  68. fprintf(1,'Projecting 1 to 2...\n');
  69. loc1t=projectPoints(loc1',HI);
  70. loc1t=loc1t';
  71. fprintf(1,'and 2 to 1...\n');
  72. loc2t=projectPoints(loc2',H);
  73. loc2t=loc2t';
  74. ImageSize=size(Im1);
  75. matchLocal1=matchLocal(loc1t,loc2,ImageSize,matchFeaIndex);
  76. end
  77. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  78. % 畫圖
  79. % showkeys(image1,loc1); % 特征點(diǎn)顯示
  80. % showkeys(image2,loc2);
  81. % 顯示匹配圖像過程
  82. Im=appendimages(Im1,Im2);
  83. % Show a figure with lines joining the accepted matches.
  84. figure('Position', [0 0 size(Im,2) size(Im,1)]);
  85. colormap('gray');
  86. imagesc(Im);
  87. hold on;
  88. cols1 = size(Im1,2);
  89. for i = 1: size(des1,1)
  90. if (matchFeaIndex(i) &gt; 0 &amp;&amp; matchLocal1(i)&lt;5)
  91. line([loc1(i,1) loc2(matchFeaIndex(i),1)+cols1], ...
  92. [loc1(i,2) loc2(matchFeaIndex(i),2)], 'Color', 'c'); %畫對(duì)應(yīng)線條
  93. plot(loc1(i,1),loc1(i,2),'r.'); %畫特征點(diǎn)
  94. plot(loc2(matchFeaIndex(i),1)+cols1,loc2(matchFeaIndex(i),2),'g.'); %畫特征點(diǎn)
  95. end
  96. end
  97. hold off;
  98. end
  99. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  100. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  101. % 點(diǎn)的投影運(yùn)算
  102. function loct=projectPoints(loc,H)
  103. num=size(loc(1)); %特征點(diǎn)數(shù)目
  104. loct=loc;
  105. for i=1:num
  106. l1=[loc(i,1),loc(i,2),1];
  107. l1_2=H*l1';
  108. l1_2=l1_2/l1_2(3);
  109. loct(i,1)=l1_2(1);
  110. loct(i,2)=l1_2(2);
  111. end
  112. end
  113. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  114. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  115. % 加載描述子文件
  116. function [des, loc, dimdes]=loadFeatures(file)
  117. fid = fopen(file, 'r');
  118. [dimdes, count]=fscanf(fid, '%d %d',[1 2]);
  119. if count ~= 2
  120. error('Invalid keypoint file beginning.');
  121. end
  122. num = dimdes(1); %描述子數(shù)目
  123. len = dimdes(2); %描述子長度
  124. loc = double(zeros(num, 4));
  125. des = double(zeros(num, len));
  126. % 將描述子導(dǎo)入向量
  127. for i = 1:num
  128. [vector, count] = fscanf(fid, '%f %f %f %f', [1 len+5]); %row col scale ori
  129. if count ~= (5+len)
  130. error('Invalid keypoint file format');
  131. end
  132. loc(i, :) = vector(1, 1:4);
  133. descrip(1, :) = vector(1, 6:len+5);
  134. descrip = descrip / sqrt(sum(descrip.^2));
  135. des(i, :) = descrip(1, :);
  136. end
  137. fclose(fid);
  138. end
  139. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  140. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  141. % 計(jì)算實(shí)際特征匹配的偏差位置
  142. function matchLoc=matchLocal(loct,loc,ImageSize,matchFeaIndex)
  143. matchLoc=ones(size(matchFeaIndex));
  144. for i=1:size(loct)
  145. if matchFeaIndex(i)~=0 %找到匹配的點(diǎn)
  146. %注意仿射變換,位置可能超過圖像范圍
  147. if loct(i,1)&gt;0&amp;&amp;loct(i,1)&lt;ImageSize(1)&amp;&amp;loct(i,2)&gt;0&amp;&amp;loct(i,2)&lt;ImageSize(2)...
  148. &amp;&amp;loc(matchFeaIndex(i),1)&gt;0&amp;&amp;loc(matchFeaIndex(i),1)&lt;ImageSize(1)&amp;&amp;loc(matchFeaIndex(i),2)&gt;0&amp;&amp;loc(matchFeaIndex(i),2)&lt;ImageSize(2)
  149. matchLoc(i)=(loct(i,1)-loc(matchFeaIndex(i),1))^2+(loct(i,2)-loc(matchFeaIndex(i),2))^2;
  150. matchLoc(i)=sqrt(matchLoc(i)); %這個(gè)偏差即是歐氏距離
  151. end
  152. end
  153. end
  154. matchLoc=100.*matchLoc./max(matchLoc); %計(jì)算百分比
  155. end


總結(jié)

以上是生活随笔為你收集整理的图像特征点检测与匹配评价准则——量化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。