3D-проєкція

Ця стаття містить правописні, лексичні, граматичні, стилістичні або інші мовні помилки, які треба виправити. Ви можете допомогти вдосконалити цю статтю, погодивши її із чинними мовними стандартами.

3D проєкція — це будь-який спосіб відображення тривимірних точок на двовимірній площині. Оскільки більшість сучасних методів для відображення графічних даних базуються на планарних (піксельна інформація з декількох бітових площин) двомірних середовищах, використання цього типу проєкції широко поширене, особливо в галузі комп'ютерної графіки, інженерії та креслення.

Ортогональна проєкція

Коли людське око дивиться на сцену, віддалені об'єкти виглядають меншими, ніж об'єкти поруч. Ортогональна проєкція нехтує цим ефектом, що дозволяє створювати креслення в масштабі для будівництва і машинобудування.

Ортогональна проєкція — це невеликий набір перетворень, який часто використовується, щоб показати профіль, деталі або точні розміри тривимірного об'єкта.

Якщо нормаль площини перегляду (напрямок камери) паралельна одній з координатних осей (тобто, X {\displaystyle X} , Y {\displaystyle Y} або осі Z {\displaystyle Z} ), то математичне перетворення виглядає наступним чином; Для проєктування 3D-точки a x {\displaystyle a_{x}} , a y {\displaystyle a_{y}} , a z {\displaystyle a_{z}} на 2D точку b x {\displaystyle b_{x}} , b y {\displaystyle b_{y}} ортогональною проєкцією, яка паралельна осі Y (вид профілю), то можна використати наступні рівняння:

b x = s x a x + c x {\displaystyle b_{x}=s_{x}a_{x}+c_{x}}
b y = s z a z + c z {\displaystyle b_{y}=s_{z}a_{z}+c_{z}}

де вектор s — довільний масштабний коефіцієнт, а c являє собою довільне зміщення. Ці константи не є обов'язковими, і можуть бути використані, щоб правильно вирівняти вікно перегляду. При використанні матричного множення, рівняння мають такий вигляд:

[ b x b y ] = [ s x 0 0 0 0 s z ] [ a x a y a z ] + [ c x c z ] {\displaystyle {\begin{bmatrix}{b_{x}}\\{b_{y}}\\\end{bmatrix}}={\begin{bmatrix}{s_{x}}&0&0\\0&0&{s_{z}}\\\end{bmatrix}}{\begin{bmatrix}{a_{x}}\\{a_{y}}\\{a_{z}}\\\end{bmatrix}}+{\begin{bmatrix}{c_{x}}\\{c_{z}}\\\end{bmatrix}}} .

У той час як орфографічно проєктовані зображення являють собою тривимірну природу проєктованого об'єкта, вони не уявляють об'єкт, як це було б записано фотографічно або, як це сприймається глядачем, який безпосередньо спостерігає за ним. Зокрема, паралельні довжини у всіх точках на ортогонально проєктованому зображенні одного і того ж масштабу, незалежно від того, чи є вони далеко або близько до віртуального перегляду. В результаті, довжини біля до глядача не малюються в ракурсі, як вони б виглядали в перспективному проєктуванні.

Слабка перспективна проєкція

«Слабка» перспективна проєкція використовує ті ж принципи ортогональної проєкції, але вимагає коефіцієнт масштабування, який необхідно вказати, таким чином гарантуючи, що ближчі об'єкти здаються більшими в проєкції, і навпаки. Це можна розглядати як гібрид між ортогональною і перспективною проєкціями, і описується або як перспективна проєкція з окремими глибинами точки Z i {\displaystyle Z_{i}} заміненими середнім постійним глибини Z a v e {\displaystyle Z_{ave}} ,[1] або просто як ортогональна проєкція з масштабуванням.[2]

Таким чином, слабко-перспективна модель апроксимує перспективну проєкцію, використовуючи простішу модель, схожу на чисту (немасштабовану) ортогональну проєкцію. Це розумне зближення, коли глибина об'єкта уздовж лінії візування мала в порівнянні з відстанню від камери, а поле зору маленьке. При цих умовах можна припустити, що всі точки на 3D-об'єкті знаходяться на однаковій відстані Z a v e {\displaystyle Z_{ave}} від камери, без суттєвих помилок у проєкції (в порівнянні з повною перспективною моделлю).

Перспективна проєкція

