三星S10e的超广角和正常镜头切换的时候,咔咔声很悦耳,不过这里也有疑问,关于自动对焦这个操作是不是有一些开源的东西?好像没有,我 随便搜索了俩篇论文看下。
首先是这个
一副图像是否聚焦,反映在空域上是图像的边缘及细节是否清晰,而图像的边缘及细节。信息可以通过对图像进行微分来获取,因此,可以利用这些信息作为聚焦的判据。这种提取图像边缘信息的函数称为聚焦评价函数,图像经其处理后所得到的量值能够反映图像的清晰度。聚焦评价函数应具有以下几个特性性:无偏性,单峰性,高灵敏度,较高信噪比,计算量较小。这里选用绝对方差函数:
全文就这个公式还算Soul
说了这么多,就这个函数重要:
聚焦评价函数,对于自动聚焦的实现,具有重要的意义。聚焦评价函数有很多,每种方法都有其优点和缺点。原理很简单,越是清晰的照片,每个像素与其周围像素的差距越大,当聚焦不对时,会发现,整个图像糊成一团,即像素值都在某一小范围内。
代码语言:javascript复制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;
}
给出计算的code
下面论文还有点,不过关系不大:
这个函数怎么算?这里给出,图像使用二维数组存放
算法流程图
以及引入变步长这些东西
当相邻图像的聚焦量值对比小于一定域值时,目标景物及光学镜头的状态相对稳定,此时控制系统处于微动扫描状态,控制输出仍有使调焦机构向获取更大聚焦量图像方向运动的趋势,但控制量微小。当相邻图像的聚焦量值对比大于一定域值,表明目标景物发生了变化,或光学镜头进行了变倍、转向等操作,则控制系统进入大步长快速调焦过程。假定此时调焦机构位于点 M 处,首先确定搜索方向,因点 N 的聚焦量值大于点 M 的聚焦量值,即确定向点 N 方向行进,直到越过最大值 P 到达 P 1 为止,即路径为 M-N-P-P 1 ,将此
过程中最大聚焦量值 P′暂存,进入渐小步长聚焦过程。由 P1 开始,向山顶 P运动,直到 P 2 为止,将此次搜索中最大聚焦量值 P〞暂存。如此反复,每搜索一次,步距相应减小,并将相邻两次搜索中所获得的两个最大聚焦量值进行对比,当对比值小于一定域值时,表示调焦机构已经位于很接近点 P 的位置,进入微动扫描状态。
还有一篇没有看完,不写了,晚安。
代码语言:javascript复制https://blog.csdn.net/hust_bochu_xuchao/article/details/52688121