1. 程式人生 > >opencv 特徵點提取演算法 SIFT SURF ORB FAST LBP學習(二)

opencv 特徵點提取演算法 SIFT SURF ORB FAST LBP學習(二)

MainActivity.java:

...
public int doFeatureDetect(int detect_type)
    {
        int length0, length1;
        Mat img_object = new Mat();
        Mat img_scene  = new Mat();

        Utils.bitmapToMat(bt1, img_object);
        Utils.bitmapToMat(bt2, img_scene);

        /*
                    FAST = 1,
                    STAR = 2,
                    SIFT = 3,
                    SURF = 4,
                    ORB = 5,
                    MSER = 6,
                    GFTT = 7,
                    HARRIS = 8,
                    SIMPLEBLOB = 9,
                    DENSE = 10,
                    BRISK = 11,
                    GRIDRETECTOR = 1000,
        */
//-- Step 1: Detect the keypoints using SURF Detector FeatureDetector detector; String str_detect; Log.i("Feature", " detect_type = "+detect_type); switch(detect_type){ case 1: detector = FeatureDetector.create(FeatureDetector.FAST
); // ok str_detect = "FAST"; break; case 2: detector = FeatureDetector.create(FeatureDetector.STAR); // ok str_detect = "STAR"; break; case 3: detector = FeatureDetector.create
(FeatureDetector.SIFT); str_detect = "SIFT"; break; case 4: detector = FeatureDetector.create(FeatureDetector.SURF); str_detect = "SURF"; break; case 5: detector = FeatureDetector.create(FeatureDetector.ORB); // ok str_detect = "ORB"; break; case 6: detector = FeatureDetector.create(FeatureDetector.MSER); str_detect = "MSER"; break; case 7: detector = FeatureDetector.create(FeatureDetector.GFTT); str_detect = "GFTT"; break; case 8: detector = FeatureDetector.create(FeatureDetector.HARRIS); // ok str_detect = "HARRIS"; break; case 9: detector = FeatureDetector.create(FeatureDetector.SIMPLEBLOB); str_detect = "SIMPLEBLOB"; break; case 10: detector = FeatureDetector.create(FeatureDetector.DENSE); str_detect = "DENSE"; break; case 11: detector = FeatureDetector.create(FeatureDetector.BRISK); str_detect = "BRISK"; break; case 12: detector = FeatureDetector.create(FeatureDetector.GRIDRETECTOR); str_detect = "GRIDRETECTOR"; break; default: detector = FeatureDetector.create(FeatureDetector.FAST); str_detect = "FAST"; break; } MatOfKeyPoint keypoints_object = new MatOfKeyPoint(); MatOfKeyPoint keypoints_scene = new MatOfKeyPoint(); detector.detect(img_object, keypoints_object); detector.detect(img_scene, keypoints_scene); KeyPoint[] obj_item0 = keypoints_object.toArray(); KeyPoint[] obj_item1 = keypoints_scene.toArray(); length0 = obj_item0.length; length1 = obj_item1.length; Log.i("Feature", " length0 = "+length0+", length1 = "+length1); for( int i = 0; i < length0; i++ ) { //-- Get the keypoints Point pts = obj_item0[i].pt; Core.rectangle(img_object, new Point(pts.x-5, pts.y-5), new Point(pts.x+5, pts.y+5), new Scalar(0, 255, detect_type*20), 2); } for( int i = 0; i < length1; i++ ) { //-- Get the keypoints Point pts = obj_item1[i].pt; Core.rectangle(img_scene, new Point(pts.x-5, pts.y-5), new Point(pts.x+5, pts.y+5), new Scalar(0, 255, detect_type*20), 2); } bt3 = Bitmap.createBitmap(img_object.cols(), img_object.rows(), Config.RGB_565); Utils.matToBitmap(img_object, bt3); iv0.setImageBitmap(bt3); bt4 = Bitmap.createBitmap(img_scene.cols(), img_scene.rows(), Config.RGB_565); Utils.matToBitmap(img_scene, bt4); iv1.setImageBitmap(bt4); Log.w("Feature"," FeatureDetector \n"); return 1; } ..

JNI:
orbhog.cpp

