victorprad / InfiniTAM

A Framework for the Volumetric Integration of Depth Images
http://www.infinitam.org
Other
918 stars 351 forks source link

Teddy failed #143

Closed IlyaKrotov closed 4 years ago

IlyaKrotov commented 4 years ago

Hello! Thank you for your awesome lib. I've compiled it without any problems, but I wasn't able to run it on my sequences. Then I tried your Teddy and it failed with the same problem.

frame 501: time 4.27, avg 4.54 frame 502: time 3.64, avg 4.54 frame 503: time 3.60, avg 4.54 error reading file 'Teddy/Frames/0504.ppm' error reading file 'Teddy/Frames/0504.pgm'

I tried to fix it, but it wasn't work. Do you have any ideas about it?

IlyaKrotov commented 4 years ago

I did it in docker btw

victorprad commented 4 years ago

There are only 503 frames in the video, and that's the message it shows when the reader ran out of frames.

IlyaKrotov commented 4 years ago

Yes, but why it failed? I didn't explicitly put number of frames anywhere

sgolodetz commented 4 years ago

So what actually happens is that ImageFileReader::loadIntoCache fails to read the 505th frame (because there are only 504 frames in the Teddy sequence) and prints a message saying that there's been an error whilst trying to do the read. However, the program itself continues without a problem - it's basically just a warning message that has the word "error" in it. Arguably a different message would worry people less.

sgolodetz commented 4 years ago

And as to not having put the number of frames anywhere, it just keeps trying to read frames until it runs out of frames to read.

IlyaKrotov commented 4 years ago

Thank you!

Could you also explain two last numbers in calib.txt?

IlyaKrotov commented 4 years ago

So what actually happens is that ImageFileReader::loadIntoCache fails to read the 505th frame (because there are only 504 frames in the Teddy sequence) and prints a message saying that there's been an error whilst trying to do the read. However, the program itself continues without a problem - it's basically just a warning message that has the word "error" in it. Arguably a different message would worry people less.

That is a problem in case of cli version, because you are unable to save a result.

sgolodetz commented 4 years ago

If I remember right, the last two numbers in calib.txt are the parameters for ITMDisparityCalib, which specify how to compute a depth image from either a disparity image or another depth image.

There are two types of transformation used, called KINECT and AFFINE. The comments in ITMDisparityCalib.h explain the difference between them. If you take a look at ITMCalibIO::readDisparityCalib, you'll see that by default (and notably for the Teddy sequence), the transformation type is KINECT. As it says in the above-mentioned comment, the two values c_1 and c_2 are then used to transform disparity values into depth values using the formula 8c_2f_x / (c_1 - d).

In the code, the actual transformation is performed in the view builder - see ITMViewBuilder_Shared.h, and in particular the function convertDisparityToDepth for the KINECT case (for AFFINE, the corresponding function is convertDepthAffineToFloat). If you look at the places that call those functions, you'll get a better idea of how everything ties together.

Hope that helps!

YingjieYin commented 4 years ago

depth image from either a disparity image or another depth image.

i don't understand the principle of "compute a depth image from either a disparity image or another depth image", do you have any materials to explain the two parameters?

ddkats commented 4 months ago

Hi @IlyaKrotov @victorprad, Can you please share the Dockerfile for InfiniTAM ?