维基百科对标准偏差有一个很好的解释,您可以将其用于标准偏差过滤器。
基本上,它归结为使用盒式过滤器模糊图像,使用盒式过滤器模糊图像的正方形,并取它们差异的平方根。
更新:这可能用维基百科的等式更好地显示......

您可以将 OpenCVblur
函数视为表示感兴趣邻域的期望值(即 E[X],即样本均值)。在这种情况下,随机样本 X 由局部邻域中的图像像素表示。因此,通过使用上面的等价,我们有类似sqrt(blur(img^2) - blur(img)^2)
OpenCV 的东西。这样做可以让您计算局部均值和标准差。
另外,以防万一您对数学证明感到好奇。这种等价性称为方差的计算公式。
以下是如何在 OpenCV 中执行此操作:
#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace std;
using namespace cv;
Mat mat2gray(const Mat& src)
{
Mat dst;
normalize(src, dst, 0.0, 1.0, NORM_MINMAX);
return dst;
}
int main()
{
Mat image = imread("coke-can.jpg", 0);
Mat image32f;
image.convertTo(image32f, CV_32F);
Mat mu;
blur(image32f, mu, Size(3, 3));
Mat mu2;
blur(image32f.mul(image32f), mu2, Size(3, 3));
Mat sigma;
cv::sqrt(mu2 - mu.mul(mu), sigma);
imshow("coke", mat2gray(image32f));
imshow("mu", mat2gray(mu));
imshow("sigma",mat2gray(sigma));
waitKey();
return 0;
}
这会产生以下图像:
原来的

意思是

标准差

希望有帮助!