JNIEXPORT jlong JNICALL Java_com_example_orbhog_MainActivity_doHarris(JNIEnv *env, jclass clz, jlong imageGray)
{
    int win_size=15;//10;
    int r=3;
    int count=0;
    const int MAX_COUNT=500; // 500
    double quality=0.01;
    double min_distance= 15;//10;
    CvPoint2D32f *points[2]={0,0};

    points[1]=(CvPoint2D32f*)cvAlloc(MAX_COUNT*sizeof(points[0][0]));

    Mat pImg = Mat(*(Mat*)imageGray);
    IplImage  temp_src = pImg;
    IplImage* imageg = &temp_src;

    IplImage* grey=cvCreateImage(cvSize(imageg->width, imageg->height), IPL_DEPTH_8U, 1);
    cvCvtColor(imageg, grey, CV_BGR2GRAY); // 1、灰度圖

    //goodFeaturesToTrack(pGray, features, maxCount, qLevel, minDist);

    //automatic initialization
    IplImage* eig=cvCreateImage(cvGetSize(grey),32,1);
    IplImage* temp=cvCreateImage(cvGetSize(grey),32,1);

    count=MAX_COUNT;
    cvGoodFeaturesToTrack(grey, eig, temp,
                    points[1],
                    &count,
                    quality,
                    min_distance,
                    0,
                    3,
                    0,
                    0.04);   //讀取第一幀影像

    //能夠將角點位置精確到亞畫素級精度,提取易於跟蹤的特徵點,特徵點精確描述
    cvFindCornerSubPix(grey, points[1], count,
                      cvSize(win_size,win_size),
                      cvSize(-1,-1), // cvSize(1,1)就表示成忽略掉相鄰1個畫素
                      cvTermCriteria(CV_TERMCRIT_ITER|CV_TERMCRIT_EPS,20,0.03)); //迭代次數iteration最小精度epsilon

    for(int i=0;i<count;i++){
        cvRectangle(imageg, cvPoint(points[1][i].x-r,points[1][i].y-r),cvPoint(points[1][i].x+r, points[1][i].y+r), cvScalar(0,0,255), 2);
    }
    cvReleaseImage(&eig);
    cvReleaseImage(&temp);

    Mat *hist = new Mat(imageg);
    return (jlong) hist;
}

Harris:
這裡寫圖片描述

Orb:
這裡寫圖片描述

Fast:
這裡寫圖片描述

Harris (cvGoodFeaturesToTrack):
這裡寫圖片描述

相關推薦

opencv 特徵提取演算法 SIFT SURF ORB FAST LBP學習

