【问题标题】:How to get the variance of Laplacian in C#如何在 C# 中获取拉普拉斯算子的方差
【发布时间】:2019-09-19 06:40:29
【问题描述】:

简单地说,我正在尝试使用 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() 的等价物?

我找不到任何与此相关的匹配文章。谢谢!

【问题讨论】:

  • 方差是标准差的平方。您可以从 Mat 对象上的函数 MeanStdDev 获得标准偏差。我对 `OpenCvSharp 的了解还不够,但无法使其正常工作。
  • @PalleDue 我尝试使用MeanStdDev,但无法得出标准差值。也试过this code。但无法将其转换为 C#。

标签: c# variance opencvsharp


【解决方案1】:

方差是标准差的平方,所以你应该可以使用它。 以下代码使用OpenCvSharp4OpenCvSharp4.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;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多