グラフが示すように、画像を入力して、その結果、いくつかのセグメントを取得したいと思います。
一番近いカラーセグメントをクラスター化するようなものなので、「平均シフト」の概念に近いと思いますか?
ここで関連する質問を検索しましたが、opencv C++で構造を開始および構築する方法がまだわかりません。私はいくつかのアドバイスを探しています、そして私が参照するための実装コードの一部を手に入れてくれればとてもありがたいです!助けてくれてありがとう!
==================================================
2015年5月19日編集
私が試している実装の1つがWatershedであることをここに追加しましょう:( http://blog.csdn.net/fdl19881/article/details/6749976 )。
それは完璧ではありませんが、私が望む結果です。この実装では、ユーザーは手動で操作する(分水界線を引く)必要があるため、自動バージョンを探しています。少し難しいように聞こえますが...それを行うための提案やコードの一部をいただければ幸いです。
Opencvドキュメント: リンク
パラメータ: ここ
Meanshiftフィルタリングのサンプルコード:
#include "opencv2/core/core.hpp"
#include "opencv2/imgproc/imgproc.hpp"
using namespace cv;
using namespace std;
Mat img, res, element;
int main(int argc, char** argv)
{
namedWindow( "Meanshift", 0 );
img = imread( argv[1] );
// GaussianBlur(img, img, Size(5,5), 2, 2);
pyrMeanShiftFiltering( img, res, 20, 45, 3);
imwrite("meanshift.png", res);
imshow( "Meanshift", res );
waitKey();
return 0;
}
これは画像の出力です。前に前処理を使用するか、より適切なパラメータを見つける必要がある場合があります。
編集:事前にガウスぼかしで出力(コードでコメント)
既存のセグメンテーションアプローチを検討する際の問題は、それらがMatlab(Uni以外の誰も使用できない)に実装されているか、自動ではないことです。色を分割する方法を示す関心のあるオブジェクトまたはレベルを選択することによってユーザーが画像を前処理する必要があるアプローチは、自動ではないため役に立ちません。必要に応じて、この ブログ投稿 で説明されているセグメンテーションのOpenCVベースの実装を試すことができます。完璧ではありませんが、自動でほとんどの作業を実行し、実際にソースをダウンロードして試してみることができます。