Implemented read/write methods for BriefDescriptorExtractor class
authorAndrey Kamaev <no@email>
Thu, 4 Aug 2011 09:56:10 +0000 (09:56 +0000)
committerAndrey Kamaev <no@email>
Thu, 4 Aug 2011 09:56:10 +0000 (09:56 +0000)
modules/features2d/include/opencv2/features2d/features2d.hpp
modules/features2d/src/brief.cpp
modules/java/android_test/src/org/opencv/test/features2d/BRIEFDescriptorExtractorTest.java
modules/java/android_test/src/org/opencv/test/features2d/SURFDescriptorExtractorTest.java

index 16d7e80..548b8c0 100644 (file)
@@ -2052,6 +2052,9 @@ public:
     // bytes is a length of descriptor in bytes. It can be equal 16, 32 or 64 bytes.
     BriefDescriptorExtractor( int bytes = 32 );
 
+    virtual void read( const FileNode& );
+    virtual void write( FileStorage& ) const;
+
     virtual int descriptorSize() const;
     virtual int descriptorType() const;
 
index bde3127..29b5148 100644 (file)
@@ -188,6 +188,31 @@ int BriefDescriptorExtractor::descriptorType() const
     return CV_8UC1;
 }
 
+void BriefDescriptorExtractor::read( const FileNode& fn)
+{
+    int descriptorSize = fn["descriptorSize"];
+    switch (descriptorSize)
+    {
+        case 16:
+            test_fn_ = pixelTests16;
+            break;
+        case 32:
+            test_fn_ = pixelTests32;
+            break;
+        case 64:
+            test_fn_ = pixelTests64;
+            break;
+        default:
+            CV_Error(CV_StsBadArg, "descriptorSize must be 16, 32, or 64");
+    }
+    bytes_ = descriptorSize;
+}
+
+void BriefDescriptorExtractor::write( FileStorage& fs) const
+{
+    fs << "descriptorSize" << bytes_;
+}
+
 void BriefDescriptorExtractor::computeImpl(const Mat& image, std::vector<KeyPoint>& keypoints, Mat& descriptors) const
 {
     // Construct integral image for fast smoothing (box filter)
index 1244a06..c7eeb71 100644 (file)
@@ -69,27 +69,20 @@ public class BRIEFDescriptorExtractorTest extends OpenCVTestCase {
     }
 
     public void testRead() {
-        KeyPoint point = new KeyPoint(55.775577545166016f, 44.224422454833984f, 16, 9.754629f, 8617.863f, 1, -1);
-        List<KeyPoint> keypoints = Arrays.asList(point);
-        Mat img = getTestImg();
-        Mat descriptors = new Mat();
-
         String filename = OpenCVTestRunner.getTempFileName("yml");
-        writeFile(filename, "%YAML:1.0\nnOctaves: 4\nnOctaveLayers: 2\nextended: 1\nupright: 0\n");
+        writeFile(filename, "%YAML:1.0\ndescriptorSize: 64\n");
 
         extractor.read(filename);
 
-        extractor.compute(img, keypoints, descriptors);
-        assertEquals(128, descriptors.cols());
+        assertEquals(64, extractor.descriptorSize());
     }
 
     public void testWrite() {
         String filename = OpenCVTestRunner.getTempFileName("xml");
 
         extractor.write(filename);
-        //OpenCVTestRunner.Log("!!!!!!!" + readFile(filename));
 
-        String truth = "<?xml version=\"1.0\"?>\n<opencv_storage>!!!!\n</opencv_storage>\n";
+        String truth = "<?xml version=\"1.0\"?>\n<opencv_storage>\n<descriptorSize>32</descriptorSize>\n</opencv_storage>\n";
         assertEquals(truth, readFile(filename));
     }
 
@@ -97,9 +90,8 @@ public class BRIEFDescriptorExtractorTest extends OpenCVTestCase {
         String filename = OpenCVTestRunner.getTempFileName("yml");
 
         extractor.write(filename);
-        //OpenCVTestRunner.Log("!!!!!!!" + readFile(filename));
 
-        String truth = "%YAML:1.0\n!!!";
+        String truth = "%YAML:1.0\ndescriptorSize: 32\n";
         assertEquals(truth, readFile(filename));
     }
 
index 3a5b215..f913580 100644 (file)
@@ -72,18 +72,12 @@ public class SURFDescriptorExtractorTest extends OpenCVTestCase {
     }
 
     public void testRead() {
-        KeyPoint point = new KeyPoint(55.775577545166016f, 44.224422454833984f, 16, 9.754629f, 8617.863f, 1, -1);
-        List<KeyPoint> keypoints = Arrays.asList(point);
-        Mat img = getTestImg();
-        Mat descriptors = new Mat();
-
         String filename = OpenCVTestRunner.getTempFileName("yml");
         writeFile(filename, "%YAML:1.0\nnOctaves: 4\nnOctaveLayers: 2\nextended: 1\nupright: 0\n");
 
         extractor.read(filename);
 
-        extractor.compute(img, keypoints, descriptors);
-        assertEquals(128, descriptors.cols());
+        assertEquals(128, extractor.descriptorSize());
     }
 
     public void testWrite() {