Example #1
0
    def _calibrateTechnicalSegment(self,aquiStatic, segName, dictRef,frameInit,frameEnd, options=None):

        segPicked=self.getSegment(segName)
        for tfName in dictRef[segName]: # TF name

            pt1=aquiStatic.GetPoint(str(dictRef[segName][tfName]['labels'][0])).GetValues()[frameInit:frameEnd,:].mean(axis=0)
            pt2=aquiStatic.GetPoint(str(dictRef[segName][tfName]['labels'][1])).GetValues()[frameInit:frameEnd,:].mean(axis=0)
            pt3=aquiStatic.GetPoint(str(dictRef[segName][tfName]['labels'][2])).GetValues()[frameInit:frameEnd,:].mean(axis=0)

            ptOrigin=aquiStatic.GetPoint(str(dictRef[segName][tfName]['labels'][3])).GetValues()[frameInit:frameEnd,:].mean(axis=0)


            a1=(pt2-pt1)
            a1=np.divide(a1,np.linalg.norm(a1))

            v=(pt3-pt1)
            v=np.divide(v,np.linalg.norm(v))

            a2=np.cross(a1,v)
            a2=np.divide(a2,np.linalg.norm(a2))

            x,y,z,R=frame.setFrameData(a1,a2,dictRef[segName][tfName]['sequence'])

            segPicked.referentials[-1].static.m_axisX=x # work on the last TF in the list : thus index -1
            segPicked.referentials[-1].static.m_axisY=y
            segPicked.referentials[-1].static.m_axisZ=z

            segPicked.referentials[-1].static.setRotation(R)
            segPicked.referentials[-1].static.setTranslation(ptOrigin)

            #  - add Nodes in segmental static(technical)Frame -
            for label in segPicked.m_markerLabels:
                globalPosition=aquiStatic.GetPoint(str(label)).GetValues()[frameInit:frameEnd,:].mean(axis=0)
                segPicked.referentials[-1].static.addNode(label,globalPosition,positionType="Global")
Example #2
0
    def _calibrateAnatomicalSegment(self,
                                    aquiStatic,
                                    segName,
                                    dictAnatomic,
                                    frameInit,
                                    frameEnd,
                                    options=None):

        # calibration of technical Frames
        for segName in dictAnatomic:

            segPicked = self.getSegment(segName)
            tf = segPicked.getReferential("TF")

            nd1 = str(dictAnatomic[segName]['labels'][0])
            pt1 = tf.static.getNode_byLabel(nd1).m_global

            nd2 = str(dictAnatomic[segName]['labels'][1])
            pt2 = tf.static.getNode_byLabel(nd2).m_global

            nd3 = str(dictAnatomic[segName]['labels'][2])
            pt3 = tf.static.getNode_byLabel(nd3).m_global

            ndO = str(dictAnatomic[segName]['labels'][3])
            ptO = tf.static.getNode_byLabel(ndO).m_global

            a1 = (pt2 - pt1)
            a1 = np.divide(a1, np.linalg.norm(a1))

            v = (pt3 - pt1)
            v = np.divide(v, np.linalg.norm(v))

            a2 = np.cross(a1, v)
            a2 = np.divide(a2, np.linalg.norm(a2))

            x, y, z, R = frame.setFrameData(a1, a2,
                                            dictAnatomic[segName]['sequence'])

            segPicked.anatomicalFrame.static.m_axisX = x  # work on the last TF in the list : thus index -1
            segPicked.anatomicalFrame.static.m_axisY = y
            segPicked.anatomicalFrame.static.m_axisZ = z

            segPicked.anatomicalFrame.static.setRotation(R)
            segPicked.anatomicalFrame.static.setTranslation(ptO)

            # --- relative rotation Technical Anatomical
            tf.setRelativeMatrixAnatomic(
                np.dot(tf.static.getRotation().T,
                       segPicked.anatomicalFrame.static.getRotation()))

            # add tracking markers as node
            for label in segPicked.m_markerLabels:
                globalPosition = aquiStatic.GetPoint(
                    str(label)).GetValues()[frameInit:frameEnd, :].mean(axis=0)
                segPicked.anatomicalFrame.static.addNode(label,
                                                         globalPosition,
                                                         positionType="Global")