I need to take a streaming image from a USB / UVC compliant web camera and digitally magnify it. The application is for people with low vision to be able to read.
The application must run on a MAC / OS X.
I am trying figure which framework to use. I did find that I can use the CALayer and apply an affine transformation, however the image is grainy as you would expect. I need to smooth it out with some method such as anti-aliasing, or some other method..
I know this is a very general question, but I need to know how to focus my efforts. At the moment I am chasing my tail reading docs, etc.
Anybody have a suggestion on what OS X Frameworks, also what algorithms or methods to smooth out grainy magnified images?
Thanks!
You’re basically talking about interpolation–resizing images with some intelligent filling in of information rather than just chopping the pixels. There are various methods you could look into, such as “bilinear”, “bicubic”, etc. In the Apple API you might want to look at CGContextSetInterpolationQuality, which could help with some of the noise you’re seeing. OpenCV is a very extensive image processing library which is readily available on OSX and has a C++ API.
Keep in mind, though, that you will ultimately be limited by the quality of the web cam, and the environment (especially lighting). There are “super resolution” techniques to stitch multiple images together, but they may not be applicable if this is a live-video application.
I can’t overemphasize the importance of good lighting for applications like this. If you think about doing an iOS version of this, look at what apps like Turboscan do using the flash and a “best-of-three” technique. It’s amazing what high-quality images you can get of printed text that way.