前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >相机自动对焦算法

相机自动对焦算法

作者头像
云深无际
发布2022-07-13 16:49:35
5450
发布2022-07-13 16:49:35
举报
文章被收录于专栏:云深之无迹

三星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
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-07-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云深之无迹 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档