Greetings!
In general, I'm curious as to how I may determine which observation (markers in my case) the bundle adjustment accepts or rejects.
My problem is as follows: I'm adding markers to the block (chunk) to introduce additional tie points that came through an offline matching method. Those markers are linked to a couple of images where the matching points may be seen. Those markers serve as control points, which means they lack 3D coordinates.
I'm assuming that Metashape employs some form of robust optimization during bundle adjustment (camera alignment), but I may be wrong. If someone could clarify on that, I would like to hear. The outcome should be which observations are inliers and outliers from the standpoint of optimization. Of course, the optimization has all other different results, but those are unimportant for our discussion. My objective is to determine which markers are inliers and which are outliers, preferably in Python.
To give you a clearer understanding of what I'm attempting to do, consider the following example: I have 150 images, taken from a UAV, with decent overlap and 6 markers in a block, while each one of the markers is observed on average in 36 images. All of the markers have 3D coordinates and are positioned on the image plane. I'm doing three experiments in a row. In the first, all markers are involved in the adjustment process. I'm turning off one of the image's measures (pinned equal to false) in the second experiment. Finally, in the third experiment, I purposefully move the marker (a few hundreds of pixels) in one of the images to simulate an outlier. My expectation is that this measurement should be eliminated during optimization. Becasue I cannot find out which of the observations was an outlier, my evaluation technique is to calculate the 3D accuracy of this marker as well as the RMS of a reprojection error. The results are as follows:
Experiment 1: RMSE=0.6241 [pix] and error(3D) = 0.0070 [m].
Experiment 2: RMSE=0.6284 [pix] and error(3D) = 0.0070 [m].
Experiment 3: RMSE=315.5060 [pix] and error(3D) = 0.3689 [m].
Looking on the gross errors from the 3rd experiment, the outlier was not detected. Could someone collaborate on this issue? Is there anyone who has had a different experience? Is there something I'm missing?
I have another question related to the same topic: how can I locate a marker in a point cloud? I understand that the marker has an estimated position and that it may also be projected on an image plane, but I'd like to link one of the points in a point cloud to a specific marker. The idea behind such a technique is that the rejected marker, or more precisely, the projection on a certain image, should not exist or be invalid, while the proper ones should be discovered. I would be really grateful if someone could suggest a piece of code that would make this possible.
I'm hoping, that I was able to explain myself.