Details And Proposals For Object Detection
Here we have the most complicated situations you can have: We want to detect moving objects in a video stream of moving cameras.
Usually detecting moved objects is done from cameras not in motion. In this situation you can use successive frames to get differential images. Unchanged regions in the image become dark, the remaining regions are edges from objects in motion. So you can use the differential images as mask to the current images and get the edges to detect. Ok, you have to combine all the edges correctly to get the real objects, but if you know what kind of object it could be (cars), it is possible do to.
This simple situation isn't given, if the camera itself is in motion. In the real world it would be very complicated to build a system, being able to work perfect here. But we don't start in the real world!
To understand what do to, lets's have a look to the World Viewer. Our simulation contains all objects of the fictive world. These objects are bodies and their visible outside is defined by textures mapped on the surface of it. The World Viewer renders the images of all the bodies as seen from an given point.
To be able to detect moving objects from moving camera's images, you have to:
- Calculate the (previously) detected object's estimated position in the current image's coordinates.
- Render a fake image of this.
- Render the current image.
- Hand the vision engine these two images and have it do a diff to determine motion.
Precisely opposite of real life: we start with the perfect system and if all the stuff works ok, we can add uncertainty. We can simulate imperfect motion sensors, noise, light changes etc., just all the hard things we would have in reality. But we can do it in steps and controlled to find out what to do to handle it well.