3次元胸部スキャンからの肺のセグメント化
この例では,動的輪郭(蛇)を使用して3次元セグメンテーションを実行する方法を説明します。ボリュ,ムビュ,ア,アプリを使用して結果を表示できます。
デ,タの準備
人体胸部ctスキャンデタをワクスペスに読み込みます。この例を実行するには,アドオンエクスプローラーを使用してMathWorks™からサンプルデータをダウンロードしなければなりません。アドオンエクスプロラを使用したサンプルデタのンストルを参照してください。
负载chestVolume谁
名称大小字节类属性V 512x512x318 166723584 int16
Ctスキャンデ,タをint16
から单
に変換して[0,1]の範囲に値を正規化します。
V = im2single(V);
ボリュ,ムビュ,ア,アプリを使用して胸部スキャンを表示します。Matlab®アプリルストリップからアプリを開きます。volumeViewer
コマンドを使用してボリュムを引数(volumeViewer (V)
)として指定し,アプリを開くこともできます。ボリュームビューアーには,特定のタイプのデータの最適なビューを提供することを目的としたalphamapが事前に設定されています。胸部スキャンの最適な表示を可能にするには,事前に設定されたCT-Boneを選択します。
肺のセグメント化
動的輪郭手法を使用してctスキャンデ,タ内の肺をセグメント化します。動的輪郭は初期シドポントを必要とする領域拡張アルゴリズムです。例では、イメージの領域分割アプリを使用し、直交する 2 枚の 2 次元スライス (XY 平面と XZ 平面に 1 枚ずつ) をセグメント化することによって、このシード マスクを作成します。次にこの例では、これら 2 つのセグメンテーションを 3 次元マスクに挿入します。この例では、このマスクを関数activecontour
に渡して,胸腔内の肺の3次元セグメンテ,ションを作成します。(この例では動的輪郭メソッドを使用しますが,塗りつぶしのような他のセグメンテーション手法を使用しても同じ目的を実現できます)。
Xy次元とxz次元の両方の中心スラaaplスを抽出します。
Xy = v (:,:,160);XZ =挤压(V(256,:,:));
関数imshow
を使用して2次元スラescスを表示します。
图imshow (XY, [],“边界”,“紧”);
imshow (XZ [],“边界”,“紧”);
。MATLABアプリツールストリップからアプリを開くか、2 次元スライスを引数imageSegmenter (XY)
として指定してimageSegmenter
コマンドを使用します。
セグメンテ,ションプロセスを開始するには,[しきい値]タブで[しきい値]をクリックして肺のスラ@ @スを開きます。[しきい値]タブで,[手動しきい値]オプションを選択し,しきい値スライダーを動かして肺の良好なセグメンテーションが得られるしきい値を指定します。[マスクの作成]をクリックしてしきい値処理を確定し,[セグメンテ.ション]タブに戻ります。
アプリは次のコドを実行してメジのしきい値処理を行います。
BW = XY > 5.098000e-01;
この肺の初期セグメンテ,ションの後に,[マスクの調整]メニュ,のオプションを使用してマスクをクリ,ンアップします。
アプリで各オプションをクリックして,肺が前景になるようにマスク[マスクの反転]),肺以外のセグメント化された要素を削除し([境界のクリア]),肺のセグメンテ,ション内の穴を塗り,ぶす([穴の塗りぶし])ことができます。最後に,[モルフォロジ]オプションを使用して肺のセグメンテ,ションのエッジを滑らかにします。[モルフォロジ,]タブで,[マスクの収縮]操作を選択します。これらの手順を実行した後に,[バ电子邮箱ナリの表示]。
アプリは次のコ,ドを実行してマスクを調整します。
BW =缺陷(BW);BW = imclearborder(BW);BW =填充(BW,“黑洞”);半径= 3;分解= 0;Se = strel(“磁盘”半径,分解);BW = imerosion (BW, se);maskedImageXY = XY;maskedImageXY(~BW) = 0;imshow (maskedImageXY)
Xzスラ@ @スに対して同じ操作を実行します。[イメージの読み込み]を使用して,変数XZ
を選択します。しきい値処理を使用して,肺の初期セグメンテ,ションを実行します。Xzスラ@ @スに対して[グロ,バルしきい値]オプションを使用すると,適切なセグメンテ,ションが作成されます(以下のコ,ドでのimbinarize
の呼び出し)。Xyスラaaplスの場合と同様に,[マスクの調整]メニュ,のオプションを使用して,滑らかな肺のセグメンテ,ションを作成します。[モルフォロジ]タブでの収縮操作で、半径 13 を指定して小さい余分なオブジェクトを削除します。
Xzスラスをセグメント化し,結果を滑らかにするために,アプリは次のコドを実行します。
BW = imbinalize (XZ);BW =缺陷(BW);BW = imclearborder(BW);BW =填充(BW,“黑洞”);半径= 13;分解= 0;Se = strel(“磁盘”半径,分解);BW = imerosion (BW, se);maskedImageXZ = XZ;maskedImageXZ(~BW) = 0;imshow (maskedImageXZ)
Activecontourを使用したシ,ドマスクの作成と肺のセグメント化
関数activecontour
に使用して肺をセグメント化する3次元シドマスクを作成します。
入力ボリュムと同じサズの3次元逻辑ボリュムを作成し,mask_XY
とmask_XZ
を適切な空間位置に挿入します。
掩码= false(大小(V));mask(:,:,160) = maskedImageXY;面具(256年:,)=面具(256年:,:)|重塑(maskedImageXZ [1512318]);
この3次元シードマスクを使用して,動的輪郭メソッドで3次元ボリューム内の肺をセグメント化します。この操作には数分かかることがあります。質の高いセグメンテ,ションを取得するには,histeq
を使用してボクセル値を利用可能な範囲に広げます。
V = histeq(V);BW = activecontour(V,mask,100,“Chan-Vese”);segmentedImage = V.*single(BW);
コマンドvolumeViewer (segmentedImage)
を実行して,セグメント化された肺をボリュ,ムビュ,ア,アプリで表示できます。レンダリングエディターのalphamap設定を操作して,肺のみが鮮明に表示されるようにできます。
セグメント化された肺の体積の計算
関数regionprops3
を“体积”
オプション付きで使用して肺のボリュ,ムを計算します。
volLungsPixels = regionprops3(logical(BW),“体积”);
x、y、zの各次元に,元のファ。メタデタはアドオンエクスプロラからダウンロドしたメジデタには含まれていません。
Spacingx = 0.76;间距= 0.76;Spacingz = 1.26*1e-6;Unitvol = spacingx*spacingy*spacingz;volLungs1 = volLungsPixels.Volume(1)*unitvol;volLungs2 = volLungsPixels.Volume(2)*unitvol;vollungsll = volLungs1 + volLungs2
vollungs公升= 5.7726