I want to change color of pixel to red in color image. The pixel is selected on the basis of specific criteria. The input image is not a simple color image, it is processed image in which mostly pixel have value[255, 255, 255]. I am using following code………….. The code is working but it change color of every pixel to red instead to specific one. thanks ! I = imread('seedpixelofwatershedriver.jpg'); >> [m, n, k]=size(I); >> for i=1:m for j=1:n r=I(i, j, 1); g=I(i, j, 2); b=I(i, j, 3); avg=0; avg=(r+g+b)/3; if(avg<250) I(i,j,1)=255; I(i,j,2)=0; I(i,j,3)=0; % change value to red color end end end >> figure, imshow(I), title('seddedImage')
MATLAB: How to change color of particular pixel selected on specific criteria in color image
color image procrssingImage Processing Toolboxpixel color
Related Solutions
Why don't you have access to the original image? If you don't, for some strange reason, then you can find the pixels by first extracting the individual color planes, then median filtering them and replacing the colored pixels with the median filtered pixels. It will work a lot better if you have the original uncompressed image, rather than the blurry one you uploaded, which does not have sharp graphics.
rgbImage = imread(fullFileName);% Get the dimensions of the image. numberOfColorBands should be = 3.
[rows columns numberOfColorBands] = size(rgbImage);% Display the original color image.
subplot(2, 2, 1);imshow(rgbImage);axis on;title('Original Color Image', 'FontSize', fontSize);% Enlarge figure to full screen.
set(gcf, 'units','normalized','outerposition',[0 0 1 1]);% Extract the individual red, green, and blue color channels.
redChannel = rgbImage(:, :, 1);greenChannel = rgbImage(:, :, 2);blueChannel = rgbImage(:, :, 3);% Then do a median filter on each one.
medianRed = medfilt2(redChannel, [7 7]);medianGreen = medfilt2(greenChannel, [7 7]);medianBlue = medfilt2(blueChannel, [7 7]);% Display the image.
subplot(2, 2, 2);imshow(medianRed);title('Red Median Image', 'FontSize', fontSize);% Then find the pure color pixels.
thresholdValue = 40;pureRed = redChannel >= thresholdValue & greenChannel < thresholdValue & blueChannel < thresholdValue;pureGreen = redChannel < thresholdValue & greenChannel >= thresholdValue & blueChannel < thresholdValue;pureBlue = redChannel < thresholdValue & greenChannel < thresholdValue & blueChannel >= thresholdValue;% Display the image.subplot(2, 2, 3);imshow(pureRed);title('Red Mask Image', 'FontSize', fontSize);% Then replace each pure color with the median from that channel.
redChannel(pureRed) = medianRed(pureRed);greenChannel(pureGreen ) = medianGreen(pureGreen );blueChannel (pureBlue ) = medianBlue(pureBlue );% Construct the new color image
rgbImageFixed = cat(3, redChannel, greenChannel, blueChannel);% Display the image.subplot(2, 2, 4);imshow(rgbImageFixed);title('Fixed RGB Image', 'FontSize', fontSize);
Convert to grayscale and then threshold and find the bounding box
clc; % Clear the command window.
close all; % Close all figures (except those of imtool.)
imtool close all; % Close all imtool figures.
clear; % Erase all existing variables. Or clearvars if you want.
workspace; % Make sure the workspace panel is showing.
format long g;format compact;fontSize = 20;% Read in the color image.
folder = pwd;baseFileName = 'm2.bmp';% Get the full filename, with path prepended.
fullFileName = fullfile(folder, baseFileName);if ~exist(fullFileName, 'file') % Didn't find it there. Check the search path for it.
fullFileName = baseFileName; % No path this time.
if ~exist(fullFileName, 'file') % Still didn't find it. Alert user.
errorMessage = sprintf('Error: %s does not exist.', fullFileName); uiwait(warndlg(errorMessage)); return; endendrgbImage = imread(fullFileName);% Get the dimensions of the image. numberOfColorBands should be = 3.
[rows, columns, numberOfColorBands] = size(rgbImage);% Display the original color image.
subplot(2, 3, 1);imshow(rgbImage, []);axis on;title('Original Color Image', 'FontSize', fontSize);drawnow;% Enlarge figure to full screen.
set(gcf, 'units','normalized','outerposition',[0 0 1 1]);% Histogram the red channel, but there is a huge spike at 255 so let's not count those.
subplot(2, 3, 2);grayImage = rgb2gray(rgbImage);imshow(grayImage, []);title('Gray Scale version', 'FontSize', fontSize);subplot(2, 3, 3);histogram(grayImage(grayImage<255))grid on;title('Histogram of Gray Scale Image', 'FontSize', fontSize);someThresholdValue = 150;binaryImage = grayImage > someThresholdValue;% Take largest blob
binaryImage = bwareafilt(binaryImage, 1);subplot(2, 3, 4);imshow(binaryImage);grid on;title('Binary Image', 'FontSize', fontSize);% Label the binary image.
labeledImage = bwlabel(binaryImage);props = regionprops(labeledImage, 'BoundingBox');bbox = props.BoundingBoxcroppedImageRGB = imcrop(rgbImage, bbox);subplot(2, 3, 5);imshow(croppedImageRGB);grid on;title('Cropped RGB Image', 'FontSize', fontSize);% Gray scale version of cropped image
croppedImageGray = imcrop(grayImage, bbox);subplot(2, 3, 6);imshow(croppedImageGray);grid on;title('Cropped Gray Scale Image', 'FontSize', fontSize);
Best Answer