I am struggling to work out how image coordinates are calculated and how to be consistent when finding particular points in an image using these coordinates for further analysis. I don't think it is necessarily a bug, but it makes it tricky to work with and modify images.

This is best shown by the following example.

We make a test image:

testIm=ImagePad[Image[IdentityMatrix[15]], {{0, 10}, {0, 0}}]


We then replace one of the pixels (at position 20,3) with the value 2 (so it is easy to find.)

testIm2=ReplacePixelValue[testIm, {20, 3} -> 2]


We now try to find the coordinates of this pixel with the value 2.

coords=Position[ImageData[testIm2], 2 | 2.]

which gives the result {13,20}? What is going on here ? How can we be sure of choosing the right pixel values ?


1 Answer 1


It seems that the following is happening. In the command ReplacePixelValue the pixels are numbered in the first coordinate from left to right, then in the second coordinate from bottom to top, i.e. a standard x-y Cartesian system. In the command Position[ImageData[]] the result is coordinates numbered firstly from top to bottom, and secondly from left to right. To convert the coordinates then we have in the first system

$(x_i,y_i)$ which gives coordinates $(y_i,1+x_{dim}-x_i)$ where $x_{dim}$ is the dimension of the image in the x-direction in the first coordinate system. I hope this helps other people dealing with this problem


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.