2013-03-28 8 views
0

나는 128 차원 디스크립터와 기능 일치를 수행하는 코드를 작업 중이다.별도의 * 더블 배열로 FLANN 사용

이미지의 모든 설명자는 std :: vector에 저장되며, InterestPoint에는 설명자 벡터 인 * double desc 멤버가 포함됩니다. * 어떻게 지금과이 플란넬 :: 매트릭스를 채울 수

std::vector<InterestPoint> ip1; 
//processing for building vector containing interest points 
flann::Matrix<double> input(new double[ip1.size()*128], ip1.size(), 128); 

:

지금 내가 나중에 내가 같은 초기화 대략 가장 가까운 이웃 기능 매칭을 수행하기 위해 플란넬 매트릭스에서이 구조를 사용하려면 ip1 벡터의 모든 요소에서 double desc 멤버? 이것이 내가 시도한 것입니다.

for(size_t i = 0; i < ip1.size(); i++) 
{ 
    for(size_t j = 0; j < 128; j++) 
    { 
     input[i][j] = ip1[i].ivec[j]; 
    } 
} 

컴파일되었지만 작동하지 않았습니다. flann은 연산자 []를 사용하여 flann :: Matrix의 모든 행에 액세스 할 수있는 방법을 제공하므로 Matrix 클래스는 행 주수입니다.

미리 감사드립니다.

+2

"효과가 없다"는 것은 무엇을 의미합니까? 루프를 밟아서 액세스중인 인덱스의 ip1 및 입력 값이 유효한지 확인 했습니까? – aardvarkk

+0

당신이 말한대로했는데 실제로 Flann에 포인터를 넣는 데 문제가 없었습니다. 문제는 내 포인터가 어떤 이유로 든 내가 호출 한 함수에서 유효하지 않다는 것이 었습니다. 어쨌든 시간 내 주셔서 감사합니다! – filipsch

답변

0

"InterestPoint"의 내용이 확실하지 않습니다. 하지만이 샘플 코드가 도움이 될 것이라고 생각합니다.

struct MyPoint 
{ 
    MyPoint (double x, double y, double z) {this->x=x; this->y=y; this->z=z;} 
    double x,y,z; 
}; 

std::vector<MyPoint> points; 
points.push_back(MyPoint(0, 0, 0)); 
points.push_back(MyPoint(1, 1, 1)); 
points.push_back(MyPoint(-1, -1, -1)); 
flann::Matrix<double> points_mat = flann::Matrix<double>(&points[0].x, points.size(), 3); 
+0

이 답변은 무슨 일이 벌어지고 있는지에 대한 좀 더 많은 논평이 도움이 될 것입니다. – Sobrique