日韩性视频-久久久蜜桃-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角点检测的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    主站蜘蛛池模板: 激情综合激情 | 大牛影视剧免费播放在线 | 456av| 国产aⅴ一区二区三区 | 亚洲第一精品网站 | 中文字幕在线日韩 | 久久精品免费av | 91老师片黄在线观看 | 污视频在线观看网址 | 男女激情啪啪 | 九色91popny蝌蚪新疆 | 黄色av电影网站 | 亚洲1区 | 免费一级一片 | 国产性色av | 人人草在线 | 欧美日韩一区二区三区国产精品成人 | 爱操影院 | 少妇高潮一区二区三区69 | 国产视频手机在线播放 | 久久精品大全 | 在线亚洲网站 | 日本欧美中文字幕 | 亚洲无线视频 | 日韩美女一区二区三区 | 影音先锋蜜桃 | av在线激情 | 国产综合色视频 | 在线观看视频免费 | 999av视频| 夜色导航 | 黄色网址在线播放 | 欧美午夜大片 | 黄色喷水视频 | 激情999| 婷婷六月网 | 国产精品无码免费播放 | 粉嫩av一区二区白浆 | 日本一区中文 | 久久久久久国产精品日本 | 午夜精品福利一区二区蜜股av | 天天操天天摸天天干 | 精品一区二区三区视频在线观看 | 日韩在线www | 91av视频在线播放 | 亚洲色图欧美在线 | 99成人国产精品视频 | 日韩欧美视频在线播放 | 日日操夜夜骑 | 欧美v日本| 九九热在线视频免费观看 | 波多野吉衣一二三区乱码 | 午夜免费看片 | 国产妇女乱一性一交 | 日韩精品视频在线免费观看 | 97人人模人人爽人人少妇 | 国产精品理论片 | 欧美一区三区三区高中清蜜桃 | 天天爽天天爽夜夜爽毛片 | 福利影院av| 激情专区 | 午夜在线视频免费观看 | 欧美日韩在线直播 | 97免费在线 | 国产麻豆一精品一男同 | 老色鬼av | 亚洲色图狠狠干 | 中文字幕日韩精品一区 | 91av免费观看 | 精品1卡二卡三卡四卡老狼 日韩三级网 | 国产精品一区二区三区线羞羞网站 | 欧美成人黄色网 | 国产一区免费观看 | 色婷婷精品| av大全免费| 99插插插| 久久久毛片 | 午夜精品无码一区二区三区 | 免费三级在线 | 亚洲高清网站 | 永久免费在线看片 | 97人妻精品一区二区三区免费 | 欧美乱妇18p | 亚洲国产无码精品 | 色呦呦网站入口 | 日韩三区在线 | 67194成人 | 色国产视频 | av片久久 | 亚洲不卡一区二区三区 | 久久久久国产一区二区三区 | 青草综合 | 麻豆tube| 夫妻自拍偷拍 | 鲁鲁狠狠狠7777一区二区 | 香蕉网在线 | 男人添女人下部高潮视频 | 国产九九精品视频 | 亚洲av无码一区二区二三区软件 |