CV-2020-實踐:04 圖像特徵的大做業

CV-2020-實踐:04 圖像特徵的大做業

​ 這又是一次「爲難」人的大做業了,幸虧此次不是一我的,有大佬們撐着,但仍是好麻煩。本次實驗圍繞着圖像特徵進行,包含特徵提取、特色去除、特徵點匹配中的一些模型和方法,總歸仍是內容滿滿的
Be alone, that is the secret of invention; be alone, that is when ideas are born. -- Nikola Tesla

1. 做業內容和要求

  • 做業內容html

    1. 基於分類器的隨機蕨特徵檢測(FERNS)方法的實現;
    2. 特徵與匹配git

      1. 特徵檢測:使用SIFTSURF
      2. 野點去除:基礎野點去除方法
      3. 匹配與定位:BruteForceFLANNRANSACHough Cluster等方法
      • 實現任務:點對映射、幾何校訂、圖像拼接、目標檢測
    3. 基於快速特徵點檢測方法(ORB),實現視頻的實時檢測與可視化(消除野點)
  • 做業分析github

    • 整個實驗包含三個部分。其中第一部分僅用實現FERNS方法;第二部分包含特徵檢測、野點去除、特徵點匹配完整的圖像特徵應用的過程,又給出了多種實現任務;第三部分則是在第二部分完成後,加入了視頻實時檢測的要求(可能要應用一些加速方法)。
    • 實驗的總體流程較爲清晰,重點在於各個算法、模型的原理實現、各部分之間的數據的傳遞(對於團隊合做來講)以及可視化、加速的思考。

2. 各個算法模型的描述和參考資料

3. 環境配置(opencv-contrib nonfree安裝)

  • 沒錯,此次仍是要配置環境QAQ,因爲咱們須要使用SIFT、SURF等特徵算法,因此咱們須要配置OpenCV_Contrib。OpenCV僅包含了主要模塊,而一些帶專利的收費算法、仍在測試的新模塊則是在OpenCV_Contrib包中。
  1. 首先,咱們須要再次安裝CMake,爲了方便,此次咱們使用它的GUI版本。
  2. 而後,咱們須要安裝OpenCVOpenCV_Contrib的源代碼,注意,二者的版本必須一致(個人版本是4.2.0,雖然我沒試過不一致會如何)。
  3. 接下來,咱們打開CMake進行編譯,

    lib-04-01.png

    • 如圖所示,在1中填入OpenCV的源代碼位置,而後在2中寫入生成位置,再點擊3處configure(按照原配置,Unix Makefiles便可),以後會通過一段時間。完成後,中間的列表都會變爲紅色。以後修改4處爲OpenCV_Contib源代碼目錄下的modules文件夾,同時將5處OPENCV_ENABLE_NONFREE打開(必定要注意,不然將沒法使用有專利的算法)。在點擊6處Generate,等待完成便可。

lib-04-02.png

    • 而後打開終端,到達生成的編譯結果目錄下,執行makesudo make install後,就安裝好這兩個包了。
    1. 最後,就是在XCode中配置咱們須要的環境了,這裏咱們和以前實驗同樣,在Header SearchPaths中填入/usr/local/include(或/usr/local/include/opencv),在Library Search Paths中填入/usr/local/lib。接下來,和以前不一樣,咱們此次再也不Build Phases設置中放入連接了,而是在Build SettingsOther Linker Flags中放入-lopencv_***標誌,來創建鏈接(因爲鏈接過多,最終,也不這樣實現了)。

      • 咱們打開**.CV-Lab.xcodeproj文件(右鍵,顯示包內容),而後用文本編輯器打開project.pbxoproj文件,在/* Begin XBuildConfiguration section */下相應位置,填入須要的標記便可,以下圖所示,

    lib-04-03.png

    • 我貪婪地填入了各類內容,以下所示,OTHER_LDFLAGS = ("-lopencv_aruco","-lopencv_bgsegm","-lopencv_bioinspired","-lopencv_calib3d","-lopencv_ccalib","-lopencv_core","-lopencv_datasets","-lopencv_dnn","-lopencv_dnn_objdetect","-lopencv_dpm","-lopencv_face","-lopencv_features2d","-lopencv_flann","-lopencv_fuzzy","-lopencv_highgui","-lopencv_gapi","-lopencv_hfs","-lopencv_highgui","-lopencv_imgcodecs","-lopencv_imgproc","-lopencv_img_hash","-lopencv_line_descriptor","-lopencv_ml","-lopencv_objdetect","-lopencv_optflow","-lopencv_phase_unwrapping","-lopencv_photo","-lopencv_plot","-lopencv_reg","-lopencv_rgbd","-lopencv_saliency","-lopencv_shape","-lopencv_stereo","-lopencv_structured_light","-lopencv_stitching","-lopencv_superres","-lopencv_surface_matching","-lopencv_text","-lopencv_tracking","-lopencv_video","-lopencv_videoio","-lopencv_videostab","-lopencv_xfeatures2d","-lopencv_ximgproc","-lopencv_xobjdetect","-lopencv_xphoto",);
    1. 接下來,嘗試編寫程序進行測試,就能夠發現,終於成功了(祝願你也能成功)。

    4. 編寫實驗代碼

    • 關於具體的代碼實現,這裏再也不作闡述了,使用了OpenCV_Conrib提供的函數,經歷了上次實驗的「熬煉」後,並有小組中大佬們的幫助,這些應該不成問題了。
    • 給出兩個連接,看完這兩個後,基本一些內容已是能夠實現的了,

    • 過程當中的一些提醒以下,

      • 注意區分features2dxfeatures2d,前者包含了ORB,後者包含了SIFT和SURF。若是有一些函數沒法應用,頗有多是其中缺了一個。
      • 注意區別NN、NNDR和ANMS,雖然都是去除野點,實際上前二者是根據比較的兩幅圖去除錯誤匹配,而ANMS則是根據自己的圖去除野點。
    有大佬們的幫助,終於又度過一劫,系統的不一樣仍是帶來了一些麻煩,中途還由於錯誤操做致使系統重裝,不過這是另外一個故事了。另外各類參考資料較多,文章中已經給出了,這裏就再也不重複水字數了,感謝大佬們的貢獻。
    相關文章
    相關標籤/搜索