Search code examples
image-processingmatrixmatrix-multiplicationmatplotlib-basemap

Matrix Transformation for image


I am working on an image processing project in python in which I am required to change the coordinate system enter image description here

I thought it is analogous to matrix transformation and tried but it is not working, I have taken the coordinates of the red dots enter image description here


Solution

  • Simply subtract by 256 and divide by 512. The connection is that you see values of 256 get mapped to 0. Therefore, 0 gets mapped to -256, 256 gets mapped to 0 and 512 gets mapped to 256. However, you further need the values to be in the range of [-0.5, 0.5]. Dividing everything by 512 finishes this off.

    Therefore the relationship is:

    out = (in - 256) / 512 = (in / 512) - 0.5
    

    Try some values from your example input above to convince yourself that this is the correct relationship.

    If you want to form this as a matrix multiplication, this can be interpreted as an affine transform with scale and translation, but no rotation:

        [ 1/512 0   -0.5 ]
    K = [   0 1/512 -0.5 ]
        [   0   0     1  ]
    

    Take note that you will need to use homogeneous coordinates to achieve the desired result.

    For example:

    (x, y) = (384, 256)
    
    [X]   [ 1/512 0   -0.5 ][384]
    [Y] = [   0 1/512 -0.5 ][256]
    [1]   [   0   0     1  ][ 1 ]
    
    [X]   [384/512 - 0.5]   [ 0.25 ]
    [Y] = [256/512 - 0.5] = [   0  ]
    [1]   [      1      ]   [   1  ]
    

    Simply remove the last coordinate to get the final answer of (0.25, 0).