Как получить дисперсию лапласиана в C # - PullRequest
3 голосов
/ 19 сентября 2019

Просто я пытаюсь вычислить резкость изображения как части функции в C #, используя OpenCVSharp.

В качестве 1-й попытки я использовал Laplacian Filter следующим образом:

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()

Так есть ли какой-нибудь эквивалент lap_val.var() в C #?

Я не нашел подходящей статьи по этому поводу.Спасибо!

1 Ответ

0 голосов
/ 19 сентября 2019

Дисперсия - это стандартное отклонение в квадрате, так что вы должны иметь возможность использовать это.Следующий код компилируется с 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;
    }
}
...