예제 #1
0
void compute_cv_surf_keypoints(float *input, keypointslist& keypoints, int width, int height, siftPar &par){
	pro::Image img(width,height,pro::Image::_8UC1);
	img.setU8Data(vector<uchar>(input,input+width*height),width,height,1);
	cv::normalize((cv::Mat&)img, (cv::Mat&)img, 0, 255, cv::NORM_MINMAX);
	
	std::vector<cv::KeyPoint> keys;
	std::vector<cv::KeyPoint>::iterator itk;
	cv::Mat descriptors;

	cv::SurfFeatureDetector detector(4000,3,4,false,false);
	detector.detect((const cv::Mat&)img, keys);

	cv::SurfDescriptorExtractor extractor(4000,3,4,false,false);
	cv::Scalar color(100,255,50);
	extractor.compute((const cv::Mat&)img, keys, descriptors);

	for(int i=0; i<descriptors.rows; ++i) {
		keypoint key;
		key.angle = keys[i].angle;
		key.scale = keys[i].octave;
		key.x = keys[i].pt.x;
		key.y = keys[i].pt.y;
		cv::Mat d(descriptors, cv::Rect(0,i,descriptors.cols,1));
		for(int j=0;j<d.cols;j++){
			key.vec[j] = d.data[j];
		}
		keypoints.push_back(key);
	}

}
예제 #2
0
/* Joan Pau: Add a new keypoint to a vector of keypoints
   Create a new keypoint and return list of keypoints with new one added.
*/
void MakeKeypoint(
	const flimage& grad, float octSize, float octScale,
	float octRow, float octCol, float angle, keypointslist& keys,siftPar &par)
{
	keypoint newkeypoint;
	newkeypoint.x = octSize * octCol;	/*x coordinate */
	newkeypoint.y = octSize * octRow;	/*y coordinate */
	newkeypoint.scale = octSize * octScale;	/* scale */
	newkeypoint.angle = angle;		/* orientation */
	MakeKeypointSample(newkeypoint,grad,octScale,octRow,octCol,par);
	keys.push_back(newkeypoint);
}