Я работаю над приложением, которое обнаруживает наиболее заметный прямоугольник в изображении, а затем пытается повернуть его так, чтобы нижний левый угол прямоугольника находился в начале координат, аналогично тому, как работает система IUPR ОСКАР. Однако, как только наиболее заметный прямоугольник обнаружен, я не уверен, как учесть компонент глубины или ось z, поскольку прямоугольник не всегда будет «лобовым». Будем очень признательны за любые примеры, которые помогут мне понять. Ниже показан пример системы OSCAR IUPR.





На самом деле вам не нужно иметь дело с трехмерной информацией в этом случае, это просто функция сопоставления от одного набора координат к другому.
Посмотрите на аффинные преобразования, они способны исправлять простые эффекты перекоса и перспективы. Вы должны найти где-нибудь код, который вычислит преобразование из 4 точек в углах вашего прямоугольника.
Чуть не забыл - если «быстро» действительно важно, вы можете упростить систему, чтобы использовать только простые трансформации сдвига в комбинации, хотя это плохо скажется на качестве изображения для сильно наклоненных объектов.
На самом деле, я думаю, вам может сойти с рук что-то гораздо более простое, чем Подход Марка.
Когда у вас есть 2D-координаты на перекошенном изображении, измените их назначение как координаты текстуры.
В модуле рендеринга нарисуйте простой прямоугольник, в котором вершины каждого угла являются текстурой, сопоставленной с вершинами, найденными на перекошенном 2D-изображении (нормализованные и иным образом преобразованные в плоскость координат текстуры вашей системы рендеринга).
Теперь вы можете полагаться на оборудование (с использованием OpenGL или аналогичного), которое сделает исправление за вас, или вы можете написать свой собственный преобразователь текстуры:
О соотношении сторон нужно будет угадать, поскольку мы избавляемся от фактической 3D-информации. Однако вы можете уйти, просто взяв максимальную ширину и максимальную высоту вашего скошенного прямоугольника.