1

元のグレースケール画像があります(画像の外側にラベルが付いたマンモグラム画像を使用しています)。その画像のいくつかのオブジェクト(ラベル)を削除する必要があるため、そのグレースケール画像をバイナリ画像に変換しました。次に、最大面積のオブジェクトを選択する方法で提供されている回答方法に従いました

最後に、最大面積のオブジェクトをバイナリ イメージとして抽出しました。その中の小さなオブジェクトにアクセスしてセグメント化するために、その領域をグレースケールで表示したいと思います。例えば。領域内の小さな組織であり、そのエッジも検出する必要があります。

抽出されたバイナリ イメージ元のグレースケール画像

**

分離されたオブジェクト領域をグレースケール画像として取得する方法、またはバイナリやその他の方法に変換せずにグレースケールから直接最大のオブジェクト領域を取得するにはどうすればよいですか?

**

(私はmatlabを初めて使用します。正しく説明したかどうかはわかりません。理解できない場合は、詳細を提供します)

4

2 に答える 2

1

あなたの質問を正しく理解できれば、バイナリ マップを使用して、それらの領域の対応するピクセル強度にアクセスする必要があります。

もしそうなら、それは非常に簡単です。バイナリ マップを使用して、元の画像の強度にアクセスする場所の空間座標を特定できます。空白の画像を作成し、それらの空間座標を使用してこれらの強度を空白の画像にコピーします。

これは、いろいろ試してみることができるサンプル コードです。

% Assumptions:
% im - Original image
% bmap - Binary image 

% Where the output image will be stored
outImg = uint8(zeros(size(im)));

% Find locations in the binary image that are white
locWhite = find(bmap == 1);

% Copy over the intensity values from these locations from
% the original image to the output image.
% The output image will only contain those pixels that were white
% in the binary image
outImg(locWhite) = im(locWhite);

% Show the original and the result side by side
figure;
subplot(1,2,1);
imshow(im); title('Original Image');
subplot(1,2,2);
imshow(outImg); title('Extracted Result');

これがあなたが探しているものかどうか教えてください。

方法 2

Rafael のコメントで示唆されているように、findすべて一緒に使用することをスキップして、論理ステートメントを使用できます。

outImg = img; 
outImg(~bmap) = 0;

find効率は悪くなりますが、初心者にとって難読化が少ないため、使用することにしました。どちらの方法でも正しい結果が得られます。


考えるためのいくつかの食べ物

バイナリ イメージ内の抽出された領域には、いくつかの穴があります。穴のない領域全体を取得したいと思うでしょう。そのため、上記のコードを使用する前に、これらの穴を埋めることをお勧めします。MATLABのimfill関数はうまく機能し、バイナリ イメージを入力として受け入れます。

こちらのドキュメントをご覧ください: http://www.mathworks.com/help/images/ref/imfill.html

そのため、imfillまずバイナリ イメージに適用してから、上記のコードを使用して抽出を行います。

于 2014-04-09T00:00:05.830 に答える