C# EmguCv中的冲浪特征:如何提取固定数量的特征
我想训练一个神经网络,以便对不同类别的灰度图像进行分类 作为这个网络的输入,我想使用SURF-128算法提取的特征。以下代码(的一个符号)显示了我如何使用API:C# EmguCv中的冲浪特征:如何提取固定数量的特征,c#,emgucv,surf,C#,Emgucv,Surf,我想训练一个神经网络,以便对不同类别的灰度图像进行分类 作为这个网络的输入,我想使用SURF-128算法提取的特征。以下代码(的一个符号)显示了我如何使用API: SURFDetector surfCPU = new SURFDetector(500, true); VectorOfKeyPoint observedKeyPoints; BriefDescriptorExtractor descriptor = new BriefDescriptorExtractor(); observed
SURFDetector surfCPU = new SURFDetector(500, true);
VectorOfKeyPoint observedKeyPoints;
BriefDescriptorExtractor descriptor = new BriefDescriptorExtractor();
observedKeyPoints = surfCPU.DetectKeyPointsRaw(img, null);
Matrix<Byte> observedDescriptors = descriptor.ComputeDescriptorsRaw(img, null, observedKeyPoints);
我可以保存一些结果。下图显示了上面的代码提取不同大小的特征(右侧是与前一行代码一起保存的结果):
我想要的是得到一个固定大小的向量
如何使用EmguCV库为C#提供的API在128维数组中转换通用灰度图像?问题已解决
为了获得描述灰度图像的128维数组,其中存储了与固定关键点(例如图像中心)相关的特征,我使用了以下代码:
observedDescriptors.Save(@"SURF.bmp");
SURFDetector surfCPU = new SURFDetector(400, true);
float x = 30, y = 50; //KeyPoint position
float kpSize = 20; //KeyPoint size
MKeyPoint[] keyPoints = new MKeyPoint[1];
keyPoints[0] = newMKeyPoint(x, y, kpSize); //This method is written below
ImageFeature<float>[] features = surfCPU.ComputeDescriptors<float>(img, null, keyPoints);
float[] array_of_128_elements = features[0].Descriptor;
private static MKeyPoint newMKeyPoint(float x, float y, float size)
{
MKeyPoint res = new MKeyPoint();
res.Size = size;
res.Point = new PointF(x, y);
//res.Octave = 0;
//res.Angle = -1;
//res.Response = 0;
//res.ClassId = -1;
return res;
}