Я хочу обнаружить пиксели "неба" в изображении RGB с помощью функции плотности вероятности трехмерного многомерного нормального распределения.Я использую патч изображения, который содержит несколько пикселей неба, чтобы вычислить среднее значение и дисперсию каналов RGB, а затем я вызываю функцию multivariate_normal.pdf, чтобы вычислить вероятность того, что каждый пиксель изображения будет принадлежать многомерномураспространение патча неба.Я предполагаю, что ковариационная матрица является диагональной, что означает, что каналы RGB независимы.
import numpy as np
import cv2
import matplotlib.pyplot as plt
from scipy.stats import multivariate_normal
from scipy.stats import norm
imBGR = cv2.imread("../ressources/house.jpg")
patch_sky = cv2.imread("../ressources/sky_patch.png")
# Gaussian model for sky
means = np.array([np.mean(patch_sky[:, :, 0]), np.mean(patch_sky[:, :, 1]), np.mean(patch_sky[:, :, 2])])
var = np.array([np.var(patch_sky[:, :, 0]), np.var(patch_sky[:, :, 1]), np.var(patch_sky[:, :, 2])])
proba = multivariate_normal.pdf(imBGR, mean=means, cov=var)
print("proba shape:", np.shape(proba))
print("maximum probability:", np.max(proba))
Проблема в том, что вычисленная максимальная вероятность очень мала:
proba shape: (960, 1280)
maximum probability: 0.00010730705050040148
Что я делаю не так?