11

有时,我们的光学检测系统会失焦,从而导致无意义的测量。我的任务是开发一种“失焦”检测器,用于驱动相机系统的 Z 轴。我可用的图像是bmp。

我正在寻找方法和算法进行调查。例如,我应该隔离特征并测量一致性还是可以使用边缘检测?

这是焦点图像:

焦点


这是失焦图像:

失焦

4

3 回答 3

12

关键是对焦图像具有更强的梯度和清晰的特征。所以我的建议是应用高斯拉普拉斯滤波器,然后查看结果的像素值分布。下图显示了这个想法在您的图像中的应用,其中黑色表示失焦图像,红色表示聚焦图像。焦点对准的具有更高的值(因为图像具有更锐利的渐变)。

当您有直方图时,您可以通过比较例如分布的 90% 百分位(对尾部敏感)来区分一个。对于失焦图像,它是 7,对于对焦图像,它是 13.6(因此是差异的两倍)。

在此处输入图像描述

于 2013-04-05T17:51:57.003 回答
1

对比度算法的一个快速而肮脏的版本是对相邻像素之间的差异求和 - 更高的和是更多的对比度。

于 2013-04-05T17:55:14.393 回答
1

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

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];
于 2018-06-05T15:13:06.073 回答