Коли людське око бачить сцену, об'єкти на відстані здаються менше, ніж об'єкти поруч — це відомо як перспектива. У той час як ортогональна проєкція ігнорує цей ефект, щоб дозволити точні вимірювання, перспективна проєкція показує, що віддалені об'єкти менше, щоб забезпечити додатковий реалізм.

Перспективна проєкція вимагає більш активну участь визначення в порівнянні з ортогональною проєкцією. Концептуальною допомогою у розумінні механіки цієї проєкції є уявлення 2D проєкції, ніби об'єкт або об'єкти в цей час розглядається через видошукач камери. Положення камери, орієнтація і поле зору управління поведінкою перетворення проєкції. Наступні змінні визначені для опису цієї трансформації:

  • a x , y , z {\displaystyle \mathbf {a} _{x,y,z}}  — 3D-положення точки A {\displaystyle A} , яка повинна бути спроєктована.
  • c x , y , z {\displaystyle \mathbf {c} _{x,y,z}}  — 3D-положення точки C {\displaystyle C} , що представляє камеру.
  • θ x , y , z {\displaystyle \mathbf {\theta } _{x,y,z}}  — орієнтація камери (представлена кутами Ейлера).
  • e x , y , z {\displaystyle \mathbf {e} _{x,y,z}}  — глядацьке положення щодо поверхні дисплея[3] яка проходить через точку C {\displaystyle C} , яка представляє камеру.

Що призводить до:

  • b x , y {\displaystyle \mathbf {b} _{x,y}}  — 2D-проєкція a {\displaystyle \mathbf {a} } .

Коли c x , y , z = 0 , 0 , 0 , {\displaystyle \mathbf {c} _{x,y,z}=\langle 0,0,0\rangle ,} та θ x , y , z = 0 , 0 , 0 , {\displaystyle \mathbf {\theta } _{x,y,z}=\langle 0,0,0\rangle ,} 3D-вектор 1 , 2 , 0 {\displaystyle \langle 1,2,0\rangle } проєктується на 2D вектор 1 , 2 {\displaystyle \langle 1,2\rangle } .

В іншому випадку, для обчислення b x , y {\displaystyle \mathbf {b} _{x,y}} ми спочатку визначимо вектор d x , y , z {\displaystyle \mathbf {d} _{x,y,z}} як положення точки A {\displaystyle A} стосовно системи координат, визначеній камерою, з початком в C {\displaystyle C} , і повернутої на θ {\displaystyle \mathbf {\theta } } відносно початкової системи координат. Це досягається шляхом віднімання матриці C {\displaystyle C} з A {\displaystyle A} і потім застосування обертання по θ {\displaystyle -\mathbf {\theta } } . Це перетворення часто називають перетворенням камери, і воно може бути виражене, висловлюючи обертання в термінах обертань навколо осей X {\displaystyle X} , Y {\displaystyle Y} , і Z {\displaystyle Z} (ці розрахунки мають на увазі те, що осі впорядковані як лівостороння система осей): [4] [5]

[ d x d y d z ] = [ 1 0 0 0 cos ( θ x ) sin ( θ x ) 0 sin ( θ x ) cos ( θ x ) ] [ cos ( θ y ) 0 sin ( θ y ) 0 1 0 sin ( θ y ) 0 cos ( θ y ) ] [ cos ( θ z ) sin ( θ z ) 0 sin ( θ z ) cos ( θ z ) 0 0 0 1 ] ( [ a x a y a z ] [ c x c y c z ] ) {\displaystyle {\begin{bmatrix}\mathbf {d} _{x}\\\mathbf {d} _{y}\\\mathbf {d} _{z}\\\end{bmatrix}}={\begin{bmatrix}1&0&0\\0&{\cos(\mathbf {-\theta } _{x})}&{-\sin(\mathbf {-\theta } _{x})}\\0&{\sin(\mathbf {-\theta } _{x})}&{\cos(\mathbf {-\theta } _{x})}\\\end{bmatrix}}{\begin{bmatrix}{\cos(\mathbf {-\theta } _{y})}&0&{\sin(\mathbf {-\theta } _{y})}\\0&1&0\\{-\sin(\mathbf {-\theta } _{y})}&0&{\cos(\mathbf {-\theta } _{y})}\\\end{bmatrix}}{\begin{bmatrix}{\cos(\mathbf {-\theta } _{z})}&{-\sin(\mathbf {-\theta } _{z})}&0\\{\sin(\mathbf {-\theta } _{z})}&{\cos(\mathbf {-\theta } _{z})}&0\\0&0&1\\\end{bmatrix}}\left({{\begin{bmatrix}\mathbf {a} _{x}\\\mathbf {a} _{y}\\\mathbf {a} _{z}\\\end{bmatrix}}-{\begin{bmatrix}\mathbf {c} _{x}\\\mathbf {c} _{y}\\\mathbf {c} _{z}\\\end{bmatrix}}}\right)}

