X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=vv%2FvvToolRigidReg.cxx;h=bd288500eeba1e1ca70b4e9bd61e8f96c25e8b01;hb=4c29241d0b3f5adec779f5dcd4f9671df1417e84;hp=d1cc0657eaf6e0e4fa1f730a7c86e99a099de2b1;hpb=7d661785535eaf41eaccce354d7addf263d0d42a;p=clitk.git diff --git a/vv/vvToolRigidReg.cxx b/vv/vvToolRigidReg.cxx index d1cc065..bd28850 100644 --- a/vv/vvToolRigidReg.cxx +++ b/vv/vvToolRigidReg.cxx @@ -28,7 +28,7 @@ // clitk #include "clitkTransformUtilities.h" - +#include "clitkAffineRegistrationGenericFilter.h" // qt #include #include @@ -55,13 +55,12 @@ vvToolRigidReg::vvToolRigidReg(vvMainWindowBase * parent, Qt::WindowFlags f): // qsize.setWidth(850); // mToolWidget->setFixedSize(qsize); - // Set how many inputs are needed for this tool - // mFilter = new clitk::AffineTransformGenericFilter; + mFilter = new clitk::AffineRegistrationGenericFilter; // Set how many inputs are needed for this tool - AddInputSelector("Select moving image"); - AddInputSelector("Select fixed image"); + AddInputSelector("Select moving image",mFilter); + AddInputSelector("Select fixed image",mFilter); } //------------------------------------------------------------------------------ @@ -83,14 +82,56 @@ bool vvToolRigidReg::close() //------------------------------------------------------------------------------ void vvToolRigidReg::reject() { - return vvToolWidgetBase::reject(); + + return vvToolWidgetBase::reject(); } //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ void vvToolRigidReg::GetArgsInfoFromGUI() -{ - DD("works"); +{ + QFont font=QFont("Times New Roman",10); + tab2textedit->setTextColor(QColor(255,0,0)); + tab2textedit->setCurrentFont(font); + tab2textedit->update(); + QString str; + QString file = QFileDialog::getOpenFileName( + this, + "Choose the Transformation Parameters file", + mMainWindow->GetInputPathName(), + "Text (*.conf *.txt *.rtf *.doc)"); + if (file.isEmpty()) + return; + QFile Qfile1(file); + // ifstream readfile; + std::string configfile= file.toStdString(); + cmdline_parser_clitkAffineRegistration_configfile(const_cast(configfile.c_str()),&mArgsInfo,1,1,1); + mArgsInfo.gradient_flag=1; + + //Read from File and display it on the TextBox 2 + ifstream readfile; + std::vector Qstr; + readfile.open(configfile.c_str()); + if (readfile.is_open()) + { + while (!readfile.eof()) + { + readfile >> configfile; + Qstr.push_back(QString(configfile.c_str())); + } + readfile.close(); + } + else { + cout << "Unable to open file"; + } + for(unsigned int i=0;itoPlainText(); + str.append(Qstr.at(i)); + tab2textedit->setText(str); + str.append("\n"); + tab2textedit->setText(str); + } } //------------------------------------------------------------------------------ @@ -112,14 +153,16 @@ void vvToolRigidReg::InputIsSelected(std::vector & l) QMessageBox::information(this, "Warning","Your Reference and Target Images are the same"); } mTwoInputs = true; - SetOverlay(); + SetOverlay(mInput2->GetImage()); mImageSize=mInput1->GetImage()->GetSize(); SetRotationCenter(); SetSliderRanges(); //connect all sigs to slots connect(resetbutton, SIGNAL(pressed()), this, SLOT(ResetTransform())); - connect(tab2loadbutton, SIGNAL(pressed()), this, SLOT(AutoRegister())); + connect(tab2loadbutton, SIGNAL(pressed()), this, SLOT(GetArgsInfoFromGUI())); + connect(tab2applybutton, SIGNAL(pressed()), this, SLOT(AutoRegister())); + connect(Xval, SIGNAL(editingFinished()), this, SLOT(SetXvalue())); connect(Yval, SIGNAL(editingFinished()), this, SLOT(SetYvalue())); @@ -140,7 +183,7 @@ void vvToolRigidReg::InputIsSelected(std::vector & l) connect(xrot_sb, SIGNAL(valueChanged(double)), this, SLOT(UpdateTransform_sb())); connect(yrot_sb, SIGNAL(valueChanged(double)), this, SLOT(UpdateTransform_sb())); connect(zrot_sb, SIGNAL(valueChanged(double)), this, SLOT(UpdateTransform_sb())); - + connect(loadbutton, SIGNAL(pressed()), this, SLOT(ReadFile())); connect(savebutton, SIGNAL(pressed()), this, SLOT(SaveFile())); @@ -155,10 +198,10 @@ void vvToolRigidReg::apply() //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ -void vvToolRigidReg::SetOverlay() +void vvToolRigidReg::SetOverlay(vvImage::Pointer Image) { for (int i =0; iNumberOfSlicers(); i++) { - mCurrentSlicerManager->GetSlicer(i)->SetOverlay(mInput2->GetImage()); + mCurrentSlicerManager->GetSlicer(i)->SetOverlay(Image); mCurrentSlicerManager->GetSlicer(i)->SetActorVisibility("overlay",0,true); mCurrentSlicerManager->SetColorMap(); mCurrentSlicerManager->Render(); @@ -226,17 +269,20 @@ void vvToolRigidReg::SetTransform(double tX, double tY, double tZ, double aX, do //------------------------------------------------------------------------------ void vvToolRigidReg::SetTransform(vtkMatrix4x4 *matrix) { - vtkSmartPointer transform =mCurrentSlicerManager->GetImage()->GetTransform(); - transform->SetMatrix(matrix); + vtkSmartPointer transform=vtkSmartPointer::New(); + for(int i=0; i<4;i++) + for(int j=0;j<4;j++) + mCurrentSlicerManager->GetImage()->GetTransform()->GetMatrix()->SetElement(i,j,matrix->GetElement(i,j)); + Render(); } //------------------------------------------------------------------------------ - + //------------------------------------------------------------------------------ void vvToolRigidReg::Render() { for (int i=0; iNumberOfSlicers(); i++) { - mCurrentSlicerManager->GetSlicer(i)->ForceUpdateDisplayExtent(); + mCurrentSlicerManager->GetSlicer(i)->ForceUpdateDisplayExtent(); mCurrentSlicerManager->GetSlicer(i)->Render(); } } @@ -320,8 +366,8 @@ void vvToolRigidReg::UpdateTransform_sliders() ytrans_slider->value()*mInput1->GetImage()->GetSpacing()[1], ztrans_slider->value()*mInput1->GetImage()->GetSpacing()[2], xrot_slider->value(),yrot_slider->value(),zrot_slider->value(),false); - UpdateTransform(true); - Render(); + UpdateTransform(true); + // Render(); } //------------------------------------------------------------------------------ @@ -332,20 +378,42 @@ void vvToolRigidReg::UpdateTransform_sb() ytrans_sb->value(), ztrans_sb->value(), xrot_sb->value(),yrot_sb->value(),zrot_sb->value(),false); + DD(xtrans_sb->value()); UpdateTransform(false); - Render(); + // Render(); } //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ void vvToolRigidReg::AutoRegister() -{ - GetArgsInfoFromGUI(); - //clitk::AffineRegistrationGenericFilter::Pointer filter = - // clitk::AffineRegistrationGenericFilter::New(); - //filter->SetArgsInfo(mArgsInfo); - // filter->Update(); - +{ + if (!mCurrentSlicerManager) close(); + QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); + + std::vector inputs; + // Input + inputs.push_back(mInput1->GetImage()); + inputs.push_back(mInput2->GetImage()); + // Check input type + // Main filter + clitk::AffineRegistrationGenericFilter::Pointer filter = + clitk::AffineRegistrationGenericFilter::New(); + filter->SetInputVVImages(inputs); + filter->SetArgsInfo(mArgsInfo); + DD("ArgsInfo given in"); + filter->EnableReadOnDisk(false); + filter->Update(); + DD("I am done...! Updated"); + vvImage::Pointer output = filter->GetOutputVVImage(); + DD("filter getoutput done..."); + std::ostringstream osstream; + //osstream << "Registered" << "_ " + // << mCurrentSlicerManager->GetSlicer(0)->GetFileName() << ".mhd"; + //AddImage(output,osstream.str()); + SetOverlay(output); + + QApplication::restoreOverrideCursor(); + // close(); } //------------------------------------------------------------------------------ @@ -463,9 +531,9 @@ void vvToolRigidReg::ReadFile() //In the Order or Y X Z // //now postmultiply for the rotations - SetTransform(0,0,0,0,0,-round(orientations[2]),false); - SetTransform(0,0,0,-round(orientations[0]),0,0,false); - SetTransform(0,0,0,0,-round(orientations[1]),0,false); + SetTransform(0,0,0,0,0,-rint(orientations[2]),false); + SetTransform(0,0,0,-rint(orientations[0]),0,0,false); + SetTransform(0,0,0,0,-rint(orientations[1]),0,false); transform->GetPosition(translations); transform->Identity(); @@ -504,7 +572,7 @@ void vvToolRigidReg::SetRotationCenter() QString xcord,ycord,zcord; std::vector imageorigin; imageorigin=mInput1->GetImage()->GetOrigin(); - + DD("before bug"); xcord=xcord.setNum(imageorigin[0]+mImageSize[0]*mInput1->GetImage()->GetSpacing()[0]/2, 'g', 3); ycord=ycord.setNum(imageorigin[1]+mImageSize[1]*mInput1->GetImage()->GetSpacing()[1]/2, 'g', 3); zcord=zcord.setNum(imageorigin[2]+mImageSize[2]*mInput1->GetImage()->GetSpacing()[2]/2, 'g', 3); @@ -535,7 +603,6 @@ void vvToolRigidReg::InitializeSliders(double xtrans,double ytrans, double ztran if(sliders){ xtrans_slider->blockSignals(true); - DD(xtrans_slider->value()); xtrans_slider->setValue(rint(xtrans)); xtrans_slider->blockSignals(false); ytrans_slider->blockSignals(true); @@ -546,7 +613,7 @@ void vvToolRigidReg::InitializeSliders(double xtrans,double ytrans, double ztran ztrans_slider->blockSignals(false); } xrot_sb->blockSignals(true); - xrot_sb->setValue(xrot); + xrot_sb->setValue(xrot); xrot_sb->blockSignals(false); yrot_sb->blockSignals(true); yrot_sb->setValue(yrot); @@ -608,7 +675,6 @@ void vvToolRigidReg::SetSliderRanges() zrot_slider->setRange(-360,360); zrot_slider->blockSignals(false); - xrot_sb->blockSignals(true); xrot_sb->setRange(-360,360); xrot_sb->blockSignals(false);