首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检测图像是否失焦?

如何检测图像是否失焦?
EN

Stack Overflow用户
提问于 2013-04-06 01:28:48
回答 3查看 6.4K关注 0票数 10

有时,我们的光学检查系统会失去焦距,从而导致无意义的测量。我的任务是开发一种“失焦”探测器,它将用于驱动相机系统的Z轴。我能得到的图片是bmp。

我正在寻找可以研究的方法和算法。例如,我是否应该隔离特征并测量一致性,或者是否可以使用边缘检测?

这是焦点图像:

这是失焦的图像:

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-06 01:51:57

关键是聚焦图像具有更强的梯度和清晰的特征。因此,我建议应用高斯拉普拉斯滤波器,然后查看结果的像素值分布。下面的图显示了这个想法在你的图像上的应用,其中黑色指的是散焦图像,红色指的是焦点图像。聚焦的图像具有更高的值(因为图像具有更清晰的梯度)。

当你有直方图时,你可以通过比较分布的90%的百分位数(对尾部敏感)来区分它们。对于散焦图像,它是7;对于聚焦图像,它是13.6 (所以是差值的两倍)。

票数 12
EN

Stack Overflow用户

发布于 2013-04-06 01:55:14

对比度算法的一个快速而粗糙的版本是对相邻像素之间的差值求和-求和越高,对比度越大。

票数 1
EN

Stack Overflow用户

发布于 2018-06-05 23:13:06

这就是我在OpenCV中用来检测焦点质量的方法:

代码语言:javascript
复制
Mat grad;
int scale = 1;
int delta = 0;
int ddepth = CV_8U;
Mat grad_x, grad_y;
Mat abs_grad_x, abs_grad_y;
/// Gradient X
Sobel(matFromSensor, grad_x, ddepth, 1, 0, 3, scale, delta, BORDER_DEFAULT);
/// Gradient Y
Sobel(matFromSensor, grad_y, ddepth, 0, 1, 3, scale, delta, BORDER_DEFAULT);
convertScaleAbs(grad_x, abs_grad_x);
convertScaleAbs(grad_y, abs_grad_y);
addWeighted(abs_grad_x, 0.5, abs_grad_y, 0.5, 0, grad);
cv::Scalar mu, sigma;
cv::meanStdDev(grad, /* mean */ mu, /*stdev*/ sigma);
focusMeasure = mu.val[0] * mu.val[0];
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15839928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档