Якщо об'єкт має 6 відомих точок (відомі тривимірні координати, і ), ви можете обчислити розташування камери, пов'язане з системою координат об'єктів.X,YZ
Спочатку кілька основ.
Однорідна координата - це векторне представлення евклідової координати до якої ми додали так званий коефіцієнт масштабу такий, що однорідна координата . У власних обчисленнях намагайтеся зберегти якомога частіше (це означає, що ви "нормалізуєте" однорідну координату, поділивши її з її останнім елементом: ). Ми також можемо використовувати однорідну презентацію для 2D точок, таких що (пам'ятайте, що ці і(X,Y,Z)ωX=ω[XYZ1]Tω=1X←Xωx=ω[XY1]ω,X,YZрізні для кожної точки, будь то 2D або 3D точка). Однорідне подання координат полегшує математику.
Матриця камери - це матриця проекції від 3D-світу до датчика зображення:3×4
x=PX
Де - точка датчика зображення (з піксельними одиницями), а - проектована 3D-точка (скажемо, що вона має міліметри як свої одиниці).xX
Ми пам’ятаємо, що перехресний добуток між двома 3-векторами можна визначити як множення матричного вектора таким чином, що:
v×u=(v)xu=⎡⎣⎢0v3−v2−v30v1v2−v10⎤⎦⎥u
Корисно також зазначити, що перехресне виробництво .v×v=0
Тепер спробуємо розв’язати матрицю проекції з попередніх рівнянь. Дозволяє помножити рівняння проекції з лівої сторони на s перехресну матрицю продукту:Px
(x)xx=(x)xPX=0
Ага! Результат повинен бути нульовим вектором. Якщо ми зараз відкриємо рівняння, отримаємо:
⎡⎣⎢0w−y−w0xy−x0⎤⎦⎥⎡⎣⎢P1,1P2,1P3,1P1,2P2,2P3,2P1,3P2,3P3,3P1,4P2,4P3,4⎤⎦⎥X=⎡⎣⎢P3,4Wy−P2,1Xw−P2,2Yw−P2,4Ww+P3,1Xy−P2,3Zw+P3,2Yy+P3,3ZyP1,4Ww+P1,1Xw−P3,4Wx+P1,2Yw−P3,1Xx+P1,3Zw−P3,2Yx−P3,3ZxP2,4Wx+P2,1Xx−P1,4Wy−P1,1Xy+P2,2Yx−P1,2Yy+P2,3Zx−P1,3Zy⎤⎦⎥=0
Маючи трохи рефакторингу, ми можемо отримати проекційну матрицю поза матриці:P
⎡⎣⎢⎢⎢0Xw−Xy0Yw−Yy0Zw−Zy0Ww−Wy−Xw0Xx−Yw0Yx−Zw0Zx−Ww0WxXy−Xx0Yy−Yx0Zy−Zx0Wy−Wx0⎤⎦⎥⎥⎥⎡⎣⎢⎢P1P2P3⎤⎦⎥⎥=0
Де є транспонована : го рядка матриці камери . Останній рядок попереднього (великого) матричного рівняння є лінійним поєднанням перших двох рядків, тому він не приносить додаткової інформації, і його можна залишати поза увагою.PnnP
Невелика пауза, щоб ми могли зібрати свої труднощі. Зауважте, що попереднє матричне рівняння має бути сформовано для кожного відомого 3D-> 2D відповідності (їх повинно бути принаймні 6).
Тепер для кожної точкової відповідності обчисліть перші два ряди матриці вище, матриці один на одного і отримаєте нову матрицю для якої2×12A
A⎡⎣⎢P1P2P3⎤⎦⎥=0
Оскільки у нас є 12 невідомих і (принаймні) 12 рівнянь, це можна вирішити. Проблема полягає лише в тому, що ми не хочемо мати тривіальної відповіді, де
⎡⎣⎢P1P2P3⎤⎦⎥=0
На щастя, ми можемо використовувати сингулярне розкладання значення (SVD) для примушування
∥⎡⎣⎢P1P2P3⎤⎦⎥∥=1
Отже, щоб розв’язати рівняння, обчисліть SVD матриці і виберіть сингулярний вектор, що відповідає найменшому власному значенню. Цей вектор є нульовим вектором матриці A, а також рішенням для матриці камери . Просто помістити значення і форма .AP[P1P2P3]TP
Тепер ви хотіли знати відстань до об’єкта. визначається як:P
P=K[R−RC]
де - розташування камери відносно походження об'єктів. Це можна вирішити з шляхом обчислення нульового вектора s.CPP
(Хартлі, Зісерман - Геометрія декількох поглядів у комп'ютерному зорі)
Нарешті, обчислюючи розташування камер для двох кадрів, ви можете обчислити невідомі місця розташування об'єктів (або розташування деяких точок об'єкта), вирішивши два рівняння для :X
x1=P1Xx2=P2X
Це приблизно так само, як ми вирішили матриці камери:
(x1)xP1X=0(x2)xP2X=0
І так далі.