я пытаюсь выполнить билинейную интерполяцию после вращения в c ++ с использованием функций openCv, но без использования билинейной интерполяции, реализованной в openCv.
На моих выходных изображениях всегда присутствуют артефакты (всего разные цвета пикселей).
Я использую эту формулу:
Билинейная интерполяционная формула
Я не использую ceil из math.h, но cvRound () из openCV.
Итак, мой вклад:
1017 * Лене *
И мой вывод с артефактами:
Лена после вращения и интерполяции
Я использую эту формулу для всех значений RGB, поэтому для B это выглядит так:
int l = cvRound(xn);
int k = cvRound(yn);
float a = xn-l;
float b = yn-k;
uchar B = (1-a)*(1-b)*src.at<cv::Vec3b>(l,k).val[0]+a*(1-b)*src.at<cv::Vec3b>(l+1,k).val[0]+b*(1-a)*src.at<cv::Vec3b>(l,k+1).val[0]+a*b*src.at<cv::Vec3b>(l+1,k+1).val[0];
xn и yn - координаты в преобразовании MAT, они являются числами с плавающей точкой.
Как вы можете видеть, большая часть выходного изображения рассчитывается так, как должно быть, но почему-то это мало артефактов, которые не имеют смысла. Мне нужно от них избавиться.
Спасибо за любой совет.