2014-02-19 1 views
0

내 컴퓨터에 vlfeat를 설치했으며 netbeans에서 작동하고있는 것 같습니다.빠른 이동을 위해 Vlfeat의 C API 사용

것은 나는 현재 vlfeat의 quickshift 기능을 사용하려고하지만 다음 작업을 수행하는 방법에 대한 참조를 찾을 수 없습니다입니다 : quickshift에게 분할을 사용하여 vlfeat의 C에/C++ 코드를

  1. 가져 오기 입력 이미지를.
  2. 이 목적을 위해 'vl_qs_type' 빠른 이동 개체를 초기화해야하며이를 수행 할 방법을 찾을 수 없습니다.

이 문제에 대한 도움을 주시면 감사하겠습니다.

감사합니다. 이 웹 사이트 Quick shift image segmentation사용 부분에서

답변

0
  1. 는 간단한 파이프 라인이 제시된다.

  2. 바와 같이 vl_quickshift_new의 API의 문서에 설명 :

    • image 입체적 (각각 widht, 높이, 및 채널)와 vl_qs_type 값들의 배열이다. 전형적으로, 컬러 (예를 들어, RGB) 이미지는 3 개의 채널을 갖는다. 픽셀의 선형 인덱스는 channels * width* height + row + height * col으로 계산됩니다.
    • vl_qs_type은 즉, typedef double vl_qs_type입니다.
    • image은 단지 두 배의 배열입니다.

나는 Vlfeat을 채택의 목적의 모르겠지만 거기에 많은 자습서를 사용할 수 많은 알고리즘이 간단 하나의 MATLAB 함수 호출 때문에 나는 매우, Vlfeat의 matlab에 래퍼를 사용하는 것이 좋습니다.

1

VLFeat의 Quick Shift 구현을 사용해야합니다. 다음 스 니펫은 C++에서 구현을 사용하는 방법을 보여줍니다. 나는 이미지를 읽을에서 OpenCV를 사용하고 때, 처음 함께 VLFeat 헤더 파일을 OpenCV를 포함

#include <opencv2/opencv.hpp> 

extern "C" { 
    #include "generic.h" 
    #include "quickshift.h" 
} 

VLFeat, 내가 CMake를 사용으로 vlfeat-0.9.18/vl을 추가 (내 경우 보관 폴더 vlfeat-0.9.18 포함) 다운로드 한 후이 디렉토리를 포함 . 그렇지 않으면 위의 코드를 조정해야합니다. 그런 다음, 다음 코드는 이미지를 읽고 이미지를 필요한 형식으로 변환하고 Quick Shift를 실행합니다.

참고 : 다음 스 니펫은 원래 코드를 추출한 것으로서 아래에 제시된대로 테스트되지 않았습니다.

// Read an image using OpenCV, I assume a color image to be given; 
// the image will be loaded in BGR color space. 
cv::Mat mat = cv::imread("Lenna.png", CV_LOAD_IMAGE_COLOR); 

// Convert image to one-dimensional array. 
double* image = new double[mat.rows*mat.cols*mat.channels()]; 
for (int i = 0; i < mat.rows; ++i) { 
    for (int j = 0; j < mat.cols; ++j) { 
     image[j + mat.cols*i + mat.cols*mat.rows*0] = mat.at<cv::Vec3b>(i, j)[0]; 
     image[j + mat.cols*i + mat.cols*mat.rows*1] = mat.at<cv::Vec3b>(i, j)[1]; 
     image[j + mat.cols*i + mat.cols*mat.rows*2] = mat.at<cv::Vec3b>(i, j)[2]; 
    } 
} 

// Create a new quickshift instance using the image, the height and width of the 
// image as well as the number of channels. 
VlQS* quickShift = vl_quickshift_new(image, mat.rows, mat.cols, mat.channels()); 
vl_quickshift_set_kernel_size(quickShift, 5); 

// Run Quick Shift. 
vl_quickshift_process(quickShift); 

그러나 구현의 결과를 해석하고 사용하는 방법을 아직 알지 못했습니다.

관련 문제