Extract pixel values inside a Binary Mask

12 ビュー (過去 30 日間)
ali eskandari
ali eskandari 2021 年 6 月 11 日
回答済み: Joseph Cheng 2021 年 6 月 11 日
I have an image and the ROI points. I did the following to extract the ROI by creating a binary mask with poly2mask. now I want to extact the values of masked image.
My problem is that I cannot retain zeros inside the masked image using the code below. Could you please help me?
S = size(img); % Size of the binary masked
bw = poly2mask(x,y,S(1),S(2)); % Create a binary mask
ROI = img;
ROI(bw == 0) = 0;
ROI = ROI(ROI>0); % Just keep the non-zero values

回答 (1 件)

Joseph Cheng
Joseph Cheng 2021 年 6 月 11 日
since you already created a binary mask you can just index multiply " .* " the mask with the original image as outside is 0 and inside the mask is 1.
%dummy image for example
img = imread('pears.png');
bwimg = single(rgb2gray(img));
[r c]=size(bwimg);
figure(1),subplot(131),imagesc(bwimg); colormap gray
title('original image')
%dummy mask gen for example
x = c*rand(1,4);
y = r*rand(1,4);
x(end+1) = x(1);
y(end+1) = y(1);
%create mask
bw = poly2mask(x,y,r,c);
subplot(132),imagesc(bw);colormap gray
title('mask')
%extractROI
%index multiply image with mask as outside is 0 and inside is 1
ROI=bwimg.*bw;
subplot(133),imagesc(ROI);colormap gray;title('Mask applied')

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by