MATLAB – how to highlight select pixels in an image

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. 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

  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. 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.

Questions/comments? If you just want to say thanks, consider sharing this article or following me on Twitter!