2014-02-19 6 views
0

Я установил vlfeat на свой компьютер и, похоже, получил его работу на netbeans.Использование API Vlfeat's для quickshift

В настоящее время я пытаюсь использовать функцию Quickshift vlfeat, но я не могу найти какие-либо ссылки о том, как сделать следующее:

  1. ввода Импорт изображений в C vlfeat от кода/C++ с использованием Quickshift сегментации.
  2. Для этого мне нужно инициализировать объект quickshift 'vl_qs_type' , и я не могу найти способ сделать это.

Любая помощь по этому вопросу будет очень признательна.

Спасибо.

ответ

0
  1. В Использование части этого сайта Quick shift image segmentation, простой трубопровод представлен.

  2. Как поясняется в API док из vl_quickshift_new:

    • image представляет собой массив значений vl_qs_type с тремя размерами (соответственно widht, высота и каналов). Обычно изображение цвета (например, RGB) имеет три канала. Линейный индекс пикселя вычисляется с помощью: 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 читать изображение, первый включает OpenCV вместе с файлами заголовков VLFeat:

#include <opencv2/opencv.hpp> 

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

После загрузки VLFeat (в моем случае архив содержит папку vlfeat-0.9.18), я использую CMake для добавления vlfeat-0.9.18/vl в качестве включают в каталог , В противном случае вы должны настроить вышеуказанный код. Затем следующий код считывает изображение, преобразует изображение в требуемый формат и запускает 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); 

Однако я не мог понять, как интерпретировать и использовать результаты реализации.

 Смежные вопросы

  • Нет связанных вопросов^_^