Использование C API Vlfeat для быстрой смены

Я установил vlfeat на свой компьютер и, похоже, он работает на NetBeans.

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

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

Любая помощь по этому вопросу будет высоко ценится.

Благодарю.

0

Решение

Мне также нужно использовать реализацию Quick Shift от VLFeat. Следующие фрагменты иллюстрируют, как использовать реализацию из 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 как включить каталог. В противном случае вы должны настроить вышеуказанный код. Затем следующий код считывает изображение, преобразует изображение в требуемый формат и запускает быструю смену.

Замечания: Следующий фрагмент является лишь выдержкой из моего исходного кода и, следовательно, не тестируется, как представлено ниже.

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

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

1

Другие решения

  1. в использование часть этого сайта Быстрая смена изображений, простой конвейер представлен.

  2. Как объясняется в документе API vl_quickshift_new:

    • image это массив vl_qs_type значения с тремя измерениями (соответственно, widht, height и channel). Как правило, цветное (например, RGB) изображение имеет три канала. Линейный индекс пикселя вычисляется с помощью: channels * width* height + row + height * col,
    • vl_qs_type двойная, т.е. typedef double vl_qs_type,
    • image это просто двойной массив.

Я не уверен в вашей цели принятия Vlfeat, но я настоятельно рекомендую использовать обертки Matlab из Vlfeat, так как доступно множество учебных пособий и многие алгоритмы являются простым вызовом одной функции Matlab.

0

По вопросам рекламы [email protected]