bwmorph3
バイナリ ボリュームのモルフォロジー演算
説明
例
Clean と Majority 演算の比較
3 次元 MRI ボリューム データを読み込み、バイナリ ボリュームを作成します。volshow
を使用して、灰色のボリューム データを表示します。
load mristack;
BW1 = mristack > 127;
cmap = [0.6 0.6 0.6];
volshow(BW1,Colormap=cmap);
1 に設定されているボクセルであり、かつ、0 に設定されているボクセルで囲まれているボクセルを削除するには、ボリューム データで "clean"
操作を実行します。削除するボクセルを決定するとき、"clean"
操作で 26 個の隣接するボクセルを考慮します。volshow
を使用して結果を表示します。
BW2 = bwmorph3(BW1,"clean");
volshow(BW2,Colormap=cmap);
比較のために、ボリューム データで "majority"
操作を実行します。"majority"
操作は "clean"
操作と同様のタスクを実行します。ただし、ターゲット ボクセルの近傍にあるボクセルの半分以上 (つまり majority) が 1 に設定されている場合のみ、ボクセルを維持します。維持するボクセルを決定するとき、"majority"
操作も 26 個の隣接ボクセルを考慮します。volshow
を使用して結果を表示します。
BW3 = bwmorph3(BW1,"majority");
volshow(BW3,Colormap=cmap);
モルフォロジー演算の説明
この例では、bwmorph3
でサポートされるモルフォロジー演算のそれぞれがシンプル ボリュームでどのように機能するのかを説明します。
値が 1 の 3×3×3 のキューブを中心に含む、値が 0 の 9×9×3 の直方体を作成します。
innercube = ones(3,3,3);
cube_center = padarray(innercube,[3 3],0,'both')
cube_center = cube_center(:,:,1) = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 cube_center(:,:,2) = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 cube_center(:,:,3) = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
remove 操作でのピクセルの Off 設定
'remove'
演算を使用して、内側のキューブの中央ボクセルを 0
に設定します。この操作は、'on'
ボクセルによって完全に囲まれた、任意の 'on'
ボクセルの値を、'off'
に設定します。
remove_center = bwmorph3(cube_center,'remove')
remove_center = 9x9x3 logical array
remove_center(:,:,1) =
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
remove_center(:,:,2) =
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 0 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
remove_center(:,:,3) =
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
Fill 演算でのピクセルの On 設定
'fill'
演算を使用して、内側のキューブの中央ボクセルを 1
に設定します。この操作は、'on'
ボクセルによって完全に囲まれた、任意の 'off'
ボクセルの値を、'on'
に設定します。
fill_center = bwmorph3(remove_center,'fill')
fill_center = 9x9x3 logical array
fill_center(:,:,1) =
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
fill_center(:,:,2) =
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
fill_center(:,:,3) =
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
Clean 演算での未連結ピクセルの除去
'clean'
演算を使用して、1
に設定されているがボリュームのコンポーネントに連結していない散在ボクセルすべてを削除します。この例では、2 番目平面にあるランダムなボクセルを 1 に設定することで、散在ボクセルを作成し、'clean'
演算を使用してそれを削除します。
cube_center(2,2,2) = 1
cube_center = cube_center(:,:,1) = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 cube_center(:,:,2) = 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 cube_center(:,:,3) = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
cube_cleaned = bwmorph3(cube_center,'clean')
cube_cleaned = 9x9x3 logical array
cube_cleaned(:,:,1) =
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
cube_cleaned(:,:,2) =
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
cube_cleaned(:,:,3) =
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
過半数の検出
'majority'
演算を使用して、cube_center
の過半数を 検出します。この演算では、ボクセルの 26 個の連結された隣接ボクセルの半数以上 (majority) が 1
に設定されている場合にだけボクセルが維持されます。
cube_major = bwmorph3(cube_center,'majority')
cube_major = 9x9x3 logical array
cube_major(:,:,1) =
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
cube_major(:,:,2) =
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 0 1 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
cube_major(:,:,3) =
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
骨格に類似した形状の作成
分岐点と終点のオプションを描くには、別の小さな行列 (今回は骨格のような線形の形状) を作成します。
x1 = eye(5); x2 = zeros(5); x2(3,3) = 1; x3 = x2; shape = cat(3,x1,x2,x3)
shape = shape(:,:,1) = 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 shape(:,:,2) = 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 shape(:,:,3) = 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
終点の検出
形状の終点を 'endpoints'
演算を使用して検出します。この形状には、3 つの終点があります。1 番目の平面で対角の両端と、3 番目の平面の中央を通る線の端です。
shape_endpts = bwmorph3(shape,'endpoints')
shape_endpts = 5x5x3 logical array
shape_endpts(:,:,1) =
1 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 1
shape_endpts(:,:,2) =
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
shape_endpts(:,:,3) =
0 0 0 0 0
0 0 0 0 0
0 0 1 0 0
0 0 0 0 0
0 0 0 0 0
分岐点の検出
形状の分岐点を 'branchpoints'
演算を使用して検出します。形状には、1 つの分岐点があります。対角線と水平線が交差するところです。
shape_brpts = bwmorph3(shape,'branchpoints')
shape_brpts = 5x5x3 logical array
shape_brpts(:,:,1) =
0 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 0
shape_brpts(:,:,2) =
0 0 0 0 0
0 0 0 0 0
0 0 1 0 0
0 0 0 0 0
0 0 0 0 0
shape_brpts(:,:,3) =
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
入力引数
V
— 入力ボリューム
数値配列 | logical 配列
入力ボリューム。数値配列または logical 配列として指定します。数値入力の場合、非ゼロのピクセルは 1
(true
) であると見なされます。
bwmorph3
は 1 次元、2 次元または 3 次元配列を受け付けます。1 次元または 2 次元の入力配列を指定する場合、bwmorph3
は、3 次元ボリュームに対して定義されているモルフォロジー演算を実行します。2 次元の処理を実行する場合は、代わりに bwmorph
を使用します。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
operation
— 実行するモルフォロジー演算
文字ベクトル | string スカラー
実行するモルフォロジー演算。以下の文字ベクトルまたは string スカラーのいずれかに指定します。これらの演算の例については、モルフォロジー演算の説明を参照してください。
操作 | 説明 | 図 |
---|---|---|
| スケルトンの分岐点を検出する。分岐点は、複数の分岐が交差するジャンクションのボクセルです。 分岐点を見つけるには、イメージをスケルトン化しなければなりません。スケルトン化されたイメージを作成するには、 | |
| 0 に設定することで、孤立したボクセルを削除します。孤立ボクセルは、 | |
| スケルトンの終点を検出します。終点は分岐の端にあるボクセルです。 メモ: 終点を見つけるには、イメージをスケルトン化しなければなりません。スケルトン化されたイメージを作成するには、 | |
|
| |
|
| モルフォロジー演算の説明を参照してください。 |
|
| |
データ型: char
| string
ヒント
拡張機能
スレッドベースの環境
MATLAB® の backgroundPool
を使用してバックグラウンドでコードを実行するか、Parallel Computing Toolbox™ の ThreadPool
を使用してコードを高速化します。
この関数は、スレッドベースの環境を完全にサポートします。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
バージョン履歴
R2018a で導入R2022b: スレッドベース環境のサポート
bwmorph3
は、スレッドベースの環境をサポートするようになりました。
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)