gpt4 book ai didi

c++ - 使用不同相机拍摄的图像中的模糊检测

转载 作者:行者123 更新时间:2023-11-28 01:39:43 24 4
gpt4 key购买 nike

我想使用拉普拉斯算子检测模糊图像。这是我正在使用的代码:

bool checkforblur(Mat img)
{
bool is_blur = 0;
Mat gray,laplacianImage;
Scalar mean, stddev, mean1, stddev1;
double variance1,variance2,threshold;
cvtColor(img, gray, CV_BGR2GRAY);
Laplacian(gray, laplacianImage, CV_64F);
meanStdDev(laplacianImage, mean, stddev, Mat());
meanStdDev(gray, mean1, stddev1, Mat());
variance1 = stddev.val[0]*stddev.val[0];
variance2 = stddev1.val[0]*stddev1.val[0];
double ratio= variance1/variance2;
threshold = 90;
cout<<"Variance is:"<<ratio<<"\n"<<"Threshold Used:"
<<threshold<<endl;
if (ratio <= threshold){is_blur=1;}
return is_blur;
}

此代码将图像作为输入,并根据图像是否模糊返回 1 或 0。按照建议,我编辑了代码以检查比率,而不是单独检查拉普拉斯图像的方差。

但阈值仍然因使用不同相机拍摄的图像而异。

代码场景是否依赖?

我应该怎么改?

例子:

Good

对于上面的图像,方差是 62.9 所以它检测到图像是模糊的。

Bad

对于上面的图像,方差是 235,因此它被错误地检测为不模糊。

最佳答案

拉普拉斯算子是线性的,因此它的幅度随信号的幅度而变化。因此,对于具有更强对比度的图像,响应会更高。

通过对值进行归一化可能会有更好的行为,例如使用拉普拉斯算子的方差与信号本身的方差或梯度幅度的方差的比率。


我还建议您尝试使用用越来越宽的高斯逐渐模糊的清晰图像,并查看“测量模糊度”与已知模糊度的对比图。

关于c++ - 使用不同相机拍摄的图像中的模糊检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47768564/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com