There’s all these trackers that keep forming (like Touche the other day), i’d love to talk to you sometime and maybe discuss how you are implementing some of these things and what your future plans are. Some of the new features you’re wanting to add in, are also things I’d like to add into the new tracker that’ll be a part of lux. Instead of all of us working separately just cause were doing different trackers, I think it’d help if we all collaborate so we can offer the best functionality. The one im working on, ‘tbeta’, will be multiplatform, but obviously people running on mac should have better performance with native mac code. Let me know what you think, and hopefully we can work together on all of this. Keep up the great work
Hey cerupcat,
As far as implementation goes, I am happy to share with you my crazy ideas
(and of course, you can always look at the code when it is all available).
Here is my philosophical thought for the day:
As far as all the new trackers, i think it is great. Touche looks like a great tracker, and I cant wait to see lux when it gets all done. Since we are still kinda early days with the whole MT thing, and while it looks like we are all working separately, i think that we are actually silently collaborating more than it may seem. I know that I have taken many ideas from the trackers that came before. BBTouch wouldnt exist if it wast for the touchlib stuff, opentouch, and the reactivision stuff. Also, when Touche hit the scene a few days ago I went and had a look at all that great code to see how he solved the problems that I had trouble with and so on.
I think it also helps that the ‘new trackers’ BBTouch and Lux and Touche are all very differently featured. (just to pick on the ones that are all Mac-friendly) This way we can experiment with all of them and then the next tracker (like your tbeta) will be able to cherry pick the best ideas and build on those.
I think that right now we are in the expansion stage of the MT stuff, right now we need to encourage all the new ideas and when there is a saturation of tracker options available, then you will start to see a coalescing of the best technologies (maybe 12 or 18 months from now i think).
Anyhow, i guess what I am saying is Yes! I agree with you!
and i think it is already happening, it just doesn’t look like it on a day to day basis.
/end philosophical meandering
in any case, I would be happy to help out in any way i can. If you want to get down to the nitty gritty i can blag on about pixel-level edge detection and region of interest mapping all day long
just let me know what you want me to go on about
to answer your immediate questions (broadly):
implementation: I feel like I am running down a slightly different path than the other trackers. I am trying to avoid ‘filters’ if at all possible (kinda). My original design goal included adding a bunch of filters into the chain, but as I was writing the detector, i changed my mind. Now I am trying to implement the blob detection without any matrix or kernel type filters and I am focusing on just what is possible with a ‘single pixel’ of information (trying to keep the cycles down)
My thoughts are this: (and they may be totally lame, but they are mine
while I personall can’t see the difference between a pixel that is value 125 and a pixel that is 126, the computer sure can. Making the input image all filtered and sharp with nice white blobs on a black background is great to look at but it seems (to me) to be a bit of a waste of processor time when all the data you really need to track the blobs are in the source image to begin with. Basically, after the sequence grabber delivers the bitmap data to the app, I dont want to look at any given pixel more than once. Also there are lots of cheats you can do to accomplish some of the things that the filters are doing, but much faster. (for instance, most everyone is applying a blur of some kind to help minimize the noise. Instead of that, if you require blurring you should just do a downsample of the image to a smaller size (which is almost exactly the same thing as a blur, only you end up with far fewer total pixels, which will make your detector run that much faster.)
that said, I am using the background image (so technically I am doing a background subtraction filter) and the new idea will use the background image as a sort of lighting map. darker background pixels will map to lower thresholds when comparing the foreground pixels. so instead of taking the difference between the foreground and the background and comparing it to a global threshold (which is what is happening now) it will compare it to a local threshold (local to that one background pixel). Theoretically this should make it track blobs in darker areas better. It makes calibration a bit more complicated, but makes the tracking a bit more accurate. (i implemented a version of this in my old prototype code, and it hasn’t quite made it into the office BBTouch code yet)
Of course, this might all be a really bad idea, but that is the direction I am heading with my implementation. the core image stuff is fantastic, and it is very smart about applying all of it’s filters as a single kernel, which is super fast, but you still need to run the detector on those bits after the filters are done. So far in all my testing it takes longer to run the CI filter chain then it does to run the detector on the raw images.
My guess is that a combination of simple filters and smarter detectors is really the ultimate solution.
Anyhow I am going on and on
let me know if there is anything i can help with, or if you want a super nerdy detailed explanation