スパイク選択のための画像処理方法


11

3Dバイナリイメージとしての入力と以下の優先出力があります。

入力:

入力

優先出力:

出力

上記の優先出力のように、先端のとがったオブジェクトのみを残す場合、どの画像処理方法を探す必要がありますか?


3Dバイナリイメージとはどういう意味ですか?画像を個々の部分に簡単に分割できますか?
bjoernz 2012

3Dとは、断層像のことです。
Karl

1
spikyオブジェクトとは何か説明できますか?本当にそれをスパイキーと呼ぶものは何ですか?先端のとがったオブジェクトを見つけるための重要な特徴は何ですか?
Dipan Mehta

この場合の先端のとがったオブジェクトは3D領域であり、滑らかではなく、これらのとげのような形状が全体に広がっています。
Karl

回答:


19

「先端のとがったオブジェクト」の境界にはさらに多くのコーナーがあるので、1つのアプローチは、このためにコーナー検出器を調整することです。

たとえば、距離変換画像の構造テンソル(以下のMathematicaコード)の行列式を計算しました。

ここに画像の説明を入力してください

ヒステリシスを使用して2値化すると、この画像が生成されます。これは、選択したセグメンテーションアルゴリズムの開始点として適しています。

ここに画像の説明を入力してください

Mathematicaコード(srcあなたが投稿したソース画像です)

まず、入力画像の距離変換を計算します。これにより、(境界だけでなく)オブジェクト領域全体にコントラストが作成されるため、オブジェクト全体を検出できます。

dist = ImageData[DistanceTransform[src]];

次に、構造テンソルのコンポーネントを準備します。ガウス微分のフィルターサイズが5の場合、ウィンドウサイズは20です。

gx = GaussianFilter[dist, 5, {1, 0}];
gy = GaussianFilter[dist, 5, {0, 1}];
gx2 = GaussianFilter[gx^2, 20];
gxy = GaussianFilter[gx*gy, 20];
gy2 = GaussianFilter[gy^2, 20];   

各ピクセルでコーナーフィルターを計算するには、これらを構造テンソルのシンボリック行列式にプラグインします。

corners = Det[{{dx2, dxy}, {dxy, dy2}}] /. {dx2 -> gx2, dxy -> gxy, dy2 -> gy2};

基本的には次と同じです。

corners = gx2 * gy2 - gxy * gxy;

これを画像に変換して0..1の範囲にスケーリングすると、上記のコーナー検出器の画像が生成されます。

最後に、適切なしきい値で2値化すると、最終的なバイナリイメージが得られます。

MorphologicalBinarize[Image[corners], {0.025, 0.1}]

とてもクールな答え!=)
フォノン2012年

あなたの答えは素晴らしいです、私はそれらから多くを学びます。
Andrey Rubshtein
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.