Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 匹配畸形描述词的最佳方法?_Java_Opencv_Matching_Freak - Fatal编程技术网

Java 匹配畸形描述词的最佳方法?

Java 匹配畸形描述词的最佳方法?,java,opencv,matching,freak,Java,Opencv,Matching,Freak,所以我用快速检测器和畸形描述符做了一个应用。当谈到匹配时,我想使用BRUTEFORCE_HAMMING匹配,但我没有得到预期的结果(提供更多与原始图像无关的匹配,然后是看起来相似的图像) 我尝试了以下代码 MatOfDMatch matches = new MatOfDMatch(); matcher = DescriptorMatcher.create(DescriptorMatcher.BRUTEFORCE_HAMMING); matcher.match(

所以我用快速检测器和畸形描述符做了一个应用。当谈到匹配时,我想使用BRUTEFORCE_HAMMING匹配,但我没有得到预期的结果(提供更多与原始图像无关的匹配,然后是看起来相似的图像)

我尝试了以下代码

 MatOfDMatch matches = new MatOfDMatch();

        matcher = DescriptorMatcher.create(DescriptorMatcher.BRUTEFORCE_HAMMING);
        matcher.match(descriptors,descriptors1,matches);
        MatOfDMatch goedematches = new MatOfDMatch();

        double max_dist = 0;
        double min_dist = 100;
        //if (descriptors.cols() == descriptors1.cols())
        //{
        for( int i = 0; i < descriptors.rows(); i++ )
        { double dist = matches.toArray()[i].distance;
          if( dist < min_dist ) min_dist = dist;
          if( dist > max_dist ) max_dist = dist;
        }
        // should only draw good matches
       for( int i = 0; i < descriptors.rows(); i++ )
        {  MatOfDMatch temp = new MatOfDMatch();
           if( matches.toArray()[i].distance <= 2*min_dist )
           {   temp.fromArray(matches.toArray()[i]);
               goedematches.push_back(temp); 
               }        
       // }
        }

       Log.d("LOG!", "Number of good matches= " + goedematches.size());
MatOfDMatch matches=new MatOfDMatch();
matcher=DescriptorMatcher.create(DescriptorMatcher.BRUTEFORCE_HAMMING);
匹配(描述符,描述符1,匹配);
MatOfDMatch GoedMatches=新的MatOfDMatch();
双最大距离=0;
双最小距离=100;
//if(descriptors.cols()==descriptors1.cols())
//{
for(int i=0;i最大距离)最大距离=距离;
}
//应该只吸引好的对手
for(int i=0;i如果(matches.toArray()[i].distance拥有描述符后,蛮力方法将为您提供可能找到的最接近的对应关系,因为它尝试将第一个图像上的描述符与第二个图像的所有描述符进行匹配

所以答案是否定的:对于畸形描述符,你能得到的最好结果(w.r.t汉明距离)是你通过蛮力匹配得到的结果


(这就是说,当图像相似时,您应该会得到很多好匹配和坏匹配。您是否尝试过绘制匹配?尝试在匹配之间绘制线条,而不使用过滤步骤

如果你检查的是图像的重复性,我建议你使用汉明距离为
10
BRISK
算法。我在我的中使用了这个算法,我开发了一个可以帮助你找到所需的最佳算法。也许你也可以升级我设计的匹配类型的工具。

你可能会变得很糟糕结果是因为畸形本身不是旋转和缩放不变的。 试着在这些关键点周围使用轻快的关键点检测和反常描述符


如果将描述符mat设置为null,JavaCV允许您使用BRISK关键点检测。

我知道如何为两个图像绘制关键点,但不知道如何连接它们。知道如何做到这一点吗?在矩阵中相邻绘制两个图像,例如,在点之间绘制线(cv::line)。