2013-04-14 1 views
0

서로 다른 클래스의 회색 음영 이미지를 분류하기 위해 신경망을 학습하고 싶습니다.EmguCv의 SURF 기능 : 고정 된 수의 기능을 추출하는 방법

이 네트워크의 입력으로 SURF-128 알고리즘으로 추출한 기능을 사용하고 싶습니다. 다음 코드를 사용하여

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

:

observedDescriptors.Save(@"SURF.bmp"); 

내가 어떤 결과를 저장할 수 있습니다 다음 코드합니다 (example provided with EmguCV library의 semplification는) 내가 API를 사용하는 방법을 보여줍니다.

Image tests

내가 원하는 것은 가진 벡터를 얻을 수 있습니다 : 다음 그림은 위의 코드 (오른쪽, 코드의 이전 라인과 함께 저장된 결과가) 다른 크기와 특징을 추출하여 보여줍니다 고정 크기.

C# 용 EmguCV 라이브러리에서 제공하는 API를 사용하여 128 색 배열의 일반 그레이 스케일 이미지를 어떻게 변환 할 수 있습니까?

답변

0

문제가 해결되었습니다.

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; 
: 고정 핵심 관련 기억 기능은 (예, 화상의 중심), I는 다음과 같은 코드가 사용되는 그레이 스케일 이미지에 대해 설명 128 차원 배열을 얻기 위해서는


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; 
} 
관련 문제