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學習——SIFT和SURF運算元實現特徵點提取與匹配
概述 之前的文章SURF和SIFT運算元實現特徵點檢測簡單地講了利用SIFT和SURF運算元檢測特徵點,在檢測的基礎上可以使用SIFT和SURF運算元對特徵點進行特徵提取並使用匹配函式進行特徵點的匹配。具體實現是首先採用SurfFeatureDetector檢測
opencv上gpu版surf特徵點與orb特徵點提取及匹配例項
一、前言 本文主要實現了使用opencv裡的gpu版surf特徵檢測器和gpu版orb檢測器,分別對圖片進行特徵點提取及匹配,並對尋獲的特徵點進行了距離篩選,將匹配較為好的特徵點進行展示 二、實現程式碼 我不生產程式碼,我只是程式碼的搬運工和修改工 //main.cpp/