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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

角点检测:Harris角点及Shi-Tomasi角点检测

發布時間:2025/3/21 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 角点检测:Harris角点及Shi-Tomasi角点检测 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

角點

特征檢測與匹配是Computer Vision 應用總重要的一部分,這需要尋找圖像之間的特征建立對應關系。點,也就是圖像中的特殊位置,是很常用的一類特征,點的局部特征也可以叫做“關鍵特征點”(keypoint feature),或“興趣點”(interest point),或“角點”(conrner)。

關于角點的具體描述可以有幾種:

  • 一階導數(即灰度的梯度)的局部最大所對應的像素點;
  • 兩條及兩條以上邊緣的交點;
  • 圖像中梯度值和梯度方向的變化速率都很高的點;
  • 角點處的一階導數最大,二階導數為零,指示物體邊緣變化不連續的方向。

?

Harris角點檢測

當一個窗口在圖像上移動,在平滑區域如圖(a),窗口在各個方向上沒有變化。在邊緣上如圖(b),窗口在邊緣的方向上沒有變化。在角點處如圖(c),窗口在各個方向上具有變化。Harris角點檢測正是利用了這個直觀的物理現象,通過窗口在各個方向上的變化程度,決定是否為角點。

將圖像窗口平移[u,v]產生灰度變化E(u,v)

由:, 得到:

對于局部微小的移動量 [u,v],近似表達為:

其中M是 2*2 矩陣,可由圖像的導數求得:

E(u,v)的橢圓形式如下圖:

?

定義角點響應函數?R?為:

Harris角點檢測算法就是對角點響應函數R進行閾值處理:R > threshold,即提取R的局部極大值。

?

【相關代碼】

OpenCV中定義了 cornerHarris 函數:

