Ask Your Question
3

Image stitching in real-time (Parallel Processing)

asked 2013-01-27 18:36:37 -0600

Possede gravatar image

Hello all,

I have a little over 3 months to put together my best attempt at image stitching in real-time. I am using 3 webcams (@320x240 pixels) which have been stripped back to their PCBs and mounted onto aluminium - i.e. their positions and angles relative to each other are fixed. I first approached this using MATLAB but have had to give that up because it is too slow at processing. I have now turned to OpenCV hoping that I will be able to take advantage of the vast library and improved processing speeds!

I believe my best chance of achieving image stitching in real-time would be to utilise the power of the GPU. My question is, would I be better off purchasing an Nvidia GTX 295 (with 2 GPUs) or a slightly newer card such as the Nvidia GTX 570? Or would my i7 920 (4 cores) suffice to process the data in parallel? I would be happy to hear if anyone has any pointers or general advice about the project as well.

Cheers!

edit retag flag offensive close merge delete

2 answers

Sort by ยป oldest newest most voted
3

answered 2013-01-28 10:43:05 -0600

ubehagelig gravatar image

updated 2013-01-28 10:44:42 -0600

Check out this: http://www.youtube.com/watch?v=3in4e_yYOIA

He also has all his source code available for download in the description.

I am almost certain that your performance would increase significantly if you choose GPU over CPU. That has been my own experience with background subtraction. I saw a vast increase in performance on a quad core intel vs. a lower-to-middle end Nvidia GPU.

In regards to GPU acceleration: Go for the latest generation Nvidia card you can find. The amount of CUDA cores is what is important. I see that both the GTX 295 and the GTX 570 has 480 CUDA cores - if those two cards are readily available to you then I would go for the GTX 570. I think the 570 is not only faster, it will also mean that you don't have to worry about getting the code to work on a dual-GPU setup.

If you plan on buying a graphics card then check out the latest generation. With the 600 series they increased the amount of CUDA cores quite significantly. Check out this list and look for the first number of the three in the "Config core" to get the amount of CUDA cores: http://en.wikipedia.org/wiki/GeForce_600_Series#Products

edit flag offensive delete link more

Comments

Ah, that looks like a promising link! I did not come across that video when browsing YouTube. Okay, I think I will go with a newer card such as the nVidia GTX 650/660 TI. From looking at: 'http://www.timzaman.com/?p=2256&lang=en' it seems that there is significant improvement going from the CPU to GPU processing. Hopefully I get something working!

Thanks again!

Possede gravatar imagePossede ( 2013-01-28 17:40:16 -0600 )edit

CUDA can be a bit of a bitch to set up correctly. PM me if you run into trouble. Or rather: Start a thread, ask your question, and PM me and I'll stop by and see if I can be of any help. That way others can benefit from the feedback as well :) The 650 Ti seems like a nice candidate with its 768 CUDA cores and it's not all that expensive. For your project you really don't need that much, so if you can find even an older generation middle-end card that you can borrow then just use that. I saw huge performance gains on background subtraction using 96 CUDA cores GPU vs. 2.4ghz quad core. Went from 4-8 FPS (CPU) to well over 300 FPS (GPU).

ubehagelig gravatar imageubehagelig ( 2013-01-31 04:10:44 -0600 )edit

I decided due to my limited time-frame it would be best to just go ahead and dive into GPU programming. I went ahead and purchased an Nvidia GTX 660 as I was due an upgrade anyway! Thank you for your input, I will keep that in mind if I end up becoming stuck. I look forward to the performance gains!

Possede gravatar imagePossede ( 2013-01-31 14:27:28 -0600 )edit
3

answered 2013-01-28 05:44:29 -0600

Michael Burdinov gravatar image

The images you are stitching are really tiny, so I guess CPU alone would be more than enough for any real time application. Anyway this is not a task that require some high end GPU.

OpenCV has a module with all kinds of algorithms required for stitching. I think it is good starting point for your task.

edit flag offensive delete link more

Comments

Thank you for your input, I will look into that module. I think I will program it with multiple threads to measure its performance and then, if necessary go down the GPU route.

Possede gravatar imagePossede ( 2013-01-28 17:17:26 -0600 )edit

Question Tools

Stats

Asked: 2013-01-27 18:36:37 -0600

Seen: 10,720 times

Last updated: Jan 28 '13