Подтвердить что ты не робот

Расчет лапласианской матрицы в С++

Я пытался реализовать алгоритм цифрового матирования, описанный в исследовательской статье Learning Based Digital Matting.

Его код MATLAB доступен здесь. Я пытаюсь преобразовать код MATLAB в C++, используя OpenCV 2.4.3 и UMFPACK.

Проблема в том, что функция с именем getLap_iccv09_overlapping (которая вычисляет матрицу Лапласа входного изображения) недоступна в OpenCV, и мне нужно написать свою собственную реализацию в cpp. Я получаю неверные результаты от моей реализации.

Существует ли какая-либо библиотека C/C++, которая предлагает вычисление матрицы Лапласа матрицы/изображения?

4b9b3361

Ответ 1

Мне недавно пришлось "перевести" несколько функций Matlab на С++ (используя OpenCV), и, к сожалению, вы не можете найти ту же самую функцию. Есть некоторые подобные функции, но результаты не совсем то же самое, особенно с границами матриц.
Я бы предложил вам прочитать и понять алгоритмы (операции над матрицами), используемые вашей функцией Matlab, и записать их в С++ (Opencv отлично подходит для операций с матрицами). Вы можете протестировать его, используя небольшую матрицу (например, 4 на 4) и шаг за шагом, сначала с элементами внутри матрицы, затем с краями и границами (я считаю, что условия границы сложнее понять)
Удачи!

Ответ 3

Насколько похожи ваши версии функций Matlab и С++? Похоже, вам, вероятно, просто нужно пройти через различные этапы, проверяя, что разные промежуточные результаты одинаковы, и попытайтесь найти ошибку таким образом.

Вы можете найти использование writeMat.cpp, которое является функцией, доступной для получения вашей матрицы OpenVV cv:: Mat и сохранения ее как Matlab.m файл, который должен упростить сравнение - выпишите .m в разных точках вашего кода cpp, загрузите их в Matlab, запустите Matlab script и сравните в соответствующих точках.