Previously, I posted that the tracking engine is now connected with an interface. I've since continued work on adding functionality to the interface and refining how the engine works. This includes working on some helper functions for when tracks fail. It's still all a little clunky, but it's enough to get something working.
The video below shows an example of a tracked feature with my engine. The tracking marker may be a little hard to see in smaller formats - head over to YouTube if you need to see a bigger version. The tracking marker is circled green, and is located on the left side of the image:
In the video above, the feature is successfully tracked across 114 frames. The track eventually stops, most likely because it goes off screen. The tracking itself seems to be pretty good though. I'm pretty happy with the result.
I worked a bit more on the tracking menu system as well. Not shown here, but for example; where a track fails, I can now manually set it's location from a previously known place and ask the engine to continue from there.
Some tracks still manage to fail at times. I suspect some of them have to do with image attributes like motion blur. There's also the occasional error about image residue being too large. I'm not completely sure of what this means, but I think it's to do with the difference between the first image and the second image. If the images themselves are too different, it thinks the 'residue is too large' and fails the test. Oddly enough, I can see in some of those cases, that the tracked position is actually there and is probably OK. I'm wondering if this is therefore a noise issue? I'm still trying to figure these things out.
I also mentioned in the previous post, that a memory issue has been preventing the system from advancing through a clip's frames. It would crash after a dozen or so frames because the program would run out of system memory. I believe I've finally overcome this. I think it was an issue with Visual Studio!
While all this is a good outcome, I still think there's room for improvement. For example, I'd like to run a test with multiple feature tracking markers, and see how I deal with that in the interface. What do I do if one track fails but others succeed? Do I drop the failed marker, or do I stop tracking all of them and let the user 'reset' it? So a few things to think about. I'll try make another video that shows multiple tracking markers when I have the time as well.
Another task also coming up quickly is to start connecting the lens distortion correction engine to an interface. Being able to apply distortion correction will hopefully help to set more accurate marker locations. I do have an early interface but you can't do anything with it yet - it's just a skeleton placeholder. I also need to add in the ability to import reference clips, such as an image of a checkerboard pattern. So a bit to unravel here as well.
But I'm pretty happy with where this is heading. I think the tracking engine is in a good place, and I can just about use it now. Awesome!