2017-05-11 5 views
0
 MainWindow::MainWindow(QWidget *parent) : 
      QMainWindow(parent), 
      ui(new Ui::MainWindow) 
      { 
      ui->setupUi(this); 
      connect(ui->actionDICOM_Sequence, SIGNAL(triggered()), this, SLOT(DICOMseq())); 
      connect(ui->actionExit, SIGNAL(triggered()), this, SLOT(close())); 
      connect(ui->actionCanny_2, SIGNAL(triggered()), this, SLOT(canny())); 
      connect(ui->actionScript_window, SIGNAL(triggered()), this, SLOT(script())); 
      } 
     MainWindow::~MainWindow() 
     { 
      delete ui; 
     } 

     int MainWindow::DICOMseq() 
     { 


      typedef double InputPixelType; 

//ピクセルタイプqtのitkフィルターqactionボタンへの入力としてDICOM ITKリーダー出力を与える方法?

const unsigned int InputDimension = 3; 

//画像

typedef itk::Image< InputPixelType, 3 > InputImageType; 

//イメージタイプ

typedef itk::ImageSeriesReader<InputImageType> ReaderType; 

//イメージタイプ

ReaderType::Pointer reader = ReaderType::New(); 
0123のリーダーの寸法

VTKの画像データにITK画像データを変換するためITK

QDir dir("Dir"); 
         dir = QFileDialog::getExistingDirectory(0, " "); 
         QFileInfoList list = dir.entryInfoList(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot); 

         std::vector<std::string> names; 
         foreach(QFileInfo finfo, list) 
         { 
          std::string str = dir.path().toStdString().c_str(); 
          str = str + "/"; 
          names.push_back(str + finfo.fileName().toStdString().c_str()); 
         } 

         reader->SetFileNames(names); 

//例外処理

try 
         { 
          reader->Update(); 
         } 
         catch (itk::ExceptionObject & e) 
         { 
          std::cerr << "exception in file reader " << std::endl; 
          std::cerr << e << std::endl; 
          return EXIT_FAILURE; 
         } 

//コネクタの名前ジェネレータの//交換

typedef itk::ImageToVTKImageFilter<InputImageType > ConnectorType; 
         ConnectorType::Pointer connector = ConnectorType::New(); 


connector->SetInput(reader->GetOutput()); 

       try 
       { 
        connector->Update(); 
       } 
       catch (itk::ExceptionObject & e) 
       { 
        std::cerr << "exception in file reader " << std::endl; 
        std::cerr << e << std::endl; 
        return EXIT_FAILURE; 
       } 

     vtkImageData * image = vtkImageData::New(); 
      image->DeepCopy(connector->GetOutput()); 

     vtkInteractorStyleImage *style = vtkInteractorStyleImage::New(); 
      renderWindowInteractor1->SetInteractorStyle(style); 
      viewer1->SetupInteractor(renderWindowInteractor1); 
      viewer1->SetInputData(image); 
      viewer1->SetSliceOrientationToXY(); 
      viewer1->GetRenderer()->ResetCamera(); 
      ui->qvtkWidget->SetRenderWindow(viewer1->GetRenderWindow()); 
      ui->qvtkWidget->GetRenderWindow()->Render(); 
     return EXIT_SUCCESS; 
     } 

void MainWindow::canny() 
{ 

//私はここで最初にDICOMseq()から画像出力を得るためにコードを書く必要があります。そして、canny検出のitkコード//を適用します。}

答えて

0

reader->Update();が実際の読み上げを引き起こすはずです。そうでない場合は、まず、thisのような実例に従ってDICOMの読みを再作成してください。あなたはITKのキャニーアルゴリズムを実行したい場合は

、あなたはconnector->SetInput(reader->GetOutput());をスキップし、代わりにそこに持っている必要があります。

typedef itk::CannyEdgeDetectionImageFilter< InputImageType, InputImageType > 
    FilterType; 
    FilterType::Pointer filter = FilterType::New(); 
    filter->SetInput(reader->GetOutput()); 
    filter->SetVariance(variance); 
    filter->SetLowerThreshold(lowerThreshold); 
    filter->SetUpperThreshold(upperThreshold); 

    typedef itk::RescaleIntensityImageFilter< InputImageType, OutputImageType > RescaleType; 
    RescaleType::Pointer rescaler = RescaleType::New(); 
    rescaler->SetInput(filter->GetOutput()); 
    rescaler->SetOutputMinimum(0); 
    rescaler->SetOutputMaximum(255); 
    connector->SetInput(rescaler->GetOutput()); 

このコードはthis exampleからです。

cannyを別個に呼び出させたい場合は、読者から出された画像をInputImageType::Pointerの変数に保存し、その変数を読み書きして、その変更のたびにコネクタを更新する必要があります。

関連する問題