聚焦评价函数,对于自动聚焦的实现,具有重要的意义。
聚焦评价函数有很多,每种方法都有其优点和缺点,本文所记录的,只是其中一种方法,个人觉得是简单实用的。
原理很简单,越是清晰的照片,每个像素与其周围像素的差距越大,当聚焦不对时,会发现,整个图像糊成一团,即像素值都在某一小范围内。
int calculateGrayDifference(Mat image)//传入单通道图像
{
Mat temImage;
temImage = Mat::zeros(image.size(), CV_32FC1);
//long int result = 0;
for (int i = 1; i < image.rows; i++)
{
for (int j = 1; j < image.cols; j++)
{
int num = image.at<uchar>(i, j);
int num1 = image.at<uchar>(i-1, j);
int num2 = image.at<uchar>(i, j-1);
int num3 = abs((num - num1)*(num - num2));
temImage.at<float>(i, j) = num3;
//result = result + num3;
}
}
Scalar total = sum(temImage);
return cvRound(total[0]);
//return result;
}
返回值越大,表明图像越清晰。