Commit f7c30998 authored by GilLevi's avatar GilLevi

cleaned the code a bit

parent e2dfa357
...@@ -76,7 +76,7 @@ namespace cv ...@@ -76,7 +76,7 @@ namespace cv
protected: protected:
typedef void(*PixelTestFn)(const Mat& input_image, const std::vector<KeyPoint>& keypoints, OutputArray, const std::vector<int> &points, bool rotationInvariance, int half_ssd_size); typedef void(*PixelTestFn)(const Mat& input_image, const std::vector<KeyPoint>& keypoints, OutputArray, const std::vector<int> &points, bool rotationInvariance, int half_ssd_size);
void setSamplingPoints();
int bytes_; int bytes_;
PixelTestFn test_fn_; PixelTestFn test_fn_;
bool rotationInvariance_; bool rotationInvariance_;
...@@ -432,7 +432,86 @@ namespace cv ...@@ -432,7 +432,86 @@ namespace cv
default: default:
CV_Error(Error::StsBadArg, "descriptorSize must be 1,2, 4, 8, 16, 32, or 64"); CV_Error(Error::StsBadArg, "descriptorSize must be 1,2, 4, 8, 16, 32, or 64");
} }
int sampling_points_arr[3072]= { 13, -6, 19, 19, 23, -4,
setSamplingPoints();
}
int LATCHDescriptorExtractorImpl::descriptorSize() const
{
return bytes_;
}
int LATCHDescriptorExtractorImpl::descriptorType() const
{
return CV_8UC1;
}
int LATCHDescriptorExtractorImpl::defaultNorm() const
{
return NORM_HAMMING;
}
void LATCHDescriptorExtractorImpl::read(const FileNode& fn)
{
int dSize = fn["descriptorSize"];
switch (dSize)
{
case 1:
test_fn_ = pixelTests1;
break;
case 2:
test_fn_ = pixelTests2;
break;
case 4:
test_fn_ = pixelTests4;
break;
case 8:
test_fn_ = pixelTests8;
break;
case 16:
test_fn_ = pixelTests16;
break;
case 32:
test_fn_ = pixelTests32;
break;
case 64:
test_fn_ = pixelTests64;
break;
default:
CV_Error(Error::StsBadArg, "descriptorSize must be 1,2, 4, 8, 16, 32, or 64");
}
bytes_ = dSize;
}
void LATCHDescriptorExtractorImpl::write(FileStorage& fs) const
{
fs << "descriptorSize" << bytes_;
}
void LATCHDescriptorExtractorImpl::compute(InputArray image,
std::vector<KeyPoint>& keypoints,
OutputArray descriptors)
{
Mat grayImage;
GaussianBlur(image, grayImage, cv::Size(3, 3), 2, 2);
if (image.type() != CV_8U) cvtColor(image, grayImage, COLOR_BGR2GRAY);
//Remove keypoints very close to the border
KeyPointsFilter::runByImageBorder(keypoints, image.size(), PATCH_SIZE / 2 + half_ssd_size_);
descriptors.create((int)keypoints.size(), bytes_, CV_8U);
test_fn_(grayImage, keypoints, descriptors, sampling_points_, rotationInvariance_, half_ssd_size_);
}
void LATCHDescriptorExtractorImpl::setSamplingPoints(){
int sampling_points_arr[]= { 13, -6, 19, 19, 23, -4,
4, 16, 24, -11, 4, -21, 4, 16, 24, -11, 4, -21,
22, -14, -2, -20, 23, 5, 22, -14, -2, -20, 23, 5,
17, -10, 2, 10, 14, -18, 17, -10, 2, 10, 14, -18,
...@@ -945,82 +1024,8 @@ namespace cv ...@@ -945,82 +1024,8 @@ namespace cv
-19, 20, -11, -2, -20, -24, -19, 20, -11, -2, -20, -24,
11, -12, 5, -21, -2, -13}; 11, -12, 5, -21, -2, -13};
sampling_points_.assign(&sampling_points_arr[0],&sampling_points_arr[0]+3072); sampling_points_.assign(&sampling_points_arr[0],&sampling_points_arr[0]+sizeof(sampling_points_arr)/4); }
}
int LATCHDescriptorExtractorImpl::descriptorSize() const
{
return bytes_;
}
int LATCHDescriptorExtractorImpl::descriptorType() const
{
return CV_8UC1;
}
int LATCHDescriptorExtractorImpl::defaultNorm() const
{
return NORM_HAMMING;
}
void LATCHDescriptorExtractorImpl::read(const FileNode& fn)
{
int dSize = fn["descriptorSize"];
switch (dSize)
{
case 1:
test_fn_ = pixelTests1;
break;
case 2:
test_fn_ = pixelTests2;
break;
case 4:
test_fn_ = pixelTests4;
break;
case 8:
test_fn_ = pixelTests8;
break;
case 16:
test_fn_ = pixelTests16;
break;
case 32:
test_fn_ = pixelTests32;
break;
case 64:
test_fn_ = pixelTests64;
break;
default:
CV_Error(Error::StsBadArg, "descriptorSize must be 1,2, 4, 8, 16, 32, or 64");
}
bytes_ = dSize;
}
void LATCHDescriptorExtractorImpl::write(FileStorage& fs) const
{
fs << "descriptorSize" << bytes_;
}
void LATCHDescriptorExtractorImpl::compute(InputArray image,
std::vector<KeyPoint>& keypoints,
OutputArray descriptors)
{
Mat grayImage;
GaussianBlur(image, grayImage, cv::Size(3, 3), 2, 2);
if (image.type() != CV_8U) cvtColor(image, grayImage, COLOR_BGR2GRAY);
//Remove keypoints very close to the border
KeyPointsFilter::runByImageBorder(keypoints, image.size(), PATCH_SIZE / 2 + half_ssd_size_);
descriptors.create((int)keypoints.size(), bytes_, CV_8U);
test_fn_(grayImage, keypoints, descriptors, sampling_points_, rotationInvariance_, half_ssd_size_);
}
} }
} // namespace cv } // namespace cv
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment