MATLAB – how to highlight select pixels in an image

blended

You have an image, and you would like to highlight certain select pixels in the image a different color, say green.

Here’s how to draw and highlight specific pixels on an image while leaving the background intact.

orig
Before highlighting/blending pixels
blended
After selecting and highlighting pixels

Remember a color image is nothing more than a matrix composed of numbers. A color image simply has three matrices, one for each color channel.

So you have your original image in the variable: origImg

And a binary image where a 0 represent the background and a 1 represents the pixels you want to highlight in the variable: maskImg

You can almost simply add the two images together… Here’s a commented and worked out example of how to highlight select pixels in an image.

%% Example on how to color select pixels in an image.
%
% Kawahara (2013).
 
% The original COLOR image.
origImg = imread('ngc6543a.jpg');
 
% Make sure the values are within 0-255.
origImg = uint8(origImg);
 
% View the original image.
figure; fId = imagesc(origImg); axis image;
title('click and hold mouse to draw on the original image'); 
 
% The user draws on the image to select the pixels to highlight.
M = imfreehand();
 
% 0 = background pixels (do not change).
% 1 = foreground pixels (change these colors).
maskImg = M.createMask;
 
% View the black and white mask.
figure; imagesc(maskImg); colormap gray; axis image;
 
% Now let's color the mask green to make it more interesting. 
% To do this, we have to make three matrices, one for each color channel.
 
% Increase the color by half the max value so we can see some transparancy 
% in the original image.
amountIncrease = 255/2;
 
alphaImg(:,:,1) = zeros(size(maskImg)); % All zeros.
alphaImg(:,:,2) = round(maskImg*(amountIncrease)); % Round since we're dealing with integers.
alphaImg(:,:,3) = zeros(size(maskImg)); % All zeros. 
 
% Convert alphaImg to have the same range of values (0-255) as the origImg.
alphaImg = uint8(alphaImg);
 
% View alphaImg.
figure; imagesc(alphaImg); axis image;
 
% Combine the original images and the alpha values to highlight the select
% pixels.
blendImg = origImg + alphaImg;
 
% Show the blended images.
figure; imagesc(blendImg); axis image;

And that’s all there is too it 🙂

5 thoughts on “MATLAB – how to highlight select pixels in an image”

  1. But origImg and alphaImg have different dimensions, 256 256 and 256 256 3 respectively, so Matlab won’t allow them to be added. Thank you.

    1. Hi KT, nice question!
      In this particular example, the built in MATLAB image I used
      (origImg = imread('ngc6543a.jpg');)
      already had the 3rd dimension for color.

      However, if you had a grey-scale image (without the 3rd dimension), you can replicate the image 3 times. So change this line,
      blendImg = origImg + alphaImg;
      to
      blendImg = repmat(origImg, [1,1,3]) + alphaImg;
      The repmat() function replicates the original image 3 times in this case.

  2. Dear Sir,
    I am working on an image, processing part of it, with out cropping that part, now I want to read and display the whole image after processing that part. what in your opinion the code will be.

  3. Dear Sir,
    I am doing the DWT on an image and I would like to hide information using the HH part of the image, but to do so I have to process that area ( HH), then re embed the information in that area. So that I need the help to do ( processing and then read the entire image) back again. I have to do all that without doing any cropping in the image.
    Thank you in advance
    Yours
    Ziyad

Leave a Reply