我的代碼運行良好,但是當它提取關鍵點時,它與兩個圖像匹配不佳。 在這裏你可以找到我的代碼,但我不知道如何繪製JAVA Android
在Android中與ORB匹配的錯誤
descriptors = new Mat();
keypoints = new MatOfKeyPoint();
detector = FeatureDetector.create(FeatureDetector.ORB);
detector.detect(img1, keypoints);
descriptor = DescriptorExtractor.create(DescriptorExtractor.ORB);
descriptor.compute(img1, keypoints, descriptors);
matcher = DescriptorMatcher.create(DescriptorMatcher.BRUTEFORCE_HAMMING);
ColorDetection.cvt_YUVtoRGBtoHSV(mYuv,mGraySubmat);
MatOfKeyPoint mKeyPoints = new MatOfKeyPoint();
MatOfDMatch matches = new MatOfDMatch();
detector.detect(mGraySubmat, mKeyPoints);
descriptor.compute(mGraySubmat, mKeyPoints, mIntermediateMat);
matcher.match(mIntermediateMat,descriptors,matches);
mIntermediateMat2.create(resultSize, CvType.CV_8UC1);
Features2d.drawMatches(img1, keypoints, mGraySubmat, mKeyPoints, matches,
mIntermediateMat2,GREEN, RED, MATCH_MASK, Features2d.NOT_DRAW_SINGLE_POINTS);
Imgproc.resize(mIntermediateMat2, mIntermediateMat2, mRgba.size());
Imgproc.cvtColor(mIntermediateMat2, mRgba, Imgproc.COLOR_RGBA2BGRA, 4);
Utils.matToBitmap(mRgba, bmp);
DMatch dm[] = matches.toArray();
List<Point> lp1 = new ArrayList<Point>(dm.length);
List<Point> lp2 = new ArrayList<Point>(dm.length);
KeyPoint tkp[] = keypoints.toArray();
KeyPoint qkp[] = mKeyPoints.toArray();
for (int i = 0; i < dm.length; i++) {
DMatch dma = dm[i];
lp1.add(tkp[dma.trainIdx].pt);
lp2.add(qkp[dma.queryIdx].pt);
}
MatOfPoint2f pointsPrev = new MatOfPoint2f(lp1.toArray(new Point[0]));
MatOfPoint2f pointsAct = new MatOfPoint2f(lp2.toArray(new Point[0]));
Log.i("pointsPrev", pointsPrev.size().toString());
Log.i("pointsAct", pointsAct.size().toString());
fundamental_matrix.create(resultSize, CvType.CV_8UC1);
fundamental_matrix = Calib3d.findFundamentalMat(
pointsAct, pointsPrev, Calib3d.FM_RANSAC, 3, 0.99);
任何建議很好匹配?
編輯:
我不能轉換火柴名單!因爲Feature2d.drawMatches()
需要MatOfDmatch
,而不是一個List<Dmatch>
MatOfDMatch matches, matches12, matches21;
matcher.match(descriptors1, descriptors2, matches12);
matcher.match(descriptors2, descriptors1, matches21);
iterate matches12
DMatch forward = matches12[i];
DMatch backward = matches21[forward.trainIdx];
if(backward.trainIdx == forward.queryIdx)
//add forward to matches
Features2d.drawMatches(img1, keypoints, mGraySubmat, mKeyPoints, matches,mIntermediateMat2);
你能否修復代碼的縮進? – 2013-03-21 09:57:18
此代碼用於使用ORB提取兩個圖像的關鍵點,目標是我想提取良好的匹配並繪製它 只是全部 – Mirlo 2013-03-21 10:38:10