- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我最近开始在Android Studio上开发应用程序,而我刚完成编写代码。我获得的精度令人满意,但设备花费的时间很多。 {}我遵循了一些有关如何在android studio上监视性能的教程,我发现我的代码的一小部分花了 6秒,这是我的应用显示整个结果所花费的时间的一半。我在OpenCV / JavaCV上看到过很多Java OpenCV - extracting good matches from knnMatch,OpenCV filtering ORB matches的帖子,但是没有人问过这个问题。 OpenCV链接http://docs.opencv.org/2.4/doc/tutorials/features2d/feature_homography/feature_homography.html确实提供了很好的教程,但是与C++相比,OpenCV中的RANSAC函数采用不同的关键点参数。
这是我的代码
public Mat ORB_detection (Mat Scene_image, Mat Object_image){
/*This function is used to find the reference card in the captured image with the help of
* the reference card saved in the application
* Inputs - Captured image (Scene_image), Reference Image (Object_image)*/
FeatureDetector orb = FeatureDetector.create(FeatureDetector.DYNAMIC_ORB);
/*1.a Keypoint Detection for Scene Image*/
//convert input to grayscale
channels = new ArrayList<Mat>(3);
Core.split(Scene_image, channels);
Scene_image = channels.get(0);
//Sharpen the image
Scene_image = unsharpMask(Scene_image);
MatOfKeyPoint keypoint_scene = new MatOfKeyPoint();
//Convert image to eight bit, unsigned char
Scene_image.convertTo(Scene_image, CvType.CV_8UC1);
orb.detect(Scene_image, keypoint_scene);
channels.clear();
/*1.b Keypoint Detection for Object image*/
//convert input to grayscale
Core.split(Object_image,channels);
Object_image = channels.get(0);
channels.clear();
MatOfKeyPoint keypoint_object = new MatOfKeyPoint();
Object_image.convertTo(Object_image, CvType.CV_8UC1);
orb.detect(Object_image, keypoint_object);
//2. Calculate the descriptors/feature vectors
//Initialize orb descriptor extractor
DescriptorExtractor orb_descriptor = DescriptorExtractor.create(DescriptorExtractor.ORB);
Mat Obj_descriptor = new Mat();
Mat Scene_descriptor = new Mat();
orb_descriptor.compute(Object_image, keypoint_object, Obj_descriptor);
orb_descriptor.compute(Scene_image, keypoint_scene, Scene_descriptor);
//3. Matching the descriptors using Brute-Force
DescriptorMatcher brt_frc = DescriptorMatcher.create(DescriptorMatcher.BRUTEFORCE_HAMMING);
MatOfDMatch matches = new MatOfDMatch();
brt_frc.match(Obj_descriptor, Scene_descriptor, matches);
//4. Calculating the max and min distance between Keypoints
float max_dist = 0,min_dist = 100,dist =0;
DMatch[] for_calculating;
for_calculating = matches.toArray();
for( int i = 0; i < Obj_descriptor.rows(); i++ )
{ dist = for_calculating[i].distance;
if( dist < min_dist ) min_dist = dist;
if( dist > max_dist ) max_dist = dist;
}
System.out.print("\nInterval min_dist: " + min_dist + ", max_dist:" + max_dist);
//-- Use only "good" matches (i.e. whose distance is less than 2.5*min_dist)
LinkedList<DMatch> good_matches = new LinkedList<DMatch>();
double ratio_dist=2.5;
ratio_dist = ratio_dist*min_dist;
int i, iter = matches.toArray().length;
matches.release();
for(i = 0;i < iter; i++){
if (for_calculating[i].distance <=ratio_dist)
good_matches.addLast(for_calculating[i]);
}
System.out.print("\n done Good Matches");
/*Necessary type conversion for drawing matches
MatOfDMatch goodMatches = new MatOfDMatch();
goodMatches.fromList(good_matches);
Mat matches_scn_obj = new Mat();
Features2d.drawKeypoints(Object_image, keypoint_object, new Mat(Object_image.rows(), keypoint_object.cols(), keypoint_object.type()), new Scalar(0.0D, 0.0D, 255.0D), 4);
Features2d.drawKeypoints(Scene_image, keypoint_scene, new Mat(Scene_image.rows(), Scene_image.cols(), Scene_image.type()), new Scalar(0.0D, 0.0D, 255.0D), 4);
Features2d.drawMatches(Object_image, keypoint_object, Scene_image, keypoint_scene, goodMatches, matches_scn_obj);
SaveImage(matches_scn_obj,"drawing_good_matches.jpg");
*/
if(good_matches.size() <= 6){
ph_value = "7";
System.out.println("Wrong Detection");
return Scene_image;
}
else{
//5. RANSAC thresholding for finding the optimum homography
Mat outputImg = new Mat();
LinkedList<Point> objList = new LinkedList<Point>();
LinkedList<Point> sceneList = new LinkedList<Point>();
List<org.opencv.core.KeyPoint> keypoints_objectList = keypoint_object.toList();
List<org.opencv.core.KeyPoint> keypoints_sceneList = keypoint_scene.toList();
//getting the object and scene points from good matches
for(i = 0; i<good_matches.size(); i++){
objList.addLast(keypoints_objectList.get(good_matches.get(i).queryIdx).pt);
sceneList.addLast(keypoints_sceneList.get(good_matches.get(i).trainIdx).pt);
}
good_matches.clear();
MatOfPoint2f obj = new MatOfPoint2f();
obj.fromList(objList);
objList.clear();
MatOfPoint2f scene = new MatOfPoint2f();
scene.fromList(sceneList);
sceneList.clear();
float RANSAC_dist=(float)2.0;
Mat hg = Calib3d.findHomography(obj, scene, Calib3d.RANSAC, RANSAC_dist);
for(i = 0;i<hg.cols();i++) {
String tmp = "";
for ( int j = 0; j < hg.rows(); j++) {
Point val = new Point(hg.get(j, i));
tmp= tmp + val.x + " ";
}
}
Mat scene_image_transformed_color = new Mat();
Imgproc.warpPerspective(original_image, scene_image_transformed_color, hg, Object_image.size(), Imgproc.WARP_INVERSE_MAP);
processing(scene_image_transformed_color, template_match);
return outputImg;
}
} }
LinkedList<DMatch> good_matches = new LinkedList<DMatch>();
double ratio_dist=2.5;
ratio_dist = ratio_dist*min_dist;
int i, iter = matches.toArray().length;
matches.release();
for(i = 0;i < iter; i++){
if (for_calculating[i].distance <=ratio_dist)
good_matches.addLast(for_calculating[i]);
}
System.out.print("\n done Good Matches");}
最佳答案
因此,问题在于logcat给了我错误的计时结果。滞后是由于代码后面的巨大高斯模糊。我使用System.out.print
而不是System.currentTimeMillis
,向我展示了该错误。
关于android - 使用ORB和RANSAC的OpenCV中用于Android关键点匹配和阈值的性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39039760/
问题:ORB.destroy() 无法正确清理,ORB 对象实例不会被垃圾回收。 此问题是在 JDK5 中提出的,并在此处记录的后续版本中修复 http://bugs.java.com/view_bu
此问题涉及:Is it possible to have several ORB objects in the same process? 所以,多亏了@BrianKelly,我找到了有关 ORB 标
我有一个 C++ CORBA 服务器,它实现了一个抛出用户定义异常的接口(interface)。 当客户端和服务器都用 C++ 实现时(使用 TAO orb 和omniORB 进行测试),我可以轻松捕
诚然,我是 CORBA 和 ORB 的新手。我有一些代码安装在使用 TAO ORB 版本 1.3 的第 3 方计算机上。当我的代码调用时: String myObjectString = "IOR:0
我想从属性文件初始化我的 ORB(通常我像这样初始化它,同时运行我的示例: ./app -ORBInitRef NameService=corbaloc::localhost:2809/NameSer
我需要对我的机器人进行编程,以便它能够找到被要求拾取的物体并将其带到指定位置。我尝试过简单的 img 处理技术,例如过滤、轮廓查找。这似乎效果不佳。我想使用 ORB 特征提取器。这是一个示例图像。感兴
我正在使用 Open CV 进行一个无标记的增强现实项目。目前我正在使用 ORB 来检测特征和增强 3D 对象。到目前为止,模型增强得很好,但增强并不像预期的那样顺利。增强型 3D 模型很紧张。 有哪
我有一个程序可以从 RSTP 获取视频源并检查对象。唯一的问题是物体需要距离摄像头大约 6 英寸,但当我使用有线网络摄像头时,物体可能在几英尺远。两个摄像头都以相同的分辨率传输,是什么导致了这个问题?
我正在尝试使用 OpenCV 从图像中检测和提取 ORB 特征。 但是,我得到的图像没有标准化(不同尺寸、不同分辨率等...)。 我想知道在提取 ORB 特征之前是否需要规范化我的图像以便能够跨图像匹
我有一个 orbd 在虚拟主机(IP A)上启动,并注册了一些远程对象。托管虚拟盒子的盒子有 IP B。当客户端尝试连接到位于 A 的 ORB 以获取 NamingContext 时,ORB 使用指向
我不确定我是否正确理解什么是开源。我在这里搜索以找到答案,但没有找到有人问类似的问题。 我如何在文件“features.hpp”中看到“检测”功能的源代码。 我正在寻找算法ORB的数学计算。 所有人都
我的项目是基于android的草药识别。我使用 ORB 来获取关键点、特征和匹配特征。 我想使用这个算法: 我使用 4 个引用图像,并将它们的特征 image1 与 image1、1-2、1-3、1-
我想知道 orb 特征检测器的参数。我将它用作关键点提取器和描述符。作为匹配器,我使用 BFMatcher。 目前我是这样使用的: ORB orb(25, 1.0f, 2, 10, 0, 2, 0,
我使用 ORBacus .我有一个多线程应用程序,我想在同一进程中有多个 ORB 对象。这个想法是:每个线程都有自己的 ORB 并连接到不同服务器。 这可能吗?如果是 - 如何? “你试过什么?”:我
我有一个棘手的问题。作为 CORBA 的新手,我无法摆脱它。 如何从另一个实现实例化一个实现对象? 通常,如果我有一个接口(interface) A,我会创建一个 A_Impl 类(在 A_Impl.
我在 Python 中使用 OpenCV 来制作给定图像的特征描述符。为此,我正在使用 ORB 类。我不明白的是在使用 orb.detect 和 orb.compute 之后描述符数组包含什么方法。
我无法弄清楚 ORB 算法输出中的关键点在 OpenCV 中是如何排名的。 通过在一些样本上进行测试,我知道它不是按帧上的位置,而且我认为它不是按算法分配给每个关键点的分数。 我的目标是根据分数对关键
我正在开发一个特征跟踪应用程序,到目前为止,在尝试了几乎所有的特征检测器/描述符之后,我使用 ORB 获得了最令人满意的总体结果。我的特征描述符和检测器都是 ORB。 我正在选择一个特定区域来检测源图
大家好 :) 我只是 openCV 的初学者。 我一直在尝试使用 ORB 开发跟踪程序。我只想在检测到的对象周围绘制矩形。 这是一部分 result的跟踪程序。 “黑车”是我要跟踪的(感兴趣的对象)。
我最近在 opencv 的 ORB 中发现了一些非常奇怪的行为描述符。 cv::Mat grey; //greyscale image std::vector keypoints; cv::Mat d
我是一名优秀的程序员,十分优秀!