# Extract pixel values inside a Binary Mask

54 views (last 30 days)
ali eskandari on 11 Jun 2021
Answered: Joseph Cheng on 11 Jun 2021
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

Joseph Cheng on 11 Jun 2021
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
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);
subplot(132),imagesc(bw);colormap gray
%extractROI
%index multiply image with mask as outside is 0 and inside is 1
ROI=bwimg.*bw; 