本文整理汇总了C++中DataPtr::getLandmarks方法的典型用法代码示例。如果您正苦于以下问题:C++ DataPtr::getLandmarks方法的具体用法?C++ DataPtr::getLandmarks怎么用?C++ DataPtr::getLandmarks使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类DataPtr
的用法示例。
在下文中一共展示了DataPtr::getLandmarks方法的11个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: return
double ManualImage2ImageRegistrationWidget::getAccuracy(QString uid)
{
DataPtr fixedData = mServices->registration()->getFixedData();
if (!fixedData)
return 1000.0;
DataPtr movingData = mServices->registration()->getMovingData();
if (!movingData)
return 1000.0;
Landmark masterLandmark = fixedData->getLandmarks()->getLandmarks()[uid];
Landmark targetLandmark = movingData->getLandmarks()->getLandmarks()[uid];
if (masterLandmark.getUid().isEmpty() || targetLandmark.getUid().isEmpty())
return 1000.0;
Vector3D p_master_master = masterLandmark.getCoord();
Vector3D p_target_target = targetLandmark.getCoord();
Transform3D rMmaster = fixedData->get_rMd();
Transform3D rMtarget = movingData->get_rMd();
Vector3D p_target_r = rMtarget.coord(p_target_target);
Vector3D p_master_r = rMmaster.coord(p_master_master);
double targetPoint[3];
double masterPoint[3];
targetPoint[0] = p_target_r[0];
targetPoint[1] = p_target_r[1];
targetPoint[2] = p_target_r[2];
masterPoint[0] = p_master_r[0];
masterPoint[1] = p_master_r[1];
masterPoint[2] = p_master_r[2];
return (vtkMath::Distance2BetweenPoints(targetPoint, masterPoint));
}
示例2: doPatientRegistration
void RegistrationImplService::doPatientRegistration()
{
DataPtr fixedImage = this->getFixedData();
if(!fixedImage)
{
reportError("The fixed data is not set, cannot do patient registration!");
return;
}
LandmarkMap fixedLandmarks = fixedImage->getLandmarks()->getLandmarks();
LandmarkMap toolLandmarks = mPatientModelService->getPatientLandmarks()->getLandmarks();
this->writePreLandmarkRegistration(fixedImage->getName(), fixedImage->getLandmarks()->getLandmarks());
this->writePreLandmarkRegistration("physical", toolLandmarks);
std::vector<QString> landmarks = this->getUsableLandmarks(fixedLandmarks, toolLandmarks);
vtkPointsPtr p_ref = this->convertTovtkPoints(landmarks, fixedLandmarks, fixedImage->get_rMd());
vtkPointsPtr p_pr = this->convertTovtkPoints(landmarks, toolLandmarks, Transform3D::Identity());
// ignore if too few data.
if (p_ref->GetNumberOfPoints() < 3)
return;
bool ok = false;
Transform3D rMpr = this->performLandmarkRegistration(p_pr, p_ref, &ok);
if (!ok)
{
reportError("P-I Landmark registration: Failed to register: [" + qstring_cast(p_pr->GetNumberOfPoints()) + "p]");
return;
}
this->applyPatientRegistration(rMpr, "Patient Landmark");
}
示例3: setTargetLandmark
void ImageLandmarksWidget::setTargetLandmark(QString uid, Vector3D p_target)
{
DataPtr image = this->getCurrentData();
if (!image)
return;
image->getLandmarks()->setLandmark(Landmark(uid, p_target));
}
示例4: importPointMetricsToLandmarkButtonClickedSlot
void ImageLandmarksWidget::importPointMetricsToLandmarkButtonClickedSlot()
{
DataPtr image = this->getCurrentData();
if(!image)
return;
std::map<QString, DataPtr> point_metrics = mServices->patient()->getChildren(image->getUid(), "pointMetric");
std::map<QString, DataPtr>::iterator it = point_metrics.begin();
//Make sure we have enough landmarks
int number_of_landmarks = mServices->patient()->getLandmarkProperties().size();
int number_of_metrics = point_metrics.size();
for(int i=number_of_landmarks; i<number_of_metrics; ++i)
{
QString uid = mServices->patient()->addLandmark();
}
for(; it != point_metrics.end(); ++it)
{
PointMetricPtr point_metric = boost::static_pointer_cast<PointMetric>(it->second);
if(!point_metric)
continue;
Vector3D pos_x = point_metric->getCoordinate();
//Transform3D d_M_x = mServices->spaceProvider()->get_toMfrom(CoordinateSystem::fromString(image->getSpace()), point_metric->getSpace());
//Vector3D pos_d = d_M_x.coord(pos_x);
QString point_metric_name = point_metric->getName();
image->getLandmarks()->setLandmark(Landmark(point_metric_name, pos_x));
this->activateLandmark(point_metric_name);
}
}
示例5: getTargetLandmarks
LandmarkMap ImageLandmarksWidget::getTargetLandmarks() const
{
DataPtr image = this->getCurrentData();
if (!image)
return LandmarkMap();
return image->getLandmarks()->getLandmarks();
}
示例6: deleteLandmarksButtonClickedSlot
void ImageLandmarksWidget::deleteLandmarksButtonClickedSlot()
{
DataPtr image = this->getCurrentData();
if (!image)
return;
image->getLandmarks()->clear();
this->setModified();
mServices->patient()->deleteLandmarks();
}
示例7: removeLandmarkButtonClickedSlot
void ImageLandmarksWidget::removeLandmarkButtonClickedSlot()
{
DataPtr image = this->getCurrentData();
if (!image)
return;
QString next = this->getNextLandmark();
image->getLandmarks()->removeLandmark(mActiveLandmark);
this->activateLandmark(next);
}
示例8: doFastRegistration_Translation
void RegistrationImplService::doFastRegistration_Translation()
{
DataPtr fixedImage = this->getFixedData();
if(!fixedImage)
{
reportError("The fixed data is not set, cannot do image registration!");
return;
}
LandmarkMap fixedLandmarks = fixedImage->getLandmarks()->getLandmarks();
LandmarkMap toolLandmarks = mPatientModelService->getPatientLandmarks()->getLandmarks();
this->writePreLandmarkRegistration(fixedImage->getName(), fixedImage->getLandmarks()->getLandmarks());
this->writePreLandmarkRegistration("physical", toolLandmarks);
std::vector<QString> landmarks = this->getUsableLandmarks(fixedLandmarks, toolLandmarks);
Transform3D rMd = fixedImage->get_rMd();
Transform3D rMpr_old = mPatientModelService->get_rMpr();
std::vector<Vector3D> p_pr_old = this->convertAndTransformToPoints(landmarks, fixedLandmarks, rMpr_old.inv()*rMd);
std::vector<Vector3D> p_pr_new = this->convertAndTransformToPoints(landmarks, toolLandmarks, Transform3D::Identity());
// ignore if too few data.
if (p_pr_old.size() < 1)
return;
LandmarkTranslationRegistration landmarkTransReg;
bool ok = false;
Transform3D pr_oldMpr_new = landmarkTransReg.registerPoints(p_pr_old, p_pr_new, &ok);
if (!ok)
{
reportError("Fast translation registration: Failed to register: [" + qstring_cast(p_pr_old.size()) + "points]");
return;
}
this->applyPatientRegistration(rMpr_old*pr_oldMpr_new, "Fast Translation");
}
示例9: editLandmarkButtonClickedSlot
void ImageLandmarksWidget::editLandmarkButtonClickedSlot()
{
PickerRepPtr PickerRep = this->getPickerRep();
if (!PickerRep)
{
reportError("Need a 3D view to edit landmarks.");
return;
}
DataPtr image = this->getCurrentData();
if (!image)
return;
QString uid = mActiveLandmark;
Vector3D pos_r = PickerRep->getPosition();
Vector3D pos_d = image->get_rMd().inv().coord(pos_r);
image->getLandmarks()->setLandmark(Landmark(uid, pos_d));
this->activateLandmark(this->getNextLandmark());
}
示例10: getAccuracy
double LandmarkRegistrationWidget::getAccuracy(QString uid)
{
DataPtr fixedData = mServices->registration()->getFixedData();
if (!fixedData)
return 1000.0;
Landmark masterLandmark = fixedData->getLandmarks()->getLandmarks()[uid];
Landmark targetLandmark = this->getTargetLandmarks()[uid];
if (masterLandmark.getUid().isEmpty() || targetLandmark.getUid().isEmpty())
return 1000.0;
Vector3D p_master_master = masterLandmark.getCoord();
Vector3D p_target_target = targetLandmark.getCoord();
Transform3D rMmaster = fixedData->get_rMd();
Transform3D rMtarget = this->getTargetTransform();
Vector3D p_target_r = rMtarget.coord(p_target_target);
Vector3D p_master_r = rMmaster.coord(p_master_master);
return (p_target_r - p_master_r).length();
}
示例11: doImageRegistration
void RegistrationImplService::doImageRegistration(bool translationOnly)
{
//check that the fixed data is set
DataPtr fixedImage = this->getFixedData();
if(!fixedImage)
{
reportError("The fixed data is not set, cannot do landmark image registration!");
return;
}
//check that the moving data is set
DataPtr movingImage = this->getMovingData();
if(!movingImage)
{
reportError("The moving data is not set, cannot do landmark image registration!");
return;
}
// ignore self-registration, this gives no effect bestcase, buggy behaviour worstcase (has been observed)
if(movingImage==fixedImage)
{
reportError("The moving and fixed are equal, ignoring landmark image registration!");
return;
}
LandmarkMap fixedLandmarks = fixedImage->getLandmarks()->getLandmarks();
LandmarkMap imageLandmarks = movingImage->getLandmarks()->getLandmarks();
this->writePreLandmarkRegistration(fixedImage->getName(), fixedImage->getLandmarks()->getLandmarks());
this->writePreLandmarkRegistration(movingImage->getName(), movingImage->getLandmarks()->getLandmarks());
std::vector<QString> landmarks = getUsableLandmarks(fixedLandmarks, imageLandmarks);
vtkPointsPtr p_fixed_r = convertTovtkPoints(landmarks, fixedLandmarks, fixedImage->get_rMd());
vtkPointsPtr p_moving_r = convertTovtkPoints(landmarks, imageLandmarks, movingImage->get_rMd());
int minNumberOfPoints = 3;
if (translationOnly)
minNumberOfPoints = 1;
// ignore if too few data.
if (p_fixed_r->GetNumberOfPoints() < minNumberOfPoints)
{
reportError(
QString("Found %1 corresponding landmarks, need %2, cannot do landmark image registration!")
.arg(p_fixed_r->GetNumberOfPoints())
.arg(minNumberOfPoints)
);
return;
}
bool ok = false;
QString idString;
Transform3D delta;
if (translationOnly)
{
LandmarkTranslationRegistration landmarkTransReg;
delta = landmarkTransReg.registerPoints(convertVtkPointsToPoints(p_fixed_r), convertVtkPointsToPoints(p_moving_r), &ok);
idString = QString("Image to Image Landmark Translation");
}
else
{
Transform3D rMd;
delta = this->performLandmarkRegistration(p_moving_r, p_fixed_r, &ok);
idString = QString("Image to Image Landmark");
}
if (!ok)
{
reportError("I-I Landmark registration: Failed to register: [" + qstring_cast(p_moving_r->GetNumberOfPoints()) + "p], "+ movingImage->getName());
return;
}
this->applyImage2ImageRegistration(delta, idString);
}