Я ищу подгонку кривой Гаусса, используя OpenCV.
Я могу иметь 1D или 2D Mat
, и я хотел бы рассчитать гауссовские параметры наилучшего соответствия Гаусса по матрице.
Однако я хотел бы иметь возможность зафиксировать некоторый параметр (например, среднее значение или дисперсию по Гауссу).
Модель 1D, которую я хотел бы подогнать, выглядит следующим образом:
y = a + (b - a) * exp( -( x - c )/( 2 * d^2 ) )
В случае 2D Mat
модель аналогична многовариантной гауссовской функции.
Имеет ли OpenCV некоторую реализацию, подходящую для моих нужд?
Если да, можете ли вы привести пример или несколько полезных ссылок?
Заранее спасибо.
Подгонка гауссовой кривой просто означает вычисление ее параметров, которые в одномерном случае являются скалярным средним и дисперсией. Mean = sum(Xi)/n
, variance = sum(Xi-mean)^2/(n-1)
, где ^2
означает квадрат. Это становится более интересным для 2D-случая. Среднее значение по-прежнему рассчитывается таким же образом, но становится 2D-вектором. Вместо дисперсии вы вычисляете ковариационную матрицу как этот. Это матрица 2х2.
Там нет ничего, чтобы сделать это в OpenCV. Однако, если вы выводите уравнения (матрица Гессе и т. Д.), Вы можете легко реализовать некоторые Левенберг-Марквардт процедура оценки с cv::Mat
тип матрицы.