Складывание листа бумаги (компьютерное зрение)
Я работаю над задачей, пытаясь преобразовать 2D-эскиз со складывающимися складками в полное 3D-представление. Красными линиями будут долины и синие горы / вершины . Я хотел бы вычислить преобразованные / отображенные координаты {P1'...P8'}. Я не нашел ни одного хорошего программного обеспечения, которое могло бы сделать это автоматически, но был бы признателен за советы.
- a - угол складывания
- P - координата
- E - Элемент
- синяя линия - сложенная гора
- красная линия-складчатая долина
Сложенный С a1 = a2 = a3 = 90 град (pi / 2 рад) (угол сложения) и стрелки как surfare нормали
Я использую Matlab, но ищу общие алгоритмы для решения этой проблемы.
Предполагая, что точка P0 фиксирована в origo и элемент E1 не изменит свои координаты, как мне лучше всего описать преобразование? Должен ли я использовать неоднородные или однородные координаты, полярные координаты?
Например, точка P8 зависит от других координат, которые зависят от углов.
Я полагаю, что мог бы использовать некоторую матрицу смежности для точек (узлов) и / или матрицу, которая связывает каждый элемент с его узлами. Например: [E1 P0 P4 P5 P1; E2 P1 P5 P6 P2 ; ...]
Преобразование для каждой координаты-это преобразование+вращение, и преобразование зависит от координаты/элемента. Но это становится сложным с несколькими связанными элементами...
Как могу ли я аккуратно преобразовать 2D - "бумагу" со складывающимися узорами в 3D-координаты?
3 ответа:
Можно перебрать все складки сгиба и вычислить преобразование всех пикселей, лежащих на одной стороне сгиба.
Вы можете использовать матрицу транформации для вычисления координат точек сгиба. посмотрите на статью Википедии, описывающую матрицу преобразований .
Сначала переместите все точки так, чтобы сгиб выровнялся с осью, затем поверните все точки На одной стороне сгиба в соответствии с направлением сгиба. вы можете затем переверните первый перевод так, чтобы фигура вернулась в исходное положение. повторите этот процесс со следующей складкой, пока вы полностью не сложите фигуру.
Используя matlab, матричные вычисления довольно легко формируются.
Вы могли бы, возможно, использовать методы, используемые для описания роботов с несколькими вращательными шарнирами; чем ваша проблема может быть описана как прямая кинематика Проблема. Другим интересным чтением может быть это.
Вы просто хотите применить линейное преобразование к каждой точке на одной стороне линии.
Преобразование-это вращение вокруг оси, матрица преобразования которой задается
Поскольку ось не центрирована относительно начала координат, вам нужно будет сначала применить перевод к началу координат, затем выполнить поворот, а затем перевести обратно.