国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

ITK、VTK、Qt讀取與顯示DICOM文件------代碼部分

2019-11-06 06:08:00
字體:
供稿:網(wǎng)友
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "itkImage.h"
#include "itkImageFileReader.h"
#include "itkImageToVTKImageFilter.h"
#include <itkGDCMImageIO.h>    //此處使用尖括號更好
#include "itkMetaDataDictionary.h"
#include "itkMetaDataObject.h"
#include "vtkImageViewer2.h"
#include "vtkImageFlip.h"
#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
using namespace std;
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);    
}
MainWindow::~MainWindow()
{
    delete ui;
}
void MainWindow::on_OpenFile_triggered()
{
    typedef signed short InputPixelType;
    const unsigned int InputDimension=2;
    typedef itk::Image<InputPixelType,InputDimension> ImageType;
    typedef itk::ImageFileReader<ImageType> ReaderType;
    ReaderType::Pointer reader = ReaderType::New();
    reader->SetFileName("F://1-248.dcm");
    typedef itk::GDCMImageIO ImageIOType;
    ImageIOType::Pointer gdcmImageIO = ImageIOType::New();
    reader->SetImageIO(gdcmImageIO);
    reader->Update();
    std::cout<<"read dicom sucess"<<std::endl;
    //頭文件數(shù)據(jù)字典
    typedef itk::MetaDataDictionary DictionaryType;
    DictionaryType &dictionary= gdcmImageIO->GetMetaDataDictionary();
    typedef itk::MetaDataObject<std::string> MetaDataStringType;//管理字符串類型
    //從數(shù)據(jù)字典中可以獲得幾乎所有dicom標(biāo)簽對應(yīng)的數(shù)值
    DictionaryType::ConstIterator itr=dictionary.Begin();
    DictionaryType::ConstIterator end=dictionary.End();
    while(itr!=end)
    {
        itk::MetaDataObjectBase::Pointer entry=itr->second;
        MetaDataStringType::Pointer entryValue=dynamic_cast<MetaDataStringType *>(entry.GetPointer());
        //dynamic_cast將一個基類對象指針(或引用)cast到繼承類指針 MetaDataStringType::Pointer
        if(entryValue)
        {
            std::string tagKey=itr->first;
            std::string labelId;
            bool found=itk::GDCMImageIO::GetLabelFromTag(tagKey,labelId);
            std::string tagValue = entryValue->GetMetaDataObjectValue();
            if(found)
            {
                std::cout<<"("<<tagKey<<")"<<labelId;
                std::cout<<"="<<tagValue.c_str()<<std::endl;
            }
            else
            {
               std::cout<<"("<<tagKey<<")"<<"unknown";
               std::cout<<"="<<tagValue.c_str()<<std::endl;
            }
            ++itr;
        }
    }
    //獲取醫(yī)院的名稱并在qt上顯示。
     std::string tagKey="0008|103e";
     std::string value;
     gdcmImageIO->GetValueFromTag(tagKey,value);
     std::cout<<"value="<<value.c_str()<<std::endl;
     ui->hospital->setText(value.c_str());
    typedef itk::ImageToVTKImageFilter<ImageType> FilterType;
    FilterType::Pointer connector = FilterType::New();
    connector->SetInput(reader->GetOutput());
    connector->Update();        //vtk版本大于5必須加上這句話,否則顯示不出圖片
    vtkImageFlip *flip=vtkImageFlip::New();//由于vtk、itk顯示圖像時y軸相反,此處做一次翻轉(zhuǎn)
    flip->SetInputData(connector->GetOutput());
    flip->SetFilteredAxis(1);
    flip->Update();
    vtkImageViewer2  *viewer =  vtkImageViewer2::New();
   // vtkRenderWindowInteractor *interactor=vtkRenderWindowInteractor::New();
    viewer->SetInputData(flip->GetOutput());
    viewer->SetColorWindow(1224);
    viewer->SetColorLevel(587);
    viewer->SetRenderWindow(ui->qvtkwidget->GetRenderWindow());
    viewer->Render();
}

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 凌海市| 台前县| 临夏市| 桓台县| 藁城市| 德清县| 张家口市| 内黄县| 靖宇县| 准格尔旗| 贵溪市| 北安市| 凌海市| 海伦市| 达拉特旗| 瑞丽市| 信阳市| 霍林郭勒市| 灵寿县| 南京市| 五常市| 丘北县| 西乌珠穆沁旗| 阳原县| 钟山县| 连云港市| 比如县| 沙河市| 新化县| 廊坊市| 湄潭县| 辰溪县| 云龙县| 上饶市| 余干县| 自贡市| 江源县| 平凉市| 木兰县| 广昌县| 永丰县|