[cpp]?view plaincopy
  • void?cornerHarris(?InputArray?src,?OutputArray?dst,?int?blockSize,??
  • ????????????????????????????????int?ksize,?double?k,??
  • ????????????????????????????????int?borderType=BORDER_DEFAULT?);??
  • 可以結合 convertScaleAbs 函數,通過閾值取角點:

    [cpp]?view plaincopy
  • void?cornerHarris_demo(?int,?void*?)??
  • {??
  • ??Mat?dst,?dst_norm;??
  • ??dst?=?Mat::zeros(?src.size(),?CV_32FC1?);??
  • ??///?Detector?parameters??
  • ??int?blockSize?=?2;??
  • ??int?apertureSize?=?3;??
  • ??double?k?=?0.04;??
  • ??///?Detecting?corners??
  • ??cornerHarris(?src_gray,?dst,?blockSize,?apertureSize,?k,?BORDER_DEFAULT?);??
  • ??///?Normalizing??
  • ??normalize(?dst,?dst_norm,?0,?255,?NORM_MINMAX,?CV_32FC1,?Mat()?);??
  • ??convertScaleAbs(?dst_norm,?dst_norm_scaled?);???
  • ??///?Drawing?a?circle?around?corners??
  • ??for(?int?j?=?0;?j?<?dst_norm.rows?;?j++?)??
  • ?????{?for(?int?i?=?0;?i?<?dst_norm.cols;?i++?)??
  • ??????????{??
  • ????????????if(?(int)?dst_norm.at<float>(j,i)?>?thresh?)??
  • ??????????????{???
  • ????????????????circle(?dst_norm_scaled,?Point(?i,?j?),?5,??Scalar(0),?2,?8,?0?);???
  • ????????????????circle(src,Point(?i,?j?),?5,??Scalar(255,0,0),?-1,?8,?0?);??
  • ??????????????}??
  • ??????????}???
  • ?????}??????
  • ??///?Showing?the?result??
  • ??imshow(?corners_window,?dst_norm_scaled?);??
  • ??imshow(?source_window,?src?);????
  • }??
  • ?
    ?

    Shi-Tomasi 算法

    Shi-Tomasi 算法是Harris 算法的改進。Harris 算法最原始的定義是將矩陣 M 的行列式值與 M 的跡相減,再將差值同預先給定的閾值進行比較。后來Shi 和Tomasi 提出改進的方法,若兩個特征值中較小的一個大于最小閾值,則會得到強角點。

    如上面第二幅圖中,對自相關矩陣 M 進行特征值分析,產生兩個特征值和兩個特征方向向量。因為較大的不確定度取決于較小的特征值,也就是,所以通過尋找最小特征值的最大值來尋找好的特征點也就解釋的通了。
    Shi 和Tomasi 的方法比較充分,并且在很多情況下可以得到比使用Harris 算法更好的結果。

    ?

    【相關代碼】

    由于這種Shi-Tomasi算子與1994年在文章?Good Features to Track?[1]中提出,OpenCV 實現的算法的函數名定義為 goodFeaturesToTrack:

    [cpp]?view plaincopy
  • void?goodFeaturesToTrack(?InputArray?image,?OutputArray?corners,??
  • ?????????????????????????????????????int?maxCorners,?double?qualityLevel,?double?minDistance,??
  • ?????????????????????????????????????InputArray?mask=noArray(),?int?blockSize=3,??
  • ?????????????????????????????????????bool?useHarrisDetector=false,?double?k=0.04?);??
  • 自定義使用函數(以方便createTrackbar的響應)如下:

    [cpp]?view plaincopy
  • void?cornerShiTomasi_demo(?int,?void*?)??
  • {??
  • ??if(?maxCorners?<?1?)?{?maxCorners?=?1;?}??
  • ??///?Parameters?for?Shi-Tomasi?algorithm??
  • ??vector<Point2f>?corners;??
  • ??double?qualityLevel?=?0.01;??
  • ??double?minDistance?=?10;??
  • ??int?blockSize?=?3;??
  • ??bool?useHarrisDetector?=?false;??
  • ??double?k?=?0.04;??
  • ??///?Copy?the?source?image??
  • ??Mat?cormat;??
  • ??///?Apply?corner?detection?:Determines?strong?corners?on?an?image.??
  • ??goodFeaturesToTrack(?src_gray,???
  • ???????????????corners,??
  • ???????????????maxCorners,??
  • ???????????????qualityLevel,??
  • ???????????????minDistance,??
  • ???????????????Mat(),??
  • ???????????????blockSize,??
  • ???????????????useHarrisDetector,??
  • ???????????????k?);??
  • ??///?Draw?corners?detected??
  • ??for(?int?i?=?0;?i?<?corners.size();?i++?){???
  • ??????circle(?dst_norm_scaled,??corners[i],?5,??Scalar(255),?2,?8,?0?);???
  • ??????circle(?src,?corners[i],?4,?Scalar(0,255,0),?2,?8,?0?);???
  • ??}??
  • ??
  • ??///?Show?what?you?got??
  • ??imshow(?corners_window,?dst_norm_scaled?);??
  • ??imshow(?source_window,?src?);????
  • }??
  • ?
    ?

    實踐

    在主函數中定義兩個進度條方便調整閾值:

    [cpp]?view plaincopy
  • namedWindow(?source_window,?CV_WINDOW_AUTOSIZE?);??
  • createTrackbar(?"Threshold:?",?source_window,?&thresh,?max_thresh,?cornerHarris_demo?);??
  • createTrackbar(?"Max??corners:",?source_window,?&maxCorners,?maxTrackbar,?cornerShiTomasi_demo?);????
  • ??
  • namedWindow(?corners_window,?CV_WINDOW_AUTOSIZE?);??
  • namedWindow(?source_window,?CV_WINDOW_AUTOSIZE?);??
  • imshow(?source_window,?src?);????
  • ??
  • cornerHarris_demo(?0,?0?);??
  • cornerShiTomasi_demo(?0,?0?);??

  • 這里還需要說的是OpenCV 2.4.2中給的角點檢測跟蹤的示例代碼有些問題,是應為SURF等不再定義在 feature2d模塊中,而是legacy和nonfree,所以需要加入引用:

    [cpp]?view plaincopy
  • #include?"opencv2/legacy/legacy.hpp"??
  • #include?"opencv2/nonfree/nonfree.hpp"??
  • ?

    角點檢測結果:

    藍色實心點為Harris檢測結果,綠色空心圈為goodFeaturetoTrack檢測結果。

    M特征值分解后每個像素點相減的圖(也就是Harris閾值判斷的圖)如下:

    黑色實心點為Harris閾值檢測結果,白色空心圈為閾值為27時Shi-Tomasi檢測結果。

    轉載請注明出處:http://blog.csdn.net/xiaowei_cqu/article/details/7805206
    源碼及資料下載:?http://download.csdn.net/detail/xiaowei_cqu/4466627

    參考資料:

    [1] Shi and C. Tomasi.?Good Features to Track.?Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, pages 593-600, June 1994.

    [2] Richard Szeliski.?Computer Vision: Algorithms and Applications.?Springer, New York, 2010.

    [3] 圖像特征點提取PPT?http://wenku.baidu.com/view/f61bc369561252d380eb6ef0.html?

    總結

    以上是生活随笔為你收集整理的角点检测:Harris角点及Shi-Tomasi角点检测的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 美女扒逼| 免费看aaaaa级少淫片 | 黄色日本网站 | 男女黄色片 | 在线免费观看亚洲 | 国产人妖ts重口系列网站观看 | 亚洲乱码国产乱码精品精软件 | 波多野结衣一区二区三区在线观看 | 国产精品亚洲成在人线 | 综合国产精品 | 日日干,夜夜操 | 一区二区三区四区视频 | 成a人片亚洲日本久久 | 特黄视频免费看 | 91精品国产乱码久久久久久久久 | 国产福利视频在线观看 | 国产毛片精品国产一区二区三区 | 网站黄色在线观看 | 麻豆国产精品视频 | 亚洲最大成人网色 | 久久网伊人 | 免费在线欧美 | 美国少妇在线观看免费 | 男人网站在线观看 | 日本人六九视频 | 欧美一级xxx | 91精品国产乱码久久 | 黄av网| 俺也来俺也去俺也射 | 性爽爽 | 91蜜桃在线观看 | 有码在线视频 | 视频黄色免费 | www国产黄色| 天海翼视频在线观看 | av在线第一页 | 日韩精品免费一区二区夜夜嗨 | 亚洲精品一区二区三区四区五区 | 国产精品9 | 黄色h视频 | 欧美国产不卡 | 亚洲黄色免费视频 | 久久网一区二区 | 老熟妇午夜毛片一区二区三区 | 欧美狂猛xxxxx乱大交3 | 国产吞精囗交久久久 | 国产精品乱轮 | 深夜福利免费观看 | 国产免费啪啪 | 91精品在线看 | 国产69xx| 久久国产福利一区 | 天天看天天操 | 中文字幕亚洲高清 | 九色91popny蝌蚪 | 波多野结衣日韩 | 尤物最新网址 | 亚洲ⅴ国产v天堂a无码二区 | 国产一级在线播放 | 国产欧美精品一区二区三区 | www.色就是色.com | 欧美精品久久久久久久久 | 日韩视频中文字幕在线观看 | 精品九九久久 | av片在线观看免费 | 亚洲国产精品尤物yw在线观看 | 亚洲一区二区精品 | 亚洲精品成人无码熟妇在线 | 久久精品7 | 国产精品久久久久9999爆乳 | 欧美a级片在线观看 | 日本三级大全 | 青青草91 | 在线观看亚洲精品 | 亚洲精品久久久久 | 日韩在线观看免费 | 在线成年人视频 | 日本专区在线 | 国产偷v国产偷v亚洲高清 | 成人免费黄| 一区二区三区日韩视频 | 欧美少妇色图 | 激情久久五月天 | 久久成人人人人精品欧 | 五月婷婷丁香激情 | 久精品在线观看 | 无码人妻h动漫 | 性久久久久久久久 | 久久国产精品系列 | 在线精品一区 | 亚洲天堂久久久 | 日韩专区视频 | 777米奇影视第四色 五月丁香久久婷婷 | 欧美性猛交乱大交 | caopeng在线| a级国产视频| 姑娘第5集在线观看免费好剧 | www.国产色| 久久久久久久影院 |