0

PC に vlfeat をインストールしましたが、netbeans で動作しているようです。

現在、vlfeat のクイックシフト機能を使用しようとしていますが、次の方法に関する参照が見つかりません。

  1. クイックシフト セグメンテーションを使用して、vlfeat の C/C++ コードに入力画像をインポートします。
  2. この目的のために、quickshift オブジェクト 'vl_qs_type' を初期化する必要がありますが、これを行う方法が見つかりません。

これに関するヘルプは大歓迎です。

ありがとう。

4

2 に答える 2

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

ただし、実装の出力を解釈して使用する方法はまだわかりません。

于 2014-07-16T09:56:17.543 に答える
0
  1. この Web サイトQuick shift image segmentation使用部分では、単純なパイプラインが示されています。

  2. vl_quickshift_newの API ドキュメントで説明されているように:

    • は、 3 つの次元 (それぞれ幅、高さ、チャネル) を持つ値imageの配列です。vl_qs_type通常、カラー (RGB など) 画像には 3 つのチャネルがあります。ピクセルの線形インデックスは、次のように計算されますchannels * width* height + row + height * col
    • vl_qs_typetypedef double vl_qs_typeです。
    • imageは単なる double 配列です。

Vlfeat を採用する目的がよくわかりませんが、Vlfeat の Matlab ラッパーを使用することを強くお勧めします。これは、利用可能なチュートリアルが多数あり、多くのアルゴリズムが単純な単一の matlab 関数呼び出しであるためです。

于 2014-02-19T13:55:56.113 に答える