MITK Tutorial (三)

本文介绍如何在MITK框架下利用ITK库进行图像处理。具体步骤包括将MITK图像转换为ITK图像,使用ITK的MeanImageFilter进行滤波处理,并将处理后的图像再转换回MITK图像格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Step 2: Use the template with the plugins to read a image

在exampleplugin插件中QmitkAwesomeView.cpp中添加头文件

//Mitk

#include "mitkImageCast.h"

//Itk

#include "itkImage.h"

#include "itkImageFileReader.h"

#include "itkImageFileWriter.h"

#include "itkMeanImageFilter.h"

在DoImageProcessing函数中 修改如下:用ITK::image 从文件中读图 经过中值滤波器处理并转成mitk::image加到DATA note 中

void QmitkAwesomeView::DoImageProcessing()
										

{
					

    const unsigned int Dimension 3;
																	

    typedef unsigned char                           InputPixelType;
													

    typedef unsigned char                            OutputPixelType;
													

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

    typedef itk::Image< OutputPixelType, Dimension >   OutputImageType;
																					

  QList<mitk::DataNode::Pointer> nodes this->GetDataManagerSelection();
																						

  if (nodes.empty()) return;
															

 

  mitk::DataNode::Pointer node = nodes.front();
																			

 

  if (!node)
										

  {
						

    // Nothing selected. Inform the user and return
						

    QMessageBox::informationNULL"Template""Please load and select an image before starting image processing.");
																		

    return;
							

  }
						

 

  // here we have a valid mitk::DataNode
						

 

  // a node itself is not very useful, we need its data item (the image)
						

  mitk::BaseData* data = node->GetData();
																		

  if (data)
										

  {
						

    // test if this data item is an image or not (could also be a surface or something totally different)
						

    mitk::Image* image dynamic_cast<mitk::Image*>( data );
																								

    if (image)
										

    {
						

      std::stringstream message;
											

      std::string name;
											

      message << "Performing image processing for image ";
											

      if (node->GetName(name))
														

      {
						

        // a property called "name" was found for this DataNode
						

        message << "'" << name << "'";
																			

      }
						

      message << ".";
											

      MITK_INFO << message.str();
													

 

      // actually do something here...
						

      InputImageType::Pointer inputItkImage = InputImageType::New();
																	

 

      if(image)
									

      {
						

          CastToItkImage( image, inputItkImage );//OK, now you can use inputItkImage whereever you want 
															

          cout<<"this is normal itk image!"<<endl;
											

      }
						

 

      typedef itk::MeanImageFilter<
											

          InputImageType, OutputImageType >  FilterType;
														

      FilterType::Pointer filter = FilterType::New();
																	

 

      InputImageType::SizeType indexRadius;
											

      indexRadius[01// radius along x
																

      indexRadius[11// radius along y
																

      indexRadius[21;//  radius along z
															

      filter->SetRadius( indexRadius );
													

      filter->SetInput( inputItkImage);
												

      filter->Update();
									

      // use the AwesomeImageFilter class from the MyAwesomeLib module
						

      /*AwesomeImageFilter::Pointer awesomeFilter = AwesomeImageFilter::New();
						

      awesomeFilter->SetInput(image);
					

      awesomeFilter->SetOffset(m_Controls.spinboxOffset->value());
					

      awesomeFilter->Update();
					

 

      std::stringstream outputNodeName;
					

      outputNodeName << node->GetName() << " offset by " << m_Controls.spinboxOffset->value();*/
					

      mitk::Image::Pointer outputImage = mitk::Image::New();
																					

      mitk::CastToMitkImage(filter->GetOutput(), outputImage);
																

 

      mitk::DataNode::Pointer outputNode = mitk::DataNode::New();
																					

      outputNode->SetData(outputImage);
											

      outputNode->SetName("1");
											

 

      this->GetDataStorage()->Add(outputNode);
													

    }
						

  }
						

 

 

转载于:https://www.cnblogs.com/taopanpan/p/3672428.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值