# change grayscale pixel color by xy coordinates

19 views (last 30 days)
v10as on 4 Aug 2015
Commented: v10as on 5 Aug 2015
I have a piece of code that returns the x and y coordinates of a rectangle that I draw on a grayscale image.
imshow(frameA);
H=imrect;
Position = wait(H);
Position contains [x y h w], where x,y = xy coordinates of top left corner of rectangle, h=rectangle height, w =rectangle width. So I have all the coordinates I need.
How can I use these coordinates to modify the color of the pixels in this rectangle?
If I use frameA(x,y) = 1 for instance, the x,y here corresponds to the indices of the pixels and not their spatial coordinates.

Image Analyst on 4 Aug 2015
With frameA() you need to pass in the row and column, in that order, not x and y in that order. So you'd need frameA(y, x) but even then you'd need to convert y and x to integers because you can't have fractional values: frameA(round(y), round(x)).
To set the values in the rectangle to a particular gray scale, you do something like this
[rows, columns, numberOfColorChannels] = size(frameA);
if numberOfColorChannels > 1
% Convert to grayscale if it's color.
frameA = rgb2gray(frameA);
end
col1 = round(Position(1));
col2 = round(col1 + Position(3));
row1 = round(Position(2));
row2 = round(row1 + Position(4));
frameA(row1:row2, col1:col2) = desiredGrayLevel;

v10as on 4 Aug 2015
So it is not possible to change the pixel color on a grayscale image, to red?
I actually have a video that I am reading in frames and I need to have a little red mark to identify a particular location in the video. Is it possible to do this any other way?
Image Analyst on 4 Aug 2015
If it's gray scale, you can only display it as red via a colormap. To make it really red, it has to be a 3D RGB image.
To indicate some point with a red mark over an image, you can use plot()
imshow(grayImage);
hold on;
plot(column, row, 'r.', 'Markersize', 30);
v10as on 5 Aug 2015
That was extremely helpful! Thank you.