Attention! This forum will be made read-only by Dec-20. Please migrate to https://forum.opencv.org. Most of existing active users should've received invitation by e-mail.

# more accuracy getAffineTransform()

Hi all,

The getAffineTransform and invertAffineTransform output the transformation matrix with dtype='float64'. Is there anyway to make it output more accuracy? say dtype='float128'? I MAY need more accuracy in my applications.

In my application, I choose three points with gps locations and xy-points in the image to compute the matrix and I compute the inverse_matrix too. Then, I use the same three points and the inverse_matrix, input the xy values and compute them back to the gps locations. The largest error between the computed gps location and measured gps location is about

M2 = np.array([51, 788, 1.0])
M2 = M2.reshape(3, 1)
result = np.matmul(inv_M, M2)
# p = inv_M * p'
diff = result - np.array([23.90368083, 121.53650361]).reshape(2,1)
print diff
[[-2.86084081e-08]
[ 3.04283202e-06]]


But for other test points, the errors are too much. For example, let's see the bottom point (gps 23.90377194, 121.53645972). The error is 0.00021149 in longitude which is too much (about 21 meters).

M2 = np.array([910, 958, 1.0])
M2 = M2.reshape(3, 1)
result = np.matmul(inv_M, M2)   # p = inv_M * p'
diff = result - np.array([23.90377194, 121.53645972]).reshape(2,1)   //compare to the measured gps location
print diff
[[0.00015057]
[0.00021149]]


Here is my ipynb link text

original image // you can use mouse to get the xy values of feature points. link text

feature points with gps locations // note that this is a resized diagram, the xy value is meanless. link text the gps locations were provided by vendor and they claimed the errors should be <= 30cm...

To check if the gps locations is trustable or not, I tried to plot those gps locations to ROS rviz and check their relative locations to the labeled image. Finally, I think the gps locations is trustable,

here is the png for checking gps locations link text

Any idea?

edit retag close merge delete

1

I don't understand float64 = 15 digits. with 1e6 km (7 digits) precision is micrometer. With modern GPS when you get 10cm error it's really good

( 2019-08-02 04:19:16 -0500 )edit

I think the main source of error could be the image and the precision of pinpointing the three points. Are you using some sort of image processing to get subpixel accuracy or just mark three points with a mouse or something?

( 2019-08-02 16:02:25 -0500 )edit

( 2019-08-05 02:49:51 -0500 )edit

I think your question is off topics. Here it's an opencv forum. You should read this. As @Witek wrote may be problem is in data precision and not in matrix inversion

( 2019-08-05 03:03:59 -0500 )edit

I think the pinpointing and the image is not the problem. Even, I tried to plot those gps locations to ROS rviz ahd check their locations with my eyes. I think the gps locations is trustable,

( 2019-08-05 03:12:32 -0500 )edit

Sort by ยป oldest newest most voted

So it seems that your goal is to get the GPS (or real-world metric) coordinates from pixel coordinates based on 3-point affine transform from a lens distorted image that includes a perspective view? Well, this is not going to work. You need to undistort your image first and then use at least 4 points to get the persepctive transform or even better, use all points that you have and findhomography (assuming the scene/road is flat). You probably do not have your camera model and probably cannot calibrate it in a standard way using a chessboard as you probably have no free access to the camera. In such a case you may use the Tsai method http://homepages.inf.ed.ac.uk/rbf/CVo... with coplanar data points. Unfortunately I have never done the calibration part yet, so I cannot help you further with it now (I have a very similar problem and need to undistort a street scene, but I just seem not to be able to find time to do it).

more

If there is someone here that can help with camera calibration from a single planar view, that would be nice.

( 2019-08-05 09:28:22 -0500 )edit

Official site

GitHub

Wiki

Documentation