Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 不同相机拍摄的图像中的模糊检测_C++_Opencv_Image Processing - Fatal编程技术网

C++ 不同相机拍摄的图像中的模糊检测

C++ 不同相机拍摄的图像中的模糊检测,c++,opencv,image-processing,C++,Opencv,Image Processing,我想用拉普拉斯算子检测模糊图像。这是我正在使用的代码: 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,

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

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;
}
bool checkforblur(Mat img)
{
布尔是_blur=0;
垫灰色,拉普拉斯图像;
标量平均值,stddev,means1,stddev1;
双变量1,变量2,阈值;
CVT颜色(img、灰色、CV_bgr2灰色);
拉普拉斯(灰色,拉普拉斯图像,CV_64F);
meanstdev(拉普拉斯图像,平均值,stddev,Mat());
meanstdev(灰色,means1,stddev1,Mat());
方差1=stddev.val[0]*stddev.val[0];
方差2=stddev1.val[0]*stddev1.val[0];
双重比率=差异1/差异2;
阈值=90;

cout拉普拉斯算子是线性的,因此其振幅随信号振幅的变化而变化。因此,对比度越强的图像响应越高

通过规范化值,您可能会有更好的行为,例如,使用拉普拉斯函数的方差与信号本身的方差之比,或者与梯度幅值的方差之比



我还建议你尝试使用锐利的图像,你逐渐模糊与更广泛的高斯,并看看情节的“测量模糊”与已知的模糊度相比。

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

通过规范化值,您可能会有更好的行为,例如,使用拉普拉斯函数的方差与信号本身的方差之比,或者与梯度幅值的方差之比



我还建议你尝试使用锐利的图像,你逐渐模糊与更广泛的高斯,并看看情节的“测量模糊”与已知的模糊度相比。

如上所述,你应该将这个比率标准化。基本上,如果你将方差除以平均值,你将得到标准化的灰度方差,我认为这就是你要寻找的


这就是说,我推荐一个非常好的线程,里面有很多好的信息和代码示例。

如上所述,你应该将这个比率标准化。基本上,如果你将方差除以平均值,你将得到标准化的灰度方差,我想这就是你想要的


也就是说,我会推荐一个非常好的帖子,里面有很多很好的信息和代码示例。

如果你尝试了这个,请告诉我们结果。谢谢你的时间。我已经编辑了这个问题。这就是你的建议吗?@janu777:yep。我没有注意到你在计算STDEV然后转换为方差。我想使用StdDev甚至更好。但是在设置固定阈值之前,请查看不同图像和不同模糊级别的值。因此,您建议我使用StdDev本身,而不是方差。对吗?@janu777:yep,这会使比例更线性(但这不是必要的)。如果您尝试此操作,请让我们知道结果。谢谢您的时间。我已编辑了此问题。这是您的建议吗?@janu777:是的。我不介意您计算StdDev然后转换为方差。我认为使用StdDev更好。但在设置固定阈值之前,请查看不同阈值的值图像和不同程度的模糊。因此,你建议我使用stdDev本身而不是方差。对吗?@janu777:是的,这使比例更线性(但这不是必要的)。