我在Windows 7桌面上运行JBoss 6.1.0.Final.当我重新部署我的耳朵时,我总是得到这样的堆栈;
16:23:32,560 WARN [org.jboss.kernel.plugins.dependency.StartStopLifecycleAction] Error during stop for jboss-switchboard:appName=foretag-ear,module=foretag-ejb-4.0.0-SNAPSHOT,name=ArbetsstalleDAO: javax.naming.NameNotFoundException: ORB not bound
at org.jnp.server.NamingServer.getBinding(NamingServer.java:771) [:5.0.5.Final]
at org.jnp.server.NamingServer.getBinding(NamingServer.java:779) [:5.0.5.Final]
at org.jnp.server.NamingServer.unbind(NamingServer.java:349) [:5.0.5.Final]
at org.jnp.interfaces.NamingContext.unbind(NamingContext.java:873) [:5.0.5.Final]
at org.jboss.util.naming.Util.unbind(Util.java:151) [jboss-common-core.jar:2.2.17.GA]
at org.jboss.util.naming.Util.unbind(Util.java:141) [jboss-common-core.jar:2.2.17.GA]
at org.jboss.switchboard.mc.SwitchBoardImpl.unbindFromRelevantContext(SwitchBoardImpl.java:303) [:1.0.0-alpha-15]
at org.jboss.switchboard.mc.SwitchBoardImpl.stop(SwitchBoardImpl.java:102) [:1.0.0-alpha-15]
at sun.reflect.GeneratedMethodAccessor432.invoke(Unknown Source) [:1.6.0_34]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [:1.6.0_34]
at java.lang.reflect.Method.invoke(Method.java:597) [:1.6.0_34]
Run Code Online (Sandbox Code Playgroud)
这是一个警告,但我们相信它会因各种原因弄乱JNDI空间.我用谷歌搜索了这个,但没有找到太多有用的信息.一个建议是运行所有配置,但它也是与该配置相同的堆栈跟踪.任何想法或你认为我们真的可以忽略这个堆栈?
亲切的问候,
Jan Gifvars
我使用ORB功能检测器使用此代码查找两个图像之间的匹配:
FeatureDetector detector = FeatureDetector.create(FeatureDetector.ORB);
DescriptorExtractor descriptor = DescriptorExtractor.create(DescriptorExtractor.ORB);;
DescriptorMatcher matcher = DescriptorMatcher.create(DescriptorMatcher.BRUTEFORCE_HAMMING);
// First photo
Imgproc.cvtColor(img1, img1, Imgproc.COLOR_RGB2GRAY);
Mat descriptors1 = new Mat();
MatOfKeyPoint keypoints1 = new MatOfKeyPoint();
detector.detect(img1, keypoints1);
descriptor.compute(img1, keypoints1, descriptors1);
// Second photo
Imgproc.cvtColor(img2, img2, Imgproc.COLOR_RGB2GRAY);
Mat descriptors2 = new Mat();
MatOfKeyPoint keypoints2 = new MatOfKeyPoint();
detector.detect(img2, keypoints2);
descriptor.compute(img2, keypoints2, descriptors2);
// Matching
MatOfDMatch matches = new MatOfDMatch();
MatOfDMatch filteredMatches = new MatOfDMatch();
matcher.match(descriptors1, descriptors2, matches);
// Linking
Scalar RED = new Scalar(255,0,0);
Scalar GREEN = …Run Code Online (Sandbox Code Playgroud) 正如OpenCV 2.4.9.0中所知,这些特征检测器:SIFT, SURF, BRISK, FREAK, STAR, FAST, ORB.
所有这些都对CPU执行,但只FAST和ORBGPU上.http://docs.opencv.org/genindex.html
众所周知,有些是缩放/旋转不变的,但有些则不是:对于尺度不变特征提取,是否存在SURF和SIFT的快速替代方案?
这些是规模不变和旋转不变的:
但这些不是规模不变的,也不是旋转不变的:
是否有任何探测器在GPU上实现并且是缩放/旋转不变的?
或者将在GPU或OpenCL上的OpenCV 3.0中添加?
opencv feature-extraction computer-vision feature-detection orb
我正在尝试使用 open cv 创建一个基本的图像检测器。我正在使用 ORB,我尝试打开图像,然后尝试检测图像中的关键点。这是我的代码
import cv2
from cv2 import ORB
image1 = cv2.imread("original.jpg", cv2.IMREAD_GRAYSCALE)
orb = ORB()
# find the keypoints with ORB
kp = orb.detect(image1, None)
Run Code Online (Sandbox Code Playgroud)
但是,当我运行我的代码时,程序崩溃并出现以下错误
Process finished with exit code -1073741819 (0xC0000005)
Run Code Online (Sandbox Code Playgroud)
我搜索此错误,发现这是内存访问冲突,但我不知道哪里可能存在冲突?
我正在尝试创建一个C++程序,与一个输入图像相比,列表中有很多图像.我得到了整个工作,程序正在创建DMatch匹配.
现在我试图确定与源图像进行比较的图像列表中哪一个是最佳匹配.我首先尝试通过比较图像之间的匹配数来做到这一点,但问题是当生成的图像有很多关键点时; 他们也往往有很多比赛,至少在我的计划中.
那么如何确定哪个图像阵列与源图像最匹配?我正在使用此循环来确定匹配但它并不真正起作用:
vector< vector<DMatch> > filteredMatches;
vector<int> goodIds;
Ptr<DescriptorMatcher> matcher(new BFMatcher(NORM_HAMMING, false));
printf("bad matches: ");
for(size_t i = 0; i < images.size();i++){
vector<DMatch> matches, good_matches;
matcher->clear();
matcher->match(images[i], tex_des, matches);
if(matches.size() < 8){
printf("F%d,", (int)i + 1);
continue;
}
double min_dist = 100;
for(size_t j = 0; j < matches.size(); j++ ){
double dist = matches[j].distance;
if( dist < min_dist )
min_dist = dist;
}
if(min_dist > 50.0){
printf("D%d,", (int)i + 1);
continue;
}
double good_dist = …Run Code Online (Sandbox Code Playgroud) 我正在进行图像处理.我想匹配2D功能,我在SURF,SIFT,ORB上做了很多测试.
如何在OpenCV中对SURF/SIFT/ORB应用RANSAC?
当我在OpenCV中使用BRISK进行特征检测和描述时,我遇到了性能问题.
基本上我尝试匹配从这个图像得到的所有描述符:
我使用基于flann匹配器的LSH算法和BRISK进行特征检测和描述,从图像数据库中获取所有描述符.
我的图像数据库由242个图像组成.在该242个图像中,存在与在上述"复杂"图像查询中分别拍摄的每个对象相对应的三个图像.
以下是用于BRISK检测的参数(默认opencv参数):Treshold:30,Octaves:4,Pattern scale:1.0.
在使用最佳匹配技术进行flann匹配之后(图像查询中的每个描述符与数据库描述符集中最近的邻域相关联),我的算法输出按匹配百分比排序的数据库图像列表.以下是四个第一个结果:
我使用ORB作为特征检测和描述来比较这些结果.以下是使用的参数:特征数量:2000,比例因子:1.2,金字塔等级数量:8.
以下是我得到的结果:
正如您所看到的,ORB的结果要好得多.首先,在数据库中的每个图像上检测到更多的关键点,并且匹配的百分比对于好的对象明显更好.此外,良好对象的匹配百分比与错误对象的匹配百分比之间的差距更为显着.
我想知道为什么BRISK探测器检测到的关键点比ORB探测器少得多.我已经做了不同的测试来弄清楚如何用BRISK探测器探测更多的关键点(降低阈值,减少八度数).我确实可以检测到更多的关键点,但与ORB检测器的差异仍然非常重要.你知道为什么BRISK探测器有这样的行为吗?
我的OpenCV版本是2.4.8,但我根据这些声明尝试了2.4.4和2.4.9版本的BRISK检测部分:
http://code.opencv.org/issues/2491和BRISK特征检测器检测到零关键点而没有改进.
我还尝试将ORB检测器与BRISK描述相结合.匹配结果优于第一种方法(完全BRISK),但比第二种方法(完整ORB)更差:
请注意,在方法2和方法3中,每个图像上检测到的关键点数量并不相同.实际上,当我在测试图像上运行此代码时(此处为螺栓图像):
// BRISK parameters
int Threshl=30;
int Octaves=4;
float PatternScales=1.0f;
// ORB parameters
int nFeatures=2000;
float scaleFactor=1.2f;
int nLevels=8;
BRISK BRISKD(Threshl, Octaves, PatternScales);
ORB ORBD(nFeatures, scaleFactor, nLevels);
vector<KeyPoint> …Run Code Online (Sandbox Code Playgroud) 我正在 Python 中使用 OpenCV 来制作给定图像的特征描述符。为此,我正在使用ORB类。我不明白的是描述符数组在使用orb.detect和orb.compute方法之后包含什么。
下面是我的代码。
import cv2
from matplotlib import pyplot as plt
from sklearn.cluster import KMeans
img = cv2.imread('penguins.jpg',0)
# Initiate STAR detector
orb = cv2.ORB_create(nfeatures=1000)
# find the keypoints with ORB
kp = orb.detect(img,None)
# compute the descriptors with ORB
kp, des = orb.compute(img, kp)
# draw only keypoints location,not size and orientation
img2 = cv2.drawKeypoints(img,kp,des, color=(0,255,0), flags=0, )
plt.imshow(img2),plt.show()
print len(kp),len(des),len(des[1]), des[0]
Run Code Online (Sandbox Code Playgroud)
最后一行的输出如下:
1000 1000 32 [221 65 79 237 …Run Code Online (Sandbox Code Playgroud) 我正在使用 OpenCV 2.4.9 的 ORB 算法和 Python 来比较图像。ORB 算法不会以百分比形式返回相似度分数。有没有办法做到这一点?
我使用 ORB 比较图像的代码如下
img1 = cv2.imread("img11.jpg",0)
img2 = cv2.imread("img2.jpg",0)
# Initiate ORB detector
orb = cv2.ORB()
# find the keypoints and descriptors with ORB
kp1, des1 = orb.detectAndCompute(img1,None)
kp2, des2 = orb.detectAndCompute(img2,None)
# create BFMatcher object
bf = cv2.BFMatcher(cv2.NORM_HAMMING)
matches = bf.knnMatch(des1, trainDescriptors = des2, k = 2)
good = []
for m,n in matches:
if m.distance < 0.75*n.distance:
good.append([m])
if len(good) > 20:
print "similar image"
Run Code Online (Sandbox Code Playgroud)
我确实在 Stack Overflow 上找到了一个解决方案,可以使用 …
我正在尝试使用 OpenCV 从图像中检测和提取 ORB 特征。
但是,我得到的图像没有标准化(不同的大小、不同的分辨率等......)。
我想知道在提取 ORB 特征之前是否需要标准化我的图像,以便能够在图像之间匹配它们?
我知道特征检测是尺度不变的,但我不确定它对图像分辨率意味着什么(例如,2 个相同大小的图像,1 个对象靠近,另一个对象很远应该导致匹配,即使如果它们在图像上具有不同的比例,但是如果图像的大小不同怎么办?)。
我是否应该根据图像大小调整来自 ORB 的 patchSize(例如,如果我有一个 800px 的图像并采用 20px 的 patchSize,我应该为 400px 的图像采用 10px 的 patchSize 吗?)。
谢谢你。
更新: 我用高分辨率和低分辨率图像测试了不同的算法(ORB、SURF 和 SIFT)以查看它们的行为。在此图像中,对象大小相同,但图像分辨率不同:
我们可以看到 SIFT 非常稳定,尽管它的功能很少。SURF 在关键点和特征尺度方面也非常稳定。所以我的猜测是使用 SIFT 和 SURF 的低分辨率和高分辨率图像之间的特征匹配会起作用,但是 ORB 在低分辨率中有更大的特征,因此描述符与高分辨率图像中的特征不匹配。
(在高分辨率和低分辨率特征提取之间使用了相同的参数)。
所以我的猜测是,如果我们想在不同分辨率的图像之间进行匹配,最好使用 SIFT 或 SURF。