-1

私はそれをやろうとしてきました:

http://prntscr.com/umv66 -> http://goo.gl/Bgmv2 (赤い線は無視してかまいません。最終的な目的を示すために追加しただけです)

したがって、最初のケースで行ったことは次のとおりです。MatLab を使用して、rgb -> hsv を変換し、s チャネル (別名飽和) を取得しました。次に、Otsu (matlab では graythresh と呼ばれます) を使用して 2 値化し、白黒の画像に変換しました。すべてが完璧に機能しました。

さて、2 番目のケースでは、これはうまく機能しません。

ベース画像( http://goo.gl/OtK4G ) -> Sチャンネル( http://goo.gl/oo8h6 ) -> 大津( http://goo.gl/cnfxU )

ご覧のとおり、この場合、Otsu フィルターは役に立たなくなります。私が取るべき回避策や他の方法はありますか?前もって感謝します!

4

1 に答える 1

1

k-meansを使用して画像の量子化を実行できます。したがって、黄色の色合いが白になり、他のすべてが黒になるように画像を2値化する必要があることがわかります。したがって、画像を適切な数のクラスターに分割します(4つで機能する場合があります)。黄色の色合いの場合は2、その他の色合いの場合は2。最初の図心を事前に定義することを忘れないでください。この後、黄色の重心としてラベル付けされたピクセルは1つとして再ラベル付けされます。これはうまくいくかもしれません。

k-means色の量子化プロセスの詳細:1。最初に、画像内のすべてのピクセルをnx3マトリックスに収集します。次に、k-meansを使用して、nx3行列を3つまたは4つのクラスターに分割します。2. 4つのクラスターに分割する前に、重心を事前に定義します。これを行うには、MATLABkmeansアルゴリズムのドキュメントをここで読んでください。。設定する必要のあるパラメーターは、kmeansの「options」フィールドの「start」です。3.したがって、黄色(およびそれに「近い」他の色)は、事前定義されたクラスターに分類される必要があります。(したがって、クラスター1と2を黄色に定義した場合、すべての黄色のピクセルに1または2のラベルが付けられます。他のピクセルには3または4のラベルが付けられます。)4。次に、ピクセルが次のように画像をバイナリに変換します。黄色のクラスター(つまり、この例ではクラスター1と2)に分類される場合は、1にする必要があり、その他はゼロになります。

クラスターの事前定義の詳細:kmeansドキュメントから:開始重心は、のstartパラメーターで重心開始位置の行列kmeansとして定義できます。k-by-pあなたの場合、それはRGB黄色の値になります。画像に存在する黄色のいくつかのピクセル値を確認してください。偏差が大きすぎる場合は、2つのクラスターを定義し、そうでない場合は1つを定義します。2つを定義すると、startパラメーターに2x3行列が含まれます。セントロイドの列数はデータの列数と同じになることを常に覚えておく必要があります。

これにより、プロセスがより高いレベルで明確になることを願っています。エラーがある場合は、コードを投稿してください。

于 2013-03-01T20:14:30.640 に答える