58 mAvarageAccuracyLabel =
new QLabel(QString(
" "),
this);
68 return QString(
"<b>Matrix fMm from moving to fixed image</b>");
70 return "<Invalid matrix>";
75 return mServices->registration()->getMovingData() &&
mServices->registration()->getFixedData();
81 return Transform3D::Identity();
89 if(!history->getData().empty())
90 init_rMd = history->getData().front().mValue;
92 init_rMd = Transform3D::Identity();
94 Transform3D current_rMd = history->getCurrentRegistration().mValue;
95 fMm = current_rMd * init_rMd.inv();
111 if(!history->getData().empty())
112 init_rMd = history->getData().front().mValue;
114 init_rMd = Transform3D::Identity();
119 mServices->registration()->addImage2ImageRegistration(delta,
"Manual Image");
120 this->updateAverageAccuracyLabel();
126 std::map<QString, LandmarkProperty> props =
mServices->patient()->getLandmarkProperties();
129 numActiveLandmarks = 0;
130 std::map<QString, LandmarkProperty>::iterator it = props.begin();
131 for (; it != props.end(); ++it)
133 if (!it->second.getActive())
135 QString uid = it->first;
136 double val = this->getAccuracy(uid);
140 numActiveLandmarks++;
143 if (numActiveLandmarks == 0)
145 return (sqrt(sum / (
double)numActiveLandmarks));
148 double ManualImage2ImageRegistrationWidget::getAccuracy(QString uid)
157 Landmark masterLandmark = fixedData->getLandmarks()->getLandmarks()[uid];
158 Landmark targetLandmark = movingData->getLandmarks()->getLandmarks()[uid];
159 if (masterLandmark.
getUid().isEmpty() || targetLandmark.
getUid().isEmpty())
167 Vector3D p_target_r = rMtarget.coord(p_target_target);
168 Vector3D p_master_r = rMmaster.coord(p_master_master);
170 double targetPoint[3];
171 double masterPoint[3];
172 targetPoint[0] = p_target_r[0];
173 targetPoint[1] = p_target_r[1];
174 targetPoint[2] = p_target_r[2];
175 masterPoint[0] = p_master_r[0];
176 masterPoint[1] = p_master_r[1];
177 masterPoint[2] = p_master_r[2];
179 return (vtkMath::Distance2BetweenPoints(targetPoint, masterPoint));
182 void ManualImage2ImageRegistrationWidget::updateAverageAccuracyLabel()
186 DataPtr fixedData = boost::dynamic_pointer_cast<
Data>(
mServices->registration()->getFixedData());
187 DataPtr movingData = boost::dynamic_pointer_cast<
Data>(
mServices->registration()->getMovingData());
189 fixedName = fixedData->
getName();
191 movingName = movingData->getName();
193 int numberOfActiveLandmarks = 0;
194 if(this->isAverageAccuracyValid(numberOfActiveLandmarks))
196 mAvarageAccuracyLabel->setText(tr(
"Root mean square accuracy (Landmarks) %1 mm, calculated in %2 landmarks").
197 arg(this->
getAverageAccuracy(numberOfActiveLandmarks), 0,
'f', 2).arg(numberOfActiveLandmarks));
198 mAvarageAccuracyLabel->setToolTip(QString(
"Root Mean Square landmark accuracy from target [%1] to fixed [%2].").
199 arg(movingName).arg(fixedName));
203 mAvarageAccuracyLabel->setText(
" ");
204 mAvarageAccuracyLabel->setToolTip(
"");
208 bool ManualImage2ImageRegistrationWidget::isAverageAccuracyValid(
int& numberOfActiveLandmarks)
210 int numActiveLandmarks = 0;
212 if(numActiveLandmarks < 1)
boost::shared_ptr< class RegistrationHistory > RegistrationHistoryPtr
One landmark, or fiducial, coordinate.
Transform3D Transform3D
Transform3D is a representation of an affine 3D transform.
boost::shared_ptr< class Data > DataPtr
boost::shared_ptr< class StringPropertyBase > StringPropertyBasePtr
virtual QString getName() const
boost::shared_ptr< class RegServices > RegServicesPtr
Vector3D getCoord() const
Eigen::Vector3d Vector3D
Vector3D is a representation of a point or vector in 3D.
Superclass for all data objects.
bool similar(const CameraInfo &lhs, const CameraInfo &rhs, double tol)
Namespace for all CustusX production code.