tag:blogger.com,1999:blog-1447977105476062291.post9014649045655637347..comments2016-08-26T07:40:44.138+02:00Comments on The Computer Vision: Photoconsistency Visual Odometry IIMiguel Algaba Borregohttps://plus.google.com/100983545022619620204noreply@blogger.comBlogger15125tag:blogger.com,1999:blog-1447977105476062291.post-56737675873923089342014-02-02T09:48:42.966+01:002014-02-02T09:48:42.966+01:00Hi Junaid, sorry for my late reply. If you want to...Hi Junaid, sorry for my late reply. If you want to track a set of feature points across multiple images you can try to use a similar approach to the one of Kanade-Lucas algorithm. Basically what you can do is to extract the feature points on one image and then track those same points over the next images until you loose the track for each point. This approach will be faster than matching points on each pair of consecutive images and will also produce larger baselines for computing the relative rigid body motion, so you will probably improve the results.<br /><br />Best,Miguel Algaba Borregohttp://www.blogger.com/profile/17867765117020786275noreply@blogger.comtag:blogger.com,1999:blog-1447977105476062291.post-57565688055578071602013-12-27T12:06:47.095+01:002013-12-27T12:06:47.095+01:00Sorry i forgot i am also using KINECT sensor to ge...Sorry i forgot i am also using KINECT sensor to get the 3D information.junaid ahmedhttp://www.blogger.com/profile/08803080449647214780noreply@blogger.comtag:blogger.com,1999:blog-1447977105476062291.post-67477039538120485172013-12-27T12:05:48.806+01:002013-12-27T12:05:48.806+01:00Hi Miguel,
I am also implenting visual Odometry, ...Hi Miguel,<br /><br />I am also implenting visual Odometry, and i am using SURF features to compute the 3D rigid body transformation of the camera. I have implented it :) . <br /><br />But it produces bad results when it misses the features. My question is, is there any way to preprocess the image before i do the SURF on it so that i get same SURF features every time. And what to do when we have no features. <br /><br />How essential is TRACKING in this context.<br /><br />There is a lot to answer, but i would be glad if you answer.<br /><br /><br />Thanks. Good Job.<br />Junaid junaid ahmedhttp://www.blogger.com/profile/08803080449647214780noreply@blogger.comtag:blogger.com,1999:blog-1447977105476062291.post-92170239169622801282013-11-20T22:05:38.106+01:002013-11-20T22:05:38.106+01:00Hi Geremy,
I'm glad to know that you find thi...Hi Geremy,<br /><br />I'm glad to know that you find this project useful. If you want to extend this project to add loop closure, we can collaborate together to make it possible. This is one of the things that I had in mind for a long time, so it would be nice to chat with you about possible solutions. I have some ideas on how to set the information matrix between two poses since I did this same thing for the kinectslam6d project as you mention. For that project I used one "heuristic" value to encode the edge weights based on the number of matched points, but for me it seems better to use the photometric residues for that.<br /><br />Please, send me an email so that we can schedule a chat to talk about this.<br /><br />BTW, I have pasted here the new repository for the project. The old one in Google Code is not maintained anymore and the new one hosted on Github:<br />https://github.com/MiguelAlgaba/photoconsistency-visual-odometry<br /><br />I have made some important changes in the new repo and I will continue maintaining it little by little :)<br /><br />Best regards,<br />Miguel AlgabaMiguel Algaba Borregohttp://www.blogger.com/profile/17867765117020786275noreply@blogger.comtag:blogger.com,1999:blog-1447977105476062291.post-42442722390669334792013-11-20T22:03:40.380+01:002013-11-20T22:03:40.380+01:00This comment has been removed by the author.Miguel Algaba Borregohttp://www.blogger.com/profile/17867765117020786275noreply@blogger.comtag:blogger.com,1999:blog-1447977105476062291.post-82117351196766092402013-11-20T20:36:53.911+01:002013-11-20T20:36:53.911+01:00Hi Miguel. your project is very interesting, very ...Hi Miguel. your project is very interesting, very nice work! I'm trying to extend it, by adding the loop closure detection, as you have done in another project (kinestslam6d). I'm using the very same graph optimization library(g2o), but i cannot figure out how to set the information matrix between 2 related poses in the graph(basically the edge). As a reference, I have the paper "Large-Scale Multi-Resolution Surface Reconstruction from RGB-D Sequences", which is the evolution of one of your references, but I've found that for some reason their proposal is not indeed working (the edges in the graph seem not to be weighted correctly by using the (J^t J)^-1).<br />Do you have any suggestion? Did you face the same problem? Are you planning to add the graph optimization also to this fantastic project?<br /><br />Thank you very much.<br />regards,<br />geremygeremy wayhttp://www.blogger.com/profile/00305658825476860458noreply@blogger.comtag:blogger.com,1999:blog-1447977105476062291.post-25567105688014616232012-11-25T13:55:28.167+01:002012-11-25T13:55:28.167+01:00Hi Steve,
First of all I apologize for my very la...Hi Steve,<br /><br />First of all I apologize for my very late reply, I moved to another city and I had no time to answer before. It is very good to see that you found this project useful and that it worked for the X-tion pro camera with that minimal change. <br /><br />Best regards!<br />Miguel Algaba.Miguel Algaba Borregohttp://www.blogger.com/profile/17867765117020786275noreply@blogger.comtag:blogger.com,1999:blog-1447977105476062291.post-41722759572608231982012-11-08T10:52:05.467+01:002012-11-08T10:52:05.467+01:00Hello Miguel
You did great job. This project real...Hello Miguel<br /><br />You did great job. This project really works for me.<br />I'm running your program with ASUS X-tion pro, but the result is not good. Then I go into the source code and found that cameraMatrix could be the problem (Because you are running with Kinect).<br /><br />So, I calibrate X-tion pro and get intrinsics matrix, then replace cameraMatrix. <br /><br /> Eigen::Matrix3f cameraMatrix; cameraMatrix <<<br /> 5.4346348954367033e+02, 0., 3.1950000000000000e+02,<br /> 0., 5.4177605601085429e+02, 2.3950000000000000e+02,<br /> 0., 0., 1.;<br /><br />Everything works fine and result is good now<br /><br />Thank you<br /><br />Steve史帝夫嘰嘰叫http://www.blogger.com/profile/15406007489718427109noreply@blogger.comtag:blogger.com,1999:blog-1447977105476062291.post-56484884890813837842012-10-12T15:44:33.218+02:002012-10-12T15:44:33.218+02:00Hi again Miguel,
After calculating jacobianProy an...Hi again Miguel,<br />After calculating jacobianProy and jacobianRt separately, I get the same equations as yours in CPhotoconsistencyOdometryBiObjective class. And I found that I forgot to transform the 3D points by rigid motion for projectiveFunction that is why I got the different equations. And I think the "temp11" should be cos(pitch)*cos(yaw), not cos(pitch)*cos(yaw)+x, in CPhotoconsistencyOdometryAnalytic class. When you calculate the transformed point, it will become px*(cos(pitch)*cos(yaw)+x). It should be px*(cos(pitch)*cos(yaw))+x. But I am not sure it is right. <br /><br />Thanks for your hints again :)<br /><br />Your sincerely,<br />JohnJohnnoreply@blogger.comtag:blogger.com,1999:blog-1447977105476062291.post-15711431719268138702012-10-11T20:43:25.129+02:002012-10-11T20:43:25.129+02:00Hi again John,
As you say, jacobianPrRt's siz...Hi again John,<br /><br />As you say, jacobianPrRt's size is 2x6 and should be the same if you compute both jacobians and multiply them. Please take a look inside the CPhotoconsistencyOdometryBiObjective class. Within the CPhotoconsistencyOdometryBiObjective.h file, I calculated the jacobianProy and jacobianRt separately. Do you get different equations there too? Can you write me with your equations?<br /><br />Best regards,<br />Miguel Algaba.Miguel Algaba Borregohttp://www.blogger.com/profile/17867765117020786275noreply@blogger.comtag:blogger.com,1999:blog-1447977105476062291.post-35194283058969923172012-10-11T16:11:31.940+02:002012-10-11T16:11:31.940+02:00Hi Miguel,
Thanks for your answer that is really ...Hi Miguel,<br /><br />Thanks for your answer that is really helpful. But after calculating the jacobian of projectiveFunction and rigidTransformationFunction, the eq. are different with yours. Let me make sure that<br /><br />projectiveFunction : Intrinsic Camera Matrix (3x3)<br /> (focal length and center of x,y)<br />rigidTransFunction : Extrinsic Camera Matrix ([R|t] 3x4)<br /> (x,y,z,yaw,pitch,roll) <br /><br />Then I calculate the jacobian of both and multiply them to get jacobianPrRt (2x6). Is that anything wrong or I get the wrong way?<br /><br />Your sincerely,<br />JohnJohnnoreply@blogger.comtag:blogger.com,1999:blog-1447977105476062291.post-31390106996960410932012-10-11T11:19:32.617+02:002012-10-11T11:19:32.617+02:00Hi again John,
I will answer your second question...Hi again John,<br /><br />I will answer your second question first :). Basically jacobianPrRt is the jacobian of the composition of two functions: projectiveFunction(rigidTransformationFuction).<br /><br />- projectiveFunction: This function projects a 3D point to the 2D plane using camera parameters.<br />- rigidTransformationFunction: This function applies a 6DoF rigid body motion to a 3D point.<br /><br />You can see jacobianPrRt as jacobianPr*jacobianRt where:<br /><br />- jacobianPr: This is the first order derivative of the projectiveFunction with respect to (x',y',z'). Where (x',y',z') are the 3D coordinates of a transformed (x,y,z) point. <br />- jacobianRt: This is the first order derivative of the rigidTransformationFunction with respect to (x,y,z,yaw,pitch,roll).<br /><br />Ok, now I will answer to your first question. As you can imagine, the analytic form of the jacobian contains a lot of operations which are the same for all the 3D points. To avoid computing all those operations for every 3D point I have defined several temporal variables that help me obtain better runtime performance.<br /><br />I hope this helps, If you have any other question, please don't hesitate asking :)<br /><br />Best regards,<br />Miguel Algaba.Miguel Algaba Borregohttp://www.blogger.com/profile/17867765117020786275noreply@blogger.comtag:blogger.com,1999:blog-1447977105476062291.post-51712669692126708572012-10-10T16:25:46.710+02:002012-10-10T16:25:46.710+02:00Hello Miguel,
Thanks for your kind. I was confused...Hello Miguel,<br />Thanks for your kind. I was confused about computeResidualsAndJacobians() in CPhotoconsistencyOdometryAnalytic.<br /><br />1.How did you calculate the "temp1" ~ "temp26" ? and what are they meaning?<br /><br />2.What is "jacobianPrRt" doing ? Is it related to the gradient of the image?<br /><br />Thanks in advances for providing the paper. :)<br /><br />Your sincerely,<br />JohnJohnnoreply@blogger.comtag:blogger.com,1999:blog-1447977105476062291.post-74984018111455169732012-10-09T12:09:00.403+02:002012-10-09T12:09:00.403+02:00Hello John,
First of all thank you for your inter...Hello John,<br /><br />First of all thank you for your interest! Sure I can help you understand how this work. Which part do you think it is confusing? I have not written any specific document on this, however this solution is inspired by the following two papers and the underlying idea is pretty similar:<br /><br />http://vision.in.tum.de/_media/spezial/bib/steinbruecker_sturm_cremers_iccv11.pdf<br />http://www.i3s.unice.fr/~comport/publications/2011_ACRA_audras.pdf<br /><br />Best regards,<br />Miguel Algaba.Miguel Algaba Borregohttp://www.blogger.com/profile/17867765117020786275noreply@blogger.comtag:blogger.com,1999:blog-1447977105476062291.post-69619903942660144072012-10-08T11:12:37.685+02:002012-10-08T11:12:37.685+02:00Hello Miguel,
Your project is really nice!! I am v...Hello Miguel,<br />Your project is really nice!! I am very interested in your project. I would like to understand how you do that, so I am trying to trace your source code. But it makes me a little confused. Could you provide some document or papers for your nice project? :)<br /><br />Best regards,<br />JohnJohnnoreply@blogger.com