changeset 825:6e4357e9116d

corrected and changed matrix to individual columns
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Tue, 28 Jun 2016 15:55:32 -0400
parents 28526917a583
children f6d5da619307
files python/metadata.py scripts/play-synced-videos.py
diffstat 1 files changed, 73 insertions(+), 27 deletions(-) [+]
line wrap: on
line diff
--- a/python/metadata.py	Mon Jun 27 16:19:34 2016 -0400
+++ b/python/metadata.py	Tue Jun 28 15:55:32 2016 -0400
@@ -67,46 +67,82 @@
     resY = Column(Integer)
     frameRate = Column(Float)
     frameRateTimeUnit = Column(String, default = 's')
-    undistort = Column(Boolean)
-    intrinsicCameraMatrixStr = Column(String)
-    distortionCoefficientsStr = Column(String)
+    intrinsicCameraMatrix00 = Column(Float)
+    intrinsicCameraMatrix01 = Column(Float)
+    intrinsicCameraMatrix02 = Column(Float)
+    intrinsicCameraMatrix10 = Column(Float)
+    intrinsicCameraMatrix11 = Column(Float)
+    intrinsicCameraMatrix12 = Column(Float)
+    intrinsicCameraMatrix20 = Column(Float)
+    intrinsicCameraMatrix21 = Column(Float)
+    intrinsicCameraMatrix22 = Column(Float)
+    distortionCoefficients0 = Column(Float)
+    distortionCoefficients1 = Column(Float)
+    distortionCoefficients2 = Column(Float)
+    distortionCoefficients3 = Column(Float)
+    distortionCoefficients4 = Column(Float)
     undistortedImageMultiplication = Column(Float)
     
-    def __init__(self, name, resX, resY, frameRate, frameRateTimeUnit = 's', trackingConfigurationFilename = None, undistort = None, intrinsicCameraMatrix = None, distortionCoefficients = None, undistortedImageMultiplication = None):
+    def __init__(self, name, resX, resY, frameRate, frameRateTimeUnit = 's', trackingConfigurationFilename = None, intrinsicCameraMatrix = None, distortionCoefficients = None, undistortedImageMultiplication = None):
         self.name = name
         self.resX = resX
         self.resY = resY
         self.frameRate = frameRate
         self.frameRateTimeUnit = frameRateTimeUnit
-        self.undistort = False
 
         if trackingConfigurationFilename is not None:
             from storage import ProcessParameters
             params = ProcessParameters(trackingConfigurationFilename)
-            if params.undistort:
-                self.undistort = params.undistort
-                self.intrinsicCameraMatrix = params.intrinsicCameraMatrix
-                self.distortionCoefficients = params.distortionCoefficients
-                self.undistortedImageMultiplication = params.undistortedImageMultiplication
-        elif undistort is not None:
-            self.undistort = undistort
+            self.intrinsicCameraMatrix = params.intrinsicCameraMatrix
+            self.distortionCoefficients = params.distortionCoefficients
+            self.undistortedImageMultiplication = params.undistortedImageMultiplication
+        else:
             self.intrinsicCameraMatrix = intrinsicCameraMatrix
             self.distortionCoefficients = distortionCoefficients
             self.undistortedImageMultiplication = undistortedImageMultiplication
-
-        # populate the db
-        if hasattr(self, 'intrinsicCameraMatrix') and self.intrinsicCameraMatrix is not None\
-        and hasattr(self, 'distortionCoefficients') and self.distortionCoefficients is not None:
-            self.intrinsicCameraMatrixStr = ' '.join('{}'.format(x) for x in self.intrinsicCameraMatrix.flatten('C'))
-            self.distortionCoefficientsStr = ' '.join('{}'.format(x)for x in self.distortionCoefficients)
+            
+        if self.intrinsicCameraMatrix is not None and self.intrinsicCameraMatrix.size == 9:
+            self.intrinsicCameraMatrix00 = self.intrinsicCameraMatrix[0,0]
+            self.intrinsicCameraMatrix01 = self.intrinsicCameraMatrix[0,1]
+            self.intrinsicCameraMatrix02 = self.intrinsicCameraMatrix[0,2]
+            self.intrinsicCameraMatrix10 = self.intrinsicCameraMatrix[1,0]
+            self.intrinsicCameraMatrix11 = self.intrinsicCameraMatrix[1,1]
+            self.intrinsicCameraMatrix12 = self.intrinsicCameraMatrix[1,2]
+            self.intrinsicCameraMatrix20 = self.intrinsicCameraMatrix[2,0]
+            self.intrinsicCameraMatrix21 = self.intrinsicCameraMatrix[2,1]
+            self.intrinsicCameraMatrix22 = self.intrinsicCameraMatrix[2,2]
+        if self.distortionCoefficients is not None and len(self.distortionCoefficients) == 5:
+            self.distortionCoefficients0 = self.distortionCoefficients[0]
+            self.distortionCoefficients1 = self.distortionCoefficients[1]
+            self.distortionCoefficients2 = self.distortionCoefficients[2]
+            self.distortionCoefficients3 = self.distortionCoefficients[3]
+            self.distortionCoefficients4 = self.distortionCoefficients[4]
 
     @orm.reconstructor
     def initOnLoad(self):
-        from numpy import array
-        if len(self.intrinsicCameraMatrixStr) > 0:
-            self.intrinsicCameraMatrix = array([float(x) for x in self.intrinsicCameraMatrixStr.split(" ")]).reshape(3,3)
-        if len(self.distortionCoefficientsStr) > 0:
-            self.distortionCoefficients = [float(x) for x in self.distortionCoefficientsStr.split(" ")]
+        from numpy import zeros
+        if self.intrinsicCameraMatrix00 is not None:
+            self.intrinsicCameraMatrix = zeros((3,3))
+            self.intrinsicCameraMatrix[0,0] = self.intrinsicCameraMatrix00
+            self.intrinsicCameraMatrix[0,1] = self.intrinsicCameraMatrix01
+            self.intrinsicCameraMatrix[0,2] = self.intrinsicCameraMatrix02
+            self.intrinsicCameraMatrix[1,0] = self.intrinsicCameraMatrix10
+            self.intrinsicCameraMatrix[1,1] = self.intrinsicCameraMatrix11
+            self.intrinsicCameraMatrix[1,2] = self.intrinsicCameraMatrix12
+            self.intrinsicCameraMatrix[2,0] = self.intrinsicCameraMatrix20
+            self.intrinsicCameraMatrix[2,1] = self.intrinsicCameraMatrix21
+            self.intrinsicCameraMatrix[2,2] = self.intrinsicCameraMatrix22
+        else:
+            self.intrinsicCameraMatrix = None
+        if self.distortionCoefficients0 is not None:
+            self.distortionCoefficients = [0]*5
+            self.distortionCoefficients[0] = self.distortionCoefficients0
+            self.distortionCoefficients[1] = self.distortionCoefficients1
+            self.distortionCoefficients[2] = self.distortionCoefficients2
+            self.distortionCoefficients[3] = self.distortionCoefficients3
+            self.distortionCoefficients[4] = self.distortionCoefficients4
+        else:
+            self.distortionCoefficients = None
         
 class CameraView(Base):
     __tablename__ = 'camera_views'
@@ -115,18 +151,19 @@
     homographyFilename = Column(String) # path to homograph filename, relative to the site name
     siteIdx = Column(Integer, ForeignKey('sites.idx'))
     cameraTypeIdx = Column(Integer, ForeignKey('camera_types.idx'))
-    homographyDistanceUnit = Column(String, default = 'm') # make sure it is default in the database
     trackingConfigurationFilename = Column(String) # path to configuration .cfg file, relative to site name
-
+    maskFilename = Column(String) # path to mask file, relative to site name
+    
     site = relationship("Site", backref=backref('sites', order_by = idx))
     cameraType = relationship('CameraType', backref=backref('camera_views', order_by = idx))
 
-    def __init__(self, description, homographyFilename, site, cameraType, trackingConfigurationFilename):
+    def __init__(self, description, homographyFilename, site, cameraType, trackingConfigurationFilename, maskFilename):
         self.description = description
         self.homographyFilename = homographyFilename
         self.site = site
         self.cameraType = cameraType
         self.trackingConfigurationFilename = trackingConfigurationFilename
+        self.maskFilename = maskFilename
 
     def getHomographyFilename(self, relativeToSiteFilename = True):
         if relativeToSiteFilename:
@@ -140,9 +177,18 @@
         else:
             return self.trackingConfigurationFilename
 
+    def getMaskFilename(self, relativeToSiteFilename = True):
+        if relativeToSiteFilename:
+            return self.site.getFilename()+path.sep+self.maskFilename
+        else:
+            return self.maskFilename
+
     def getTrackingParameters(self):
-        return ProcessParameters(getTrackingConfigurationFilename())
+        return ProcessParameters(self.getTrackingConfigurationFilename())
 
+    def getHomographyDistanceUnit(self):
+        return self.site.worldDistanceUnit
+    
 class Alignment(Base):
     __tablename__ = 'alignments'
     idx = Column(Integer, primary_key=True)