python


Camera rotation matrix


I am trying to raytrace a video. For that matter, I need the camera roation matrix for every frame, in world coordinates. The camera is at the origin. There are no translation.
I have the trajectory of the camera as changes in rotation for every frame.
So for every frame, I have three values (roll, yaw, pitch) that describe how much the camera should rotate from this frame to the next. These rotations are to be understand in the camera coordinate system.
How do I compute the world coordinate rotation matrices for the frames?
What I tried:
def rot_x(angle):
cosa = np.cos(angle)
sina = np.sin(angle)
return np.array([[1,0,0], [0, cosa, -sina], [0, sina, cosa]])
def rot_y(angle):
cosa = np.cos(angle)
sina = np.sin(angle)
return np.array([[cosa, 0, sina], [0,1,0], [-sina, 0, cosa]])
def rot_z(angle):
cosa = np.cos(angle)
sina = np.sin(angle)
return np.array([[cosa, -sina, 0], [sina, cosa, 0], [0,0,1]])
matrices = [initial_rot]
for pitch, yaw, roll in frames_data:
rx = rot_x(pitch)
ry = rot_y(yaw)
rz = rot_z(roll)
last_matrix = matrices[-1]
matrices.append(last_matrix.T.dot(rx).dot(ry).dot(rz))
(Since last_matrix should be orthonormal, so the inverse of it should be the transpose).
However, something is horribly wrong, the rendered video just flickers in the y dimension. I am sure there is something wrong with the math here..
The order of the matrix multiplications matters. Applying another rotation should be done by left-multiplying (assuming a standard convention).
Since this is simply composition multiple rotations, there should not be any need to inverse the last rotation.
The complete rotation that should be computed for frame N is:
R_n = R(yaw_n, pitch_n, roll_n) R_{n - 1} R_{n - 2} ... R_1 R_0
with:
R_0: the initial rotation (i.e. initial_rot)
R_n: the complete rotation for the frame N
R(yaw_n, pitch_n, roll_n): the rotation derived from the yaw / pitch / roll values applied between frame N - 1 and N (i.e. rx.dot(ry).dot(rz))
Hence the last line in the code excerpt should instead be:
rotation = rx.dot(ry).dot(rz)
matrices.append(rotation.dot(last_matrix))

Related Links

Trouble creating MSI installer with electron
Error getting json using oauthlib python
How to extend instance with no class inheritance [duplicate]
How to check for inclusion of multisets?
why cv2.imwrite() changes the color of pics?
Optimize data conversion program to avoid memory error
Flask list of last used pages with sessions TypeError
python sqlite3.OperationalError: near “-”: syntax error
Using bokeh to select a data region within a Jupyter Notebook
Using asyncio nested_future() and gather() with nested loops
why does no picture show
SQLAlchemy: Error binding parameter 0 - probably unsupported type
Get path of file uploaded to Flask [duplicate]
How to load DICOM files in Python?
iPerf3 as a ssh.exec command using paramiko in Python
MemoryError when trying to append

Categories

HOME
checkbox
uibutton
google-tag-manager
concourse
h2
flyway
apple-numbers
adsense
tumblr
pygame
structuremap
window
x11
onsen-ui2
finite-group-theory
tee
dendrogram
android-fragmentactivity
cython
scalaz7
servicemix
dd-wrt
invoke-command
spring-profiles
transient
large-data
declare
duktape
soundjs
z3py
vcf
floor
uiviewpropertyanimator
seamless-immutable
multi-agent
rhel6
butterknife
fontconfig
castle-dynamicproxy
sqldatareader
radians
spoofing
nssplitview
aerogear
group-concat
xmp
git-rebase
approval-tests
throughput
self-hosting
datainputstream
calibration
pylearn
java-melody
viewflipper
omnifocus
odftoolkit
adcolony
vcl
pic24
httpcontext
map-force
bigint
installshield-2011
onselect
localtime
ienumerator
code-conversion
pitch
css-tables
rose-db-object
hinstance
mysql-error-1045
easygui
openwysiwyg
web-statistics
web-analytics-tools

Resources

Mobile Apps Dev
Database Users
javascript
java
csharp
php
android
MS Developer
developer works
python
ios
c
html
jquery
RDBMS discuss
Cloud Virtualization
Database Dev&Adm
javascript
java
csharp
php
python
android
jquery
ruby
ios
html
Mobile App
Mobile App
Mobile App