图像清晰度判断

FFT(Fast Fourier Transform)是一种常用的频域分析工具,可以将图像从空间域转换到频域。在频域中,高频对应了图像的细节部分,低频对应了图像的大致形状。因此,我们可以通过计算图像在高频部分的能量来评估图像的清晰度。

double computeSharpnessFFT(const cv::Mat& img, const cv::Mat& mask)
{
  // 输入检查

  cv::Mat imgMasked;
  img.copyTo(imgMasked, mask); 

  cv::Mat imgFloat;
  imgMasked.convertTo(imgFloat, CV_32F);

  cv::Mat planes[] = {imgFloat, cv::Mat::zeros(img.size(), CV_32F)};
  cv::Mat complexImg;
  cv::merge(planes, 2, complexImg);  

  cv::dft(complexImg, complexImg);

  cv::split(complexImg, planes);
  cv::magnitude(planes[0], planes[1], planes[0]);  
  cv::Mat mag = planes[0];

  mag += cv::Scalar::all(1); 
  cv::log(mag, mag);

  // 直接取中心区域作为高频
  int cx = mag.cols/2;
  int cy = mag.rows/2;

  cv::Mat hf(mag, cv::Rect(cx/2, cy/2, cx, cy));

  cv::Scalar mean, stddev;
  cv::meanStdDev(hf, mean, stddev);

  return stddev[0] * stddev[0]; 
}

高频部分包含大量随机边缘信息,其均值易趋近于零,不具可区分性;而方差表示偏离程度,越大说明高频信息强度越强,再场景不变的情况下,即表征越清晰

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值