Implemented read/write methods for BriefDescriptorExtractor class

This commit is contained in:
Andrey Kamaev 2011-08-04 09:56:10 +00:00
parent 28732d4300
commit 13185ad8f7
4 changed files with 33 additions and 19 deletions

View 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;

View 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)

View 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));
}

View 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() {