简而言之,我正在尝试使用OpenCVSharp计算图像的清晰度,并将其作为C#函数的一部分。
作为第一次尝试,我像这样使用拉普拉斯滤波器:
int kernel_size = 3;
int scale = 1;
int delta = 0;
int ddepth = image.Type().Depth;
Mat sharpenedImage = image.Laplacian(ddepth, kernel_size, scale, delta);
\* calculate the variance of the laplacian*\
最后,我想要这个
sharpenedImage
的变化。我已经在Python中轻松尝试过了:
def variance_of_laplacian(image):
lap_val = cv2.Laplacian(image, cv2.CV_8UC1)
return lap_val.var()
那么C#中是否有
lap_val.var()
的等效项?我找不到与此相关的任何文章。谢谢!
最佳答案
方差是标准偏差的平方,因此您应该可以使用它。
以下代码使用OpenCvSharp4
和OpenCvSharp4.runtime.win
进行编译,但是我不知道它是否满足您的要求。试试看。
static double Variance(Mat image)
{
using (var laplacian = new Mat())
{
int kernel_size = 3;
int scale = 1;
int delta = 0;
int ddepth = image.Type().Depth;
Cv2.Laplacian(image, laplacian, ddepth, kernel_size, scale, delta);
Cv2.MeanStdDev(laplacian, out var mean, out var stddev);
return stddev.Val0 * stddev.Val0;
}
}
关于c# - 如何在C#中获得拉普拉斯算子的方差,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58005091/