2012-06-06 2 views
6

Я работаю над задачей, пытающейся преобразовать 2D-эскиз со складными складами в полное трехмерное представление. Красные линии будут долинами и голубыми горами/вершинами. Я хотел бы вычислить преобразованные/сопоставленные координаты {P1 '... P8'}. Я не нашел хорошего программного обеспечения, которое могло бы сделать это автоматически, но было бы полезно советов.Складной лист бумаги (компьютерное зрение)

Folding Pattern

  • - угол
  • P складывания - координату
  • Е - элемент
  • синяя линия - сложена гора
  • красная линия - сложенный долина

Folded С а1 = а2 = а3 = 90 & deg; (р/2 рад) (сложенном) угол и стрелки, как surfare нормалей

я использую Matlab, но я в поисках общих алгоритмов для решения этой проблемы.

Предполагая, что точка P0 фиксируется в Origo и элемент E1 не изменит свои координаты, как я должен лучше описать трансформацию? Должен ли я использовать неоднородные или однородные координаты, полярные координаты?

Например, точка P8 зависит от других координат, которые зависят от углов.

Я полагаю, что я мог бы использовать некоторую матрицу смежности для точек (узлов) и/или матрицы, которые соединяют каждый элемент с его узлами. Например: [E1 P0 P4 P5 P1; E2 P1 P5 P6 P2; ...]

Преобразование для каждой координаты - это преобразование + поворот, а преобразование зависит от координаты/элемента. Но он становится сложным с несколькими связанными элементами ...

Как я могу аккуратно преобразовать двумерную «бумагу» со складными узорами в 3D-координаты?

+0

Вы гарантированы, что бумага не столкнется друг с другом? Также каков порядок складывания (вращение НЕ является коммутативным)? – tskuzzy

ответ

1

вы можете перебирать все складные складки и вычислять преобразование всех пикселей, расположенных на одной стороне складки.

вы можете использовать матрицу трансформации для вычисления координат сложенных точек. посмотрите на the wikipedia article describing transformation matrix.

сначала переведите все точки так, чтобы сгиб был выровнен по оси, а затем поверните все точки на одной стороне складки в соответствии с направлением складки. вы можете затем отменить первый перевод, чтобы фигура вернулась в исходное положение. повторите процесс со следующей складкой, пока вы полностью не свернете фигуру.

Использование matlab, вычисление матрицы довольно легко заготовки.

+0

Звук, что я имел в виду! Я использую формулу вращения Родригеса. Однако, когда складчатый рисунок становится более сложным, мне нужно сортировать, какие точки сгибать я считаю. Складывать все остальное было бы беспорядок? Посмотрите на этот рис. Как вы думаете? [link] http://i49.tinypic.com/2ewfozq.png) – POHU

+0

eck! какой складной рисунок! для такого шаблона у вас будет проблема, что складывание перемещает другие точки, чем те, которые вы складываете. явно нажав на синюю линию, перетащит некоторые точки вдоль красных линий ... и это намного сложнее, чем то, что я описал. –

+0

Ха да! Я вижу такую ​​проблему как очень продвинутую. Считаете ли вы, что при разумных обстоятельствах можно написать алгоритм, который работает для такого типа шаблонов, но также и для произвольного шаблона? Первый день на работе, повезло мне хе-хе ... – POHU

1

Возможно, вы можете использовать методы, используемые для описания роботов с несколькими вращательными суставами; чем ваша проблема может быть описана как проблема forward kinematics.Другим интересным показанием может быть this.

0

Вы просто хотите применить линейное преобразование к каждой точке на одной стороне линии.

преобразование является вращением вокруг оси, которой матрица преобразования является given by

enter image description here

Поскольку ось не центрирован относительно начала координат, то вам нужно сначала применить перевод в начало координат, то сделайте поворот, затем переведите назад.

Смежные вопросы