-
Notifications
You must be signed in to change notification settings - Fork 151
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
weird result on Trajectory for Variable Frame-Rate dataset #51
Comments
also, could somebody please shed some light on how to perform the newton step with the data structure of openDTAM to get subpixel level result? |
Regarding your first question, we already penalize depth discrepancy when For the second question: The newton step should already be included in the AFAIK the only part of DTAM not implemented is the accelerated exhaustive On Sun, Oct 2, 2016 at 11:03 AM, ShuangLiu1992 [email protected]
|
Thank you for your reply! |
That's odd, I remember the top of the printer specifically having a problem Also, your solution looks mirrored to me, is there a reason for that? -Paul On Sun, Oct 2, 2016 at 2:59 PM, ShuangLiu1992 [email protected]
|
Right now the code in the repo doesn't support opencv 3.0, so I rewrote some parts of to make it compatible with opencv 3.0, the reason solution looks mirrored is might be because I flipped it when saving it as .ply or .obj files. turns out the weird result might be due to I dropped the third parameter when loading the image, because I didn't understand (still don't understand) what it was doing. After adding the third parameter back the result looks more acceptable now, but the monitor still isn't a very flat surface. imread(png[imageNumber].string(), cv::IMREAD_UNCHANGED).convertTo(image, CV_32FC3, 1.0 / range, 1.0 / 255); Also, what's the projection formula in openDTAM? I want to be able to convert other pipeline's camera and rotation matrix, translation vector to openDTAM format for testing. e.g. openMVG, openMVS, other SLAM tracking such as orbSLAM, LSD_SLAM etc |
I suspect the reason for the 1.0/255 is to avoid having totally black I tried to make the external interfaces for OpenDTAM follow the conventions On Sun, Oct 2, 2016 at 4:33 PM, ShuangLiu1992 [email protected]
|
Getting weird result from converted camera matrix, is the camera matrix applied to the translation vector before it was added to the vertices? isn't the projection formula supposed to be: it seems in openDTAM the formula is: Say I have got a bunch of images and their corresponding camera position and rotation in the format of openMVG, I don't know near, far and depth step, how can I convert the camera parameters to openDTAM format? In theory, I can just replace the following code: float wi = p.data[8] * xf + p.data[9] * yf + p.data[11]; in CostVolume.cu with my own projection formula, and the denoiser and optimizer would still work, is that right? |
OpenDTAM does use: The trick is that the third coordinate of OpenDTAM internally is not real z. It is given by: The reason for all this work is that for stereo the real z depth is not a natural measure. The natural measure is 1/z (i.e. the ideal estimator for stereo is heteroskedastic in z, but homoskedastic in 1/z). I then just do a linear transformation on 1/z to make it range from [0, number_of_layers_in_cost_volume-1] You can use real z for the projection if you like, but the results are worse if the range of depths being solved for is an appreciable fraction of the distance to the nearest depth (e.g. if you reconstruct things between 9 and 10m from the camera, then real z will probably work fine, but if you try to reconstruct things from 5 to 20m, then it will be hard to get the whole cost volume to denoise properly, and the Newton step will be biased. Worse, if you try to use 5m to infinity then real z doesn't even make sense). In the stereo literature they say that disparity and not depth is a natural measure. Disparity is proportional to 1/depth, so it is basically the same argument as above. OpenMVP and other feature based approaches don't have to worry about this because they are solving for minimal residuals in the image plane rather than in 3-D, which automatically removes the heteroskedasticity issues. The denoiser is unaffected by all of this. The optimizer will still work with real z, but will produce biased results. |
Thank you so much for your thorough explanation, I will try it. For me I already have the vertices, rotation and translation of an object in the scene, is there someway to validate that the combination of my rotation, translation and camera input is projecting the vertices to the right screen coordinate in openDTAM? Also, since I only need a not so accurate depth map to work with, do you think DTAM will be definitely faster, or more suitable than other multi view stereo algorithm, for example patch match stereo? Can I email you privately about my idea/use case of openDTAM and discuss some technical details with you? Don't know if you are still working closely with academia but I'm trying to write a paper on facial SLAM, maybe we could work together? |
That sounds interesting. I don't know how much time I have for actual work As for writing a paper, I'm good at editing but very bad at writing Anyway, you could email me at [email protected] <-words reversed to On Tue, Oct 4, 2016 at 4:45 AM, ShuangLiu1992 [email protected]
|
Just emailed you, please let me know if you have received it. Thank you! |
Hi @ShuangLiu1992 , Your reconstruction looks amazing. Is it possible to share the way of 3D reconstruction you used to me? Many thanks, |
@ShuangLiu1992 |
the test data is downloaded from https://www.doc.ic.ac.uk/~ahanda/VaFRIC/test_datasets.html.
It seems the program is producing weird result on the computer monitor because it is all black and the cost/correspondence is ambiguous, Is there some quick fix to penalise large depth discrepancy when there isn't enough confidence to support it?
The text was updated successfully, but these errors were encountered: