图像清晰度评价算法有很多种,在空域中,主要思路是考察图像的领域对比度,即相邻像素间的灰度特征的梯度差;在频域中,主要思路是考察图像的频率分量,对焦清晰的图像高频分量较多,对焦模糊的图像低频分量较多。
这里实现3种清晰度评价方法,分别是Tenengrad梯度方法、Laplacian梯度方法和方差方法。
1.Tenengrad梯度方法
Tenengrad梯度方法利用Sobel算子分别计算水平和垂直方向的梯度,同一场景下梯度值越高,图像越清晰。以下是具体实现。
Mat img;
Mat imgROI;
Mat imgGray;
Mat imageSobel;
//添加图片
img = Mat(m_frameInfo.uHeight/4, m_frameInfo.uWidth/4,CV_8UC3, pRGB).clone();
//设置ROI尺寸
imgROI.create(img.rows, img.cols, CV_8UC3);
//生成ROI图
img(Rect(width, height,150, 150)).copyTo(imgROI);
//转灰度图
cvtColor(imgROI, imgGray, CV_BGR2GRAY);
//Sobel算子计算梯度值
Sobel(imgGray, imageSobel, CV_16U,1, 1);
//传值
meanValue= mean(imageSobel)[0];
//返回值
return meanValue;