0

After some processing, I got a black&white mask of a BMP image.

Now, I want to show only the part of the BMP image where it is white in the mask.

I'm a newb with matlab(but I love it), and I've tried a lot of matrix tricks learned from google, well, none works(or I'm not doing them right ..)

Please provide me with some tips.

Thanks for your time in advance.

Robert Bean
  • 851
  • 2
  • 11
  • 21

2 Answers2

1

Assuming the mask is of the same size as image, then you can just do (for grayscale images):

maskedImage=yourImage.*mask %.* means pointwise multiplication. 

For color images, do the same operations on the three channels:

maskedImage(:,:,1)=yourImage(:,:,1).*mask 
maskedImage(:,:,2)=yourImage(:,:,2).*mask 
maskedImage(:,:,3)=yourImage(:,:,3).*mask 

Then to visualize the image, do:

imshow(maskedImage,[]);
Autonomous
  • 8,935
  • 1
  • 38
  • 77
1

Using one of the two matlab functions repmat or bsxfun the masking operation can be performed in a single line of code for a source image with any number of channels.

Assuming that your image I is of size M-by-N-by-C and the mask is of size M-by-N, then we can obtain the masked image using either repmat

I2 = I .* repmat(mask, [1, 1, 3]);

or using bsxfun

I2 = bsxfun(@times, I, mask);

These are both very handy functions to know about and can be very useful when it comes to vectorizing your code in general. I would also recommend that you look through the answer to this question: In Matlab, when is it optimal to use bsxfun?

Community
  • 1
  • 1
Bjoern H
  • 600
  • 4
  • 13