cvNorm用法测量长度.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
cvNorm用法测量长度

cvNorm的用法 2009-09-29 16:03 CV_L1是一般的長度計算,CV_L2則是論文常用的歐幾里德距離,CV_C則是拿絕對值後的最大值,在圖形檢索比對這方面cvNorm()還算是不錯用的函式, cvNorm()還提供了遮罩的功能,可以將不必要的特徵資訊做掩蓋的功能,遮罩的部份就要參考前面圖形的Mask遮罩實作這地方,與前面圖形Mask使用原理相同. 在線性代數的部分Norm,為向量長度的意思,最常見的長度計算方式為1-Norm將所有向量數據取絕對值的總和,2-Norm為歐機里德距離,將所有數據平方在開根號, ∞-Norm為將所有向量數據絕對值後取對大的那個,當然,這分別代表著CV_L1,CV_L2,CV_C的使用,在下面則用簡單的方式做cvNorm()的長度計算. cvNorm()長度的計算 #include cv.h #include stdio.h float Array2[]={6,-1,2}; int main() { ???? CvMat *Matrix2=cvCreateMat(1,3,CV_32FC1); ???? cvSetData(Matrix2,Array2,Matrix2-step); ???? printf(1-norm is : %.1f\n,cvNorm(Matrix2,NULL,CV_L1)); ???? printf(2-norm is : %.1f\n,cvNorm(Matrix2,NULL,CV_L2)); ???? printf(Infininte norm is : %.1f\n,cvNorm(Matrix2,NULL,CV_C)); ???? system(pause); } 執行結果: cvNorm()的輸出為一個double型別的數據,上面的程式可以簡單的看出來cvNorm()對長度的計算,要計算Matrix2的長度,則是要把第二個引數設置為空, 而第二個引數的輸入則是代表著距離,在下面的程式碼範例會介紹到,對於長度的計算公式則是如下所示. 再來是長度計算Mask使用的範例,利用一個遮罩將不想被計算的數據給取消掉,0代表不想使用的數據,1代表要被計算的數據. cvNorm()遮罩與長度的計算 #include cv.h #include stdio.h float Array2[]={6,-1,2}; uchar MaskArray[]={1,1,0}; int main() { ???? CvMat *Matrix2=cvCreateMat(1,3,CV_32FC1); ???? CvMat *MaskMatrix=cvCreateMat(1,3,CV_8UC1); ???? cvSetData(Matrix2,Array2,Matrix2-step); ???? cvSetData(MaskMatrix,MaskArray,MaskMatrix-step); ???? printf(1-norm is : %.1f\n,cvNorm(Matrix2,NULL,CV_L1,MaskMatrix)); ???? printf(2-norm is : %.1f\n,cvNorm(Matrix2,NULL,CV_L2,MaskMatrix)); ???? printf(Infininte norm is : %.1f\n,cvNorm(Matrix2,NULL,CV_C,MaskMatrix)); ???? system(pause); } 執行結果: 因此,實際上做長度計算的只有6跟-1這兩個數據,在這邊,遮罩的使用CvMat資料結構必須要用單通道非浮點數的數據型別,如CV_32FC1及CV_64FC1都是 不可用來作遮罩矩陣的參數宣告.而矩陣也不可以用float及double的型別.遮罩長度的計算方式如下 再來,就是距離的計算了,它可以比較兩個向量的距離大小,也可以用許多向量的距離來做分數(Score)的參考目標,也就是說,在做圖形比對的時候,特徵值距 離越小的兩張圖片某些特殊的特徵就越接近(看是用什麼方法擷取特徵值),因此,在一個龐大的圖形特徵資料庫中,將目標圖形的特徵值對每一筆資料做比對, 可以藉由取得最小距離來找出最相似的圖形,距離的簡單例子就如下 cvNorm()距離的計算 #include cv.h #include stdio.h float Array1[]={6,-1,2}; float Array2[]={5,3,1}; int main() { ???? CvMat *Matrix1=cvCreateMat(1,3,CV_32FC1); ???? CvMat *Matrix2=cvCreateMat(1,3,CV_32FC1); ??

文档评论(0)

yan698698 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档