MainActivity.java: ... public int doFeatureDetect(int detect_type) { int length0, length1; Mat img_object

opencv 特徵提取演算法 SIFT SURF ORB FAST LBP學習

opencv 特徵點提取演算法 SIFT SURF ORB FAST LBP學習 特徵點: 又稱興趣點、關鍵點,它是影象中突出且具有代表意義的一些點,通過這些點我們可以用來表徵、識別影象、進行影象配準、進行3D重建等 旋轉不變性和尺度不變性 角點:

OpenCV中feature2D學習——FAST特徵檢測與SIFT/SURF/BRIEF特徵提取與匹配

       在前面的文章《OpenCV中feature2D學習——FAST特徵點檢測》中講了利用FAST運算元進行特徵點檢測,這裡嘗試使用FAST運算元來進行特徵點檢測,並結合SIFT/SURF/BRIEF運算元進行特徵點提取和匹配。 I、結合SIFT運算元進行特徵點提取

SIFT,SURF,ORB,FAST,BRISK 特徵提取演算法比較

SIFT,SURF,ORB,FAST 特徵提取演算法比較 影象處理的基礎就是要進行特徵點的提取,feature(interest points) detect 的方法也在不斷的進步,邊檢測,角點檢測,直線檢測,圓檢測,SIFT特徵點檢測,同時描述符也在發展

OpenCV特徵提取----Fast特徵

1.FAST(featuresfrom accelerated segment test)演算法 特徵點檢測和匹配是計算機視覺中一個很有用的技術。在物體檢測,視覺跟蹤,三維常年關鍵等領域都有很廣泛的應用。很多傳統的演算法都很耗時,而且特徵點檢測演算法只是很多複雜影

SpringCloud從入門到進階——單部署Zuul的壓力測試與調優

內容   作為微服務架構系統的入口,毫無疑問,Zuul的併發效能直接決定了整個系統的併發效能。本文結合前幾篇文章的內容,在雲伺服器中部署了包含Eureka Server,Zuul等元件的1.0版本的微服務架構,並進行單點部署Zuul的壓力測試,對其併發效能一探究竟。 環境 說明   轉載請說明出處

演算法工程師修仙之路:吳恩達機器學習

吳恩達機器學習筆記及作業程式碼實現中文版 第二章 單變數線性迴歸 模型描述 我們使用一個監督學習演算法的例子:預測住房價格。 我們要使用一個數據集,資料集包含俄勒岡州波特蘭市的住房價格。 在這裡,我要根據不同房屋尺寸所售出的價格,畫出我的資

吳恩達機器學習多元線性迴歸假設、代價、梯度、特徵縮放、多項式

目錄 0. 前言 學習完吳恩達老師機器學習課程的多變數線性迴歸,簡單的做個筆記。文中部分描述屬於個人消化後的理解,僅供參考。 0. 前言 多元線性迴歸(Multivari

基於KNN分類演算法手寫數字識別的實現——構建KD樹

上一篇已經簡單粗暴的建立了一個KNN模型對手寫圖片進行了識別,所以本篇文章採用構造KD樹的方法實現手寫數字的識別。 (一)構造KD樹 構造KD樹的基本原理網上都有介紹,所以廢話不多說,直接上程式碼。 #Knn KD_Tree演算法 import math from

劍指Offer演算法題及答案Java完整版

16、請設計一個函式,用來判斷在一個矩陣中是否存在一條包含某字串所有字元的路徑,路徑可以從矩陣中的任意一個格子開始,每一步可以在矩陣中向左,向右,向上,向下移動一個格子。如果一條路徑經過了矩陣中的某一個格子,則之後不能再次進入這個格子。例如 a b c e s f c s a d e e 這樣的

Python+OGR庫學習:讀取向量檔案,複製特定屬性值並另存為shp檔案

程式碼思路: 1、匯入相關庫包,切換到當前資料夾 2、註冊驅動,開啟點向量檔案,獲取圖層 3、建立輸出檔案,並獲取圖層(沒有屬性定義) 4、定義輸出圖層欄位屬性:假設已知檔案所有屬性欄位定義(即ID和cover) (1)讀取輸入檔案中某一要素 (2)獲取ID、cover欄位定義 (3

機器學習——K均值聚類演算法K-means

概述: 1.聚類 “類”指的是具有相似性的集合。聚類是指將資料集劃分為若干類,使得類內之間的資料最為相識,各類之間的資料相似度差別儘可能大。聚類分析就是以相似性為基礎,對資料集進行聚類分析,屬於無監督學習。 2.無監督學習和監督學習 k-均值聚類(k-means)與k-近鄰(knn)

演算法學習Top K 演算法問題

參考學習結構之法,演算法之道 上次談論了尋找最小的k個數問題,如果反過來就是尋找最大的k個問題了。 Top K 題目描述:輸入n個整數,輸出其中最大的k個數 例如輸入1,2,3,4,5,6,7這個7個數,最大的三個數為5,6,7. 這和尋找最小的k

SDSoc學習:搭建平臺,使用EMIO亮LED

簡介     這是學習SDSoc的第二個入門實驗,通過EMIO點亮連線在PL上的8個LED。與上一個實驗不一樣,在這一個實驗中,由於ZedBoard平臺中沒有使能EMIO,因此想直接通過SDSoc編寫程式驅動MIO是不行的,所以這一個實驗需要自己搭建包含EMI

QT和opencv學習opencv的載入、顯示、修改、儲存影象

載入影象(用cv::imread) imread功能是載入影象檔案成為一個Mat物件,其中第一個引數表示影象檔名稱 第二個引數,表示載入的影象是什麼型別,支援常見的三個引數值 IMREAD_UNCHANGED (<0) 表示載入原圖,不做任何改變

TLD目標跟蹤演算法學習

  正如名字所示,TLD演算法主要由三個模組構成:追蹤器(tracker),檢測器(detector)和機器學習(learning)。   對於視訊追蹤來說,常用的方法有兩種,一是使用追蹤器根據物體在上一幀的位置預測它在下一幀的位置,但這樣會積累誤差,而且一旦物體在影象中

uc/os-II的記憶體改進與實現TLSF演算法的詳解,移植實現

上一節講到了TLSF的資料結構,下面繼續哈。 TLSF用兩個層次的分類對不同尺寸的記憶體塊進行分類。第一層次的類別目錄為2n,n為4,5,……,31的整數,稱為FLI(First-level Segregated Fit)。每一個FLI類別又根據第二層的SLI細分為2SLI

系統學習深度學習 --自編碼器,DA演算法,SDA,稀疏自編碼器

轉自:http://www.cnblogs.com/neopenx/p/4370350.html,作者寫的很好,輕鬆易懂。 起源:PCA、特徵提取.... 隨著一些奇怪的高維資料出現,比如影象、語音,傳統的統計學-機器學習方法遇到了前所未有的挑戰。 資料維度過高,資料單

OpenCV中feature2D學習——SIFTSURF運算元實現特徵提取與匹配

概述       之前的文章SURF和SIFT運算元實現特徵點檢測簡單地講了利用SIFT和SURF運算元檢測特徵點,在檢測的基礎上可以使用SIFT和SURF運算元對特徵點進行特徵提取並使用匹配函式進行特徵點的匹配。具體實現是首先採用SurfFeatureDetector檢測

opencv上gpu版surf特徵orb特徵提取及匹配例項

一、前言 本文主要實現了使用opencv裡的gpu版surf特徵檢測器和gpu版orb檢測器,分別對圖片進行特徵點提取及匹配,並對尋獲的特徵點進行了距離篩選,將匹配較為好的特徵點進行展示 二、實現程式碼 我不生產程式碼,我只是程式碼的搬運工和修改工 //main.cpp/