MATLAB: Masked image displaying wrong intensity

apply mask on imageextract image values after maskingmasked image

Hey guys,
I have a 3D image: [256x256x160] and a mask: [256x256x160]. The mask is a binary image of 0 and 255. After applying the mask on the image:
if true
% masked_image = image.*mask;
I get a masked_image that has totally wrong intensity values. In fact, its values are nowhere to be found on the original image. They are just too big. All I want to achieve is extract the original image's intensities at the location of the mask and calculate the mean value of that ROI. I can see from 'imshow' that the mask is aligned properly on the image. However, applying the mask is unsuccessful and I don't understand why.
Many thanks for your help.

Best Answer

  • Try this instead, which will select only the pixels in image dictated by the mask:
    %to get the masked image without changing the dimension of the image
    masked_image = image.*(mask > 0);
    %or if you want just the pixels
    masked_image_pixels = image(mask > 0);
    Note that mask should really be a logical array, not a uint8 array, which is what (mask > 0) is taking care of for you.
    In your original code, the issue is that you are using a uint8 mask matrix to multiply element-by-element with the image matrix. This means doing the following:
    image .* mask
    (value from the image matrix) x (255 or 0 from the "binary" uint8 mask matrix)
    which would explain the large numbers.