Це уявлення відповідає обертанню на три кута Ейлера, використовуючи конвенцію X Y Z {\displaystyle XYZ} , яку можна інтерпретувати як «обертання навколо зовнішніх осей (осі сцени) в порядку Z {\displaystyle Z} , Y {\displaystyle Y} , X {\displaystyle X} (читання справа наліво)» або «поворот навколо власних осей (осі камери) в порядку X {\displaystyle X} , Y {\displaystyle Y} , Z {\displaystyle Z} (читання зліва-направо)». Зверніть увагу, що якщо камера не повертається ( θ x , y , z = 0 , 0 , 0 {\displaystyle \mathbf {\theta } _{x,y,z}=\langle 0,0,0\rangle } ), то матриці випадають (як тотожності), і це зводиться до простого зрушення: d = a c . {\displaystyle \mathbf {d} =\mathbf {a} -\mathbf {c} .}

Як альтернатива, без використання матриць:

d x = c y ( s z y + c z x ) s y z d y = s x ( c y z + s y ( s z y + c z x ) ) + c x ( c z y s z x ) d z = c x ( c y z + s y ( s z y + c z x ) ) s x ( c z y s z x ) {\displaystyle {\begin{array}{lcl}\mathbf {d} _{x}=c_{y}(s_{z}\mathbf {y} +c_{z}\mathbf {x} )-s_{y}\mathbf {z} \\\mathbf {d} _{y}=s_{x}(c_{y}\mathbf {z} +s_{y}(s_{z}\mathbf {y} +c_{z}\mathbf {x} ))+c_{x}(c_{z}\mathbf {y} -s_{z}\mathbf {x} )\\\mathbf {d} _{z}=c_{x}(c_{y}\mathbf {z} +s_{y}(s_{z}\mathbf {y} +c_{z}\mathbf {x} ))-s_{x}(c_{z}\mathbf {y} -s_{z}\mathbf {x} )\\\end{array}}}
(де x {\displaystyle \mathbf {x} } = a x c x {\displaystyle a_{x}-c_{x}} і т. д., c α {\displaystyle c_{\alpha }} = cos ( θ α ) {\displaystyle \cos \left(\theta _{\alpha }\right)} , s α {\displaystyle s_{\alpha }} = sin ( θ α ) {\displaystyle \sin \left(\theta _{\alpha }\right)} ).

Це перетворення точки потім може проєктуватися на 2D площині, використовуючи формулу (тут x/у, використовується як площина проєкції; у літературі також може використовуватися x/z):[6]

b x = e z d z d x e x b y = e z d z d y e y . {\displaystyle {\begin{array}{lcl}\mathbf {b} _{x}&=&{\frac {\mathbf {e} _{z}}{\mathbf {d} _{z}}}\mathbf {d} _{x}-\mathbf {e} _{x}\\\mathbf {b} _{y}&=&{\frac {\mathbf {e} _{z}}{\mathbf {d} _{z}}}\mathbf {d} _{y}-\mathbf {e} _{y}\\\end{array}}.}

Або в матричній формі з використанням однорідних координат, система

[ f x f y f z f w ] = [ 1 0 e x e z 0 0 1 e y e z 0 0 0 1 0 0 0 1 / e z 0 ] [ d x d y d z 1 ] {\displaystyle {\begin{bmatrix}\mathbf {f} _{x}\\\mathbf {f} _{y}\\\mathbf {f} _{z}\\\mathbf {f} _{w}\\\end{bmatrix}}={\begin{bmatrix}1&0&-{\frac {\mathbf {e} _{x}}{\mathbf {e} _{z}}}&0\\0&1&-{\frac {\mathbf {e} _{y}}{\mathbf {e} _{z}}}&0\\0&0&1&0\\0&0&1/\mathbf {e} _{z}&0\\\end{bmatrix}}{\begin{bmatrix}\mathbf {d} _{x}\\\mathbf {d} _{y}\\\mathbf {d} _{z}\\1\\\end{bmatrix}}}

в поєднанні з аргументами, використання подібних трикутників призводить до поділу однорідними координатами, даючи

b x = f x / f w b y = f y / f w . {\displaystyle {\begin{array}{lcl}\mathbf {b} _{x}&=&\mathbf {f} _{x}/\mathbf {f} _{w}\\\mathbf {b} _{y}&=&\mathbf {f} _{y}/\mathbf {f} _{w}\\\end{array}}.}

Відстань від поверхні дисплея до глядача, e z {\displaystyle \mathbf {e} _{z}} , безпосередньо пов'язана з полем зору, де α = 2 tan 1 ( 1 / e z ) {\displaystyle \alpha =2\cdot \tan ^{-1}(1/\mathbf {e} _{z})} це розглянутий кут.

Наведені вище рівняння можна переписати таким чином:

b x = ( d x s x ) / ( d z r x ) r z b y = ( d y s y ) / ( d z r y ) r z . {\displaystyle {\begin{array}{lcl}\mathbf {b} _{x}=(\mathbf {d} _{x}\mathbf {s} _{x})/(\mathbf {d} _{z}\mathbf {r} _{x})\mathbf {r} _{z}\\\mathbf {b} _{y}=(\mathbf {d} _{y}\mathbf {s} _{y})/(\mathbf {d} _{z}\mathbf {r} _{y})\mathbf {r} _{z}\\\end{array}}.}

В якому s x , y {\displaystyle \mathbf {s} _{x,y}}  — розмір дисплея, r x , y {\displaystyle \mathbf {r} _{x,y}}  — розмір робочої поверхні диска (наприклад CCD), r z {\displaystyle \mathbf {r} _{z}} відстань від поверхні запису центру камери, та d z {\displaystyle \mathbf {d} _{z}} це відстань, від 3D точки проєктування, до ока користувача.

Подальші операції відсікання і масштабування можуть бути необхідними для відображення 2D площини на будь-якому дисплеї.

Схема

Для того, щоб визначити, який x-координатний екран відповідає точці, в A x , A z {\displaystyle A_{x},A_{z}} помножимо координати точки на:

B x = A x B z A z {\displaystyle B_{x}=A_{x}{\frac {B_{z}}{A_{z}}}}

де

B x {\displaystyle B_{x}} x координата екрана.
A x {\displaystyle A_{x}} x координата моделі.
B z {\displaystyle B_{z}} фокусна відстань — осьова відстань від центра камери[en] до площини зображення.
A z {\displaystyle A_{z}} це відстань до об'єкта.

Примітки

  1. Subhashis Banerjee (18 лютого 2002). The Weak-Perspective Camera. Архів оригіналу за 3 березня 2016. Процитовано 26 травня 2016.
  2. Alter, T. D. (July 1992). 3D Pose from 3 Corresponding Points under Weak-Perspective Projection (PDF) (Технічний звіт). Лабораторія комп’ютерних наук і штучного інтелекту МТІ. Архів оригіналу (PDF) за 17 серпня 2017. Процитовано 4 грудня 2016.
  3. Ingrid Carlbom, Joseph Paciorek (1978). Planar Geometric Projections and Viewing Transformations (PDF). ACM Computing Surveys[en]. 10 (4): 465—502. doi:10.1145/356744.356750. Архів оригіналу (PDF) за 4 березня 2016. Процитовано 26 травня 2016..
  4. Riley, K F (2006). Mathematical Methods for Physics and Engineering. Cambridge University Press. с. 931, 942. doi:10.2277/0521679710. ISBN 0-521-67971-0.
  5. Goldstein, Herbert (1980). Classical Mechanics (вид. 2nd). Reading, Mass.: Addison-Wesley Pub. Co. с. 146–148. ISBN 0-201-02918-9.
  6. Sonka, M; Hlavac, V; Boyle, R (1995). Image Processing, Analysis & Machine Vision (вид. 2nd). Chapman and Hall. с. 14. ISBN 0-412-45570-6.

Посилання

Вікісховище має мультимедійні дані за темою: 3D-проєкція
  • A case study in camera projection
  • Creating 3D Environments from Digital Photographs