Я пытался реализовать объединение изображений на основе PCA с C ++ и OpenCV, но не могу понять, что именно мне нужно делать. Как я читал в некоторых руководствах по слиянию изображений на основе PCA, когда есть две картинки I1 и I2 одной и той же сцены с размерами NxM в оттенках серого, алгоритм выглядит так:
- Создайте матрицу размером NMx2, где столбец 1 - это значения пикселей I1, а столбец 2 - значения пикселей I2.
- В некоторых учебных пособиях, которые я обнаружил, необходимо найти среднее значение 1 столбца и извлечь его из 1 столбца, а также среднее значение 2 столбца и извлечь его из второго столбца. Это необходимо?
- Найдите ковариационную матрицу этой матрицы MNx2.
- Найти собственные значения и собственные векторы этой ковариационной матрицы.
В одном из учебных пособий я прочитал, что необходимо выбрать собственный вектор, который соответствует большему собственному значению, и нормализовать этот собственный вектор.
В OpenCV, когда используется функция cv :: eigen (), она возвращает собственные векторы, которые еще нормализованы. И в одном из учебных пособий я прочитал, что сумма полученных компонентов должна быть P1 + P2 = 1.
Итак, если я получу собственный вектор, соответствующий большему собственному значению, например, как eigen = (0,705353; 0,71453) = (u, v)
, то это формула для слитого изображения I_fus
?
I_fus = u*I1+v*I2
? Или же
I_fus = u/(u+v)*I1+v/(u+v)*I2
?
Или я ошибаюсь и есть еще одна формула для плавного изображения?