あなたの質問を正しく理解できれば、バイナリ マップを使用して、それらの領域の対応するピクセル強度にアクセスする必要があります。
もしそうなら、それは非常に簡単です。バイナリ マップを使用して、元の画像の強度にアクセスする場所の空間座標を特定できます。空白の画像を作成し、それらの空間座標を使用してこれらの強度を空白の画像にコピーします。
これは、いろいろ試してみることができるサンプル コードです。
% 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
まずバイナリ イメージに適用してから、上記のコードを使用して抽出を行います。