我的目标是标记捕获的图像是否模糊。为此,我尝试了两种使用opencv的方法,并打算使用阈值来判断图像是否模糊: 1. laplacian的变化使用以下:
Imgproc.Laplacian(src_gray_image, dest_lap_image, CvType.CV_16S,3,1,0);
Core.meanStdDev(dest_lap_image, mean , std);
var of laplacian = Math.pow(std.get(0,0)[0],2);
x和y方向的图像渐变:
Imgproc.Sobel(image,Gx,CvType.CV_32F,1,0); Imgproc.Sobel(image,Gy,CvType.CV_32F,0,1); double sumSq = normGx * normGx + normGy * normGy; gradient =(float)(1。/(sumSq / image.size()。area()+ 1e-6));
当使用不同的手机拍摄相同的场景时,这些值会有所不同。 E.g 相机1的laplacian方差= 79,相机2的laplacian方差为5000 相机1的梯度值= 2 * 10-4,相机2的梯度值= 4 * 10-5。
以下是元数据: 的摄像机1: 4096x2304 曝光时间:1/17 光圈值:1.53 ISO速度:121 焦距:4.0
camera2: 1456x2592 曝光时间:1/50 光圈值:2.53 ISO:160 焦距:3.5mm
我无法理解的是, 1.相机的什么值决定锐度和焦点以及它如何影响渐变和拉普拉斯方差值,因为这些值是理想情况下我必须独立于相机的特征。 2.我们如何计算这些值,使它们与设备无关。 3.还有其他方法可以进行不依赖于图像元数据的快速基本模糊检测。