void RegistrationImplService::applyPatientRegistration(Transform3D rMpr_new, QString description) { RegistrationTransform regTrans(rMpr_new, QDateTime::currentDateTime(), description); regTrans.mFixed = mFixedData; mPatientModelService->updateRegistration_rMpr(mLastRegistrationTime, regTrans); mLastRegistrationTime = regTrans.mTimestamp; reportSuccess(QString("Patient registration [%1] has been performed.").arg(description)); }
void RegistrationImplService::applyImage2ImageRegistration(Transform3D delta_pre_rMd, QString description) { RegistrationTransform regTrans(delta_pre_rMd, QDateTime::currentDateTime(), description); regTrans.mFixed = mFixedData; regTrans.mMoving = mMovingData; this->updateRegistration(mLastRegistrationTime, regTrans, this->getMovingData()); mLastRegistrationTime = regTrans.mTimestamp; reportSuccess(QString("Image registration [%1] has been performed on %2").arg(description).arg(regTrans.mMoving) ); }
void updateRegistration(cx::DataPtr fixed, cx::DataPtr moving, cx::Transform3D delta_pre_rMd) { QDateTime oldTime = QDateTime::currentDateTime(); cx::RegistrationTransform regTrans(delta_pre_rMd, QDateTime::currentDateTime(), "test"); regTrans.mFixed = fixed->getUid(); regTrans.mMoving = moving->getUid(); cx::RegistrationApplicator applicator(mData); applicator.updateRegistration(oldTime, regTrans); }
/**\brief Identical to doFastRegistration_Orientation(), except data does not move. * * When applying a new transform to the patient orientation, all data is moved * the the inverse of that value, thus giving a net zero change along the path * pr...d_i. * */ void RegistrationImplService::applyPatientOrientation(const Transform3D& tMtm, const Transform3D& prMt) { Transform3D rMpr = mPatientModelService->get_rMpr(); //create a marked(m) space tm, which is related to tool space (t) as follows: //the tool is defined in DICOM space such that //the tool points toward the patients feet and the spheres faces the same //direction as the nose Transform3D tMpr = prMt.inv(); // this is the new patient registration: Transform3D tmMpr = tMtm * tMpr; // the change in pat reg becomes: Transform3D F = tmMpr * rMpr.inv(); QString description("Patient Orientation"); QDateTime oldTime = this->getLastRegistrationTime(); // time of previous reg this->applyPatientRegistration(tmMpr, description); // now apply the inverse of F to all data, // thus ensuring the total path from pr to d_i is unchanged: Transform3D delta_pre_rMd = F; // use the same registration time as generated in the applyPatientRegistration() above: RegistrationTransform regTrans(delta_pre_rMd, this->getLastRegistrationTime(), description); std::map<QString,DataPtr> data = mPatientModelService->getData(); // update the transform on all target data: for (std::map<QString,DataPtr>::iterator iter = data.begin(); iter!=data.end(); ++iter) { DataPtr current = iter->second; RegistrationTransform newTransform = regTrans; newTransform.mValue = regTrans.mValue * current->get_rMd(); current->get_rMd_History()->updateRegistration(oldTime, newTransform); report("Updated registration of data " + current->getName()); std::cout << "rMd_new\n" << newTransform.mValue << std::endl; } this->setLastRegistrationTime(regTrans.mTimestamp); reportSuccess("Patient Orientation has been performed"); }