相机自动对焦算法

原创 云深之无迹 2022-07-02 00:08


三星S10e的超广角和正常镜头切换的时候,咔咔声很悦耳,不过这里也有疑问,关于自动对焦这个操作是不是有一些开源的东西?好像没有,我 随便搜索了俩篇论文看下。



首先是这个


一副图像是否聚焦,反映在空域上是图像的边缘及细节是否清晰,而图像的边缘及细节。信息可以通过对图像进行微分来获取,因此,可以利用这些信息作为聚焦的判据。这种提取图像边缘信息的函数称为聚焦评价函数,图像经其处理后所得到的量值能够反映图像的清晰度。聚焦评价函数应具有以下几个特性性:无偏性,单峰性,高灵敏度,较高信噪比,计算量较小。这里选用绝对方差函数:



全文就这个公式还算Soul


说了这么多,就这个函数重要:


聚焦评价函数,对于自动聚焦的实现,具有重要的意义。聚焦评价函数有很多,每种方法都有其优点和缺点。原理很简单,越是清晰的照片,每个像素与其周围像素的差距越大,当聚焦不对时,会发现,整个图像糊成一团,即像素值都在某一小范围内。


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(i, j);      int num1 = image.at(i-1, j);      int num2 = image.at(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 的位置,进入微动扫描状态。 


还有一篇没有看完,不写了,晚安。


https://blog.csdn.net/hust_bochu_xuchao/article/details/52688121
评论 (0)
我要评论
0
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