# Weights of linear interpolation in remap function

Hello everyone, I would like understand how weights are computed in remap function when we use linear interpolation?
I tried to use the distance between the warped coordinates and the coordinates of a pixel but I didn’t have the same results as remap.

the xmap and ymap only contain coordinates. these coordinates may be floating point, or they may be a denser fixed point format.

linear interpolation happens inside of `remap()` and it just does what you’d expect.

please explain what you mean. you have given no debuggable details at all.

Actually I’am trying to implement a function that gives the same results as remap().

For the example,
Let A be a 2 x 2 matrix
A=
[[70. 80.]
[10. 30.]]
and let c be the array containig the x-coordinates of each pixel.
c=
[[0. 1.]
[0. 1.]]
I want for the example to remap A after substracting 0.3 from the x coordinate of each pixel. So the new map is given by: new_c=c-0.3

When I use the function remap:

[[48.125 76.875]
[ 6.875 23.75 ]]

But I have a diferent results when I use my function, where the weights are computed by computing the distance of the new coordiantes and their nearest neighbors
for the example, the weight used to interpolate the pixel (-0.3,0) is given by 0 -(-0.3)= 0.3
[[49. 77.]
[ 7. 24.]]

How the difference between the results is explained?

remap internally uses fixed point (integer) math, even if you give it floating point maps. that will cause some rounding.

I don’t remember if it’s 4 or 5 fractional bits. if you calculate with 10/32 = 0.3125 = 5/16, do your results agree with remap then?

further, there’s a `borderMode` that affects how pixels at/over the border are handled.

https://docs.opencv.org/4.x/da/d54/group__imgproc__transform.html#gab75ef31ce5cdfb5c44b6da5f3b908ea4

1 Like

Yes, I had the same results when I use 10/32.