I'm converting a matrix (M) to a quaternion so that I can e.g. lerp between two different transformation matrices making a smooth animation of an image where I need to make the video frames myself.
When I convert back from the quaternion to a matrix as a test, this new matrix is very far from being the same as the one that became the quat.
import numpy as np
from transforms3d import quaternions
M = np.array([[ 0.757403109, -0.186744161, 145.541734],
[ -0.154492906, 0.626185286, 100.878814],
[ -0.000294826495, -0.000344726091, 1.00000000]])
quat = quaternions.mat2quat(M)
testM = quaternions.quat2mat(quat)
print("TEST: M original")
print(M)
print("TEST: quat back to mat (testM)")
print(testM)
print("Why not the same")
print ("quat")
print(quat)
print("quat of testM")
print(quaternions.mat2quat(testM))
#Scaling gives same result, scale M to be -1. to 1
mmax = np.amax(M)
scaleTestM = M / mmax
print("M Scaled")
print(scaleTestM)
quatOfScaled = quaternions.mat2quat(scaleTestM)
print("Quat of scaled")
print(quaternions.quat2mat(quatOfScaled))
Do I miss something of what a quaternion actually can represent or is the code wrong? If this cannot work, other suggestions on how to move smoothly between two transformation matrices is appreciated.
Python 3.6
Console output is this:
TEST: M original [[ 7.57403109e-01 -1.86744161e-01 1.45541734e+02] [ -1.54492906e-01 6.26185286e-01 1.00878814e+02] [ -2.94826495e-04 -3.44726091e-04 1.00000000e+00]] TEST: quat back to mat (testM) [[ 0.38627453 -0.42005089 0.8211877 ] [-0.54462197 0.61466344 0.57059247] [-0.74443193 -0.6676422 0.00865989]] Why not the same quat [ 0.70880143 -0.43673539 0.55220671 -0.04393723] quat of testM [ 0.70880143 -0.43673539 0.55220671 -0.04393723] M Scaled [[ 5.20402697e-03 -1.28309699e-03 1.00000000e+00] [ -1.06150244e-03 4.30244486e-03 6.93126372e-01] [ -2.02571789e-06 -2.36857210e-06 6.87088145e-03]] Quat of scaled [[ 0.38627453 -0.42005089 0.8211877 ] [-0.54462197 0.61466344 0.57059247] [-0.74443193 -0.6676422 0.00865989]]
There are multiple matrix representations that are true for a given Quaternion. The information about which of these representations you originally used, is lost when you transform your matrix to a Quaternion.
See e.g. matrix-representations in https://en.wikipedia.org/wiki/Quaternion