对于我的硕士论文,我正在对SIFT SURF en FAST算法进行一些测试,以便在智能手机上进行徽标检测.
当我只是检测时间,描述匹配某些方法时,我得到以下结果.
对于SURF检测器和SURF描述符:
找到180个关键点
1,994秒关键点计算时间(SURF)
4,516秒描述时间(SURF)
0.282秒匹配时间(SURF)
当我使用FAST探测器代替SURF探测器时
找到319个关键点
0.023秒关键点计算时间(FAST)
1.295秒描述时间(SURF)
0.397秒匹配时间(SURF)
FAST探测器比SURF探测器快得多,甚至可以检测到几乎两倍的关键点快100倍.这些结果是可以预测的.
但下一步不是预测结果.对于319个FAST关键点然后使用180个SURF关键点,de SURF描述符的速度有多快?
据我所知,描述与检测算法无关......但这些结果并不像预测的那样.
有谁知道这是可能的吗?
这是代码:
FeatureDetector detector = FeatureDetector.create(FeatureDetector.SURF);
//FeatureDetector detector = FeatureDetector.create(FeatureDetector.FAST);
Imgproc.cvtColor(image1, image1, Imgproc.COLOR_RGBA2RGB);
Imgproc.cvtColor(image2, image2, Imgproc.COLOR_RGBA2RGB);
DescriptorExtractor SurfExtractor = DescriptorExtractor
.create(DescriptorExtractor.SURF);
//extract keypoints
long time= System.currentTimeMillis();
detector.detect(image1, keypoints);
Log.d("LOG!", "number of query Keypoints= " + keypoints.size());
detector.detect(image2, logoKeypoints);
Log.d("LOG!", "number of logo Keypoints= " + logoKeypoints.size());
Log.d("LOG!", "keypoint calculation time elapsed" + (System.currentTimeMillis() -time));
//Descript keypoints
long time2 = System.currentTimeMillis();
Mat …Run Code Online (Sandbox Code Playgroud) 目前我正在使用OpenCV来比较两个图像,看看它们在Android中是否相似.我正在使用ORB特征检测器和描述符提取器.这是我到目前为止所拥有的.我找到第一张图像中的所有特征关键点,然后找到第二张图像中的所有特征关键点.然后我找到这些关键点的描述符,然后在两个图像之间进行匹配.
private void matchImages() {
Mat refMat = new Mat();
Mat srcMat = new Mat();
Bitmap refBitmap = ((BitmapDrawable) mRefImg.getDrawable()).getBitmap();
Bitmap srcBitmap = ((BitmapDrawable) mSrcImg.getDrawable()).getBitmap();
Utils.bitmapToMat(refBitmap, refMat);
Utils.bitmapToMat(srcBitmap, srcMat);
MatOfDMatch matches = new MatOfDMatch();
MatOfDMatch goodMatches = new MatOfDMatch();
LinkedList<DMatch> listOfGoodMatches = new LinkedList<>();
LinkedList<Point> refObjectList = new LinkedList<>();
LinkedList<Point> srcObjectList = new LinkedList<>();
MatOfKeyPoint refKeypoints = new MatOfKeyPoint();
MatOfKeyPoint srcKeyPoints = new MatOfKeyPoint();
Mat refDescriptors = new Mat();
Mat srcDescriptors = new Mat();
MatOfPoint2f reference = new MatOfPoint2f();
MatOfPoint2f …Run Code Online (Sandbox Code Playgroud) 我想将当前 imageView 与 R.drawable 中的图像进行比较。我想我已经尝试了一切,但我无法解决这个问题。我尝试了堆栈溢出的所有方法。
XML:
<ImageView
android:layout_width="match_parent"
android:src="@drawable/red"
android:id="@+id/imageview1"
android:clickable="true"
android:layout_height="match_parent" />
Run Code Online (Sandbox Code Playgroud)
安卓:
final ImageView test = (ImageView) findViewById(R.id.imageview1);
test.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//if(test.getResources().equals(R.drawable.red))
//if(test.getDrawable().equals(R.drawable.red))
if(test.getDrawable().getConstantState().equals(getResources().getDrawable(R.drawable.red).getConstantState()))
{
Toast.makeText(getApplicationContext(), "work", Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(getApplicationContext(), "not work", Toast.LENGTH_SHORT).show();
}
}
});
Run Code Online (Sandbox Code Playgroud)