I’m working on a simple video device and I’d like to introduce some standard cool camera features. Amongst all I’d like to introduce
- Focus indicator
- Auto focus
- Auto exposure (ideal exposure time estimation)
Right now I’m looking for some examples, how these features can be implemented. Do you have any useful links?
EDIT :
Ok, I will use standard CCD camera, which can provide me ~ 20fps in ~1MPix resolution. I’m planning to write it in C#, in case of performance issues, I’ll use C++. I’ll have lens + CCD camera + motor.
EDIT :
I’d like to see some more detailed algorithm description. I’m sure some have to be taught in university courses, but I have troubles finding some. For focus indicator I’ve tried a primitive approach, but in some cases it failed.
int verticalPoints = 0, horizontalPoints = 0;
///Calculate the vertical differences
for (int x = 0; x < toAnalyze.Width; x++)
{
for (int y = 1; y < toAnalyze.Height; y++)
{
byte* pixel = (byte*)data.Scan0 + y * stride + x;
verticalDiff += Math.Abs(*pixel - *(pixel - stride));;
}
}
verticalDiff /= toAnalyze.Width * (toAnalyze.Height-1);
///Calculate horizontal differences
for (int y = 0; y < toAnalyze.Height; y++)
{
for (int x = 1; x < toAnalyze.Width; x++)
{
byte* pixel = (byte*)data.Scan0 + y * stride + x;
horizontalDiff += Math.Abs(*pixel - *(pixel - 1));
}
}
horizontalDiff /= (toAnalyze.Width-1) * toAnalyze.Height;
///And return the average value
return(verticalDiff + horizontalDiff) / 2;
Thanks
Just to inform you. I am working on a professional forensic 5 Megapixel digital camera software in WPF. In DotNet not C++. There are some threading issus to know but it works perfectly fast. More performant because GPU is used.
Jerry did a good work with his answer.
Focus detection is “Contrast detection based on time / frames”. Logic is simple, to keep it performant it is not easy.
Auto Focus detection
To check the exposure time, it is easy if you have created the histogram of image. Image histogram
In any case you need to do it for
This mix makes it a bit more complicated because you also can use Color gain channels to increase brightness of image. RGB image digital. Luminance can have the same result like with “Gain” and “Exposure” time.
If you calculate the exposure time automatically, keep good in mind that you need a frame to calculate it and as smaller the exposure time as more frames you will get. That means, if you want to have a good algorithm, always try to have a very small exposure time and increase it slowly. Not use a linear algorithm where you decrease the value slowly.
There are also more methodes for digital cameras like Pixel Binning Pixel Binning to increase framerate to get quick focus results.
Here is a sample of how focus can work to generate a focus intensity image :