Я работаю над проблемой манипулирования изображениями. У меня есть оверхед-проектор, который проецируется на экран, и у меня есть камера, которая снимает это. Я могу установить соответствие 1: 1 между подмножеством координат проектора и подмножеством пикселей камеры, проецируя точки на экране и находя центры масс результирующих областей на камере. У меня при этом карта
proj_x, proj_y <-> cam_x, cam_y для пар рассеянных точек
Мой первоначальный план состоял в том, чтобы упорядочить эту карту, используя функцию griddata Mathscript. Это будет нормально работать в MATLAB, как показано ниже
[pgridx, pgridy] = meshgrid(allprojxpts, allprojypts)
fitcx = griddata (proj_x, proj_y, cam_x, pgridx, pgridy);
fitcy = griddata (proj_x, proj_y, cam_y, pgridx, pgridy);
и обратное отображение камеры на проектор
К сожалению, этот код заставляет Labview исчерпать память на шаге сетки сетки (камера имеет 5 мегапикселей, что, очевидно, слишком много для labview)
Затем я начал просматривать openCV и нашел функцию cvRemap. К сожалению, эта функция берет в качестве отправной точки упорядоченную пиксель-пиксельную карту, подобную той, которую я пытался создать выше. Тем не менее, я надеялся, что функции для создания такой карты могут быть доступны в openCV. Я не смог найти его в API openCV 1.0 (я застрял с 1.0 по устаревшим причинам), но я надеялся, что он есть или у кого-то есть простой трюк.
Так что мой вопрос один из следующих
1) Как я могу интерполировать от рассеянных точек до сетки в openCV; (то есть, учитывая z = f (x, y) для рассеянных значений x и y, как заполнить изображение f (im_x, im_y)?
2) Как я могу выполнить преобразование изображения, которое отображает изображение 1 в изображение 2, если я знаю разбросанное отображение точек в системе координат 1 в систему координат 2. Это может быть реализовано либо в Labview, либо в OpenCV.
Примечание: я отмечаю этот пост delaunay, потому что это один из методов разбросанной интерполяции, но лучшим тэгом будет "разбросанная интерполяция"