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.
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 🙂
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
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.
Hi Ziyad, I’m not sure if I understand your question. What have you tried so far?
But
origImg
andalphaImg
have different dimensions,256 256
and256 256 3
respectively, so Matlab won’t allow them to be added. Thank you.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.