1 #include "itkGeodesicActiveContourLevelSetImageFilter.h"
2
3 #include "itkCurvatureAnisotropicDiffusionImageFilter.h"
4 #include "itkGradientMagnitudeRecursiveGaussianImageFilter.h"
5 #include "itkSigmoidImageFilter.h"
6 #include "itkFastMarchingImageFilter.h"
7 #include "itkRescaleIntensityImageFilter.h"
8 #include "itkBinaryThresholdImageFilter.h"
9 #include "itkImageFileReader.h"
10 #include "itkImageFileWriter.h"
11 //程序第一阶段是使用 itk::CurvatureAnisotropicDiffusionImageFilter 来进行平
12 //滑。将平滑后的图像作为输入传递给 itk::GradientMagnitudeRecursiveGaussianImageFilter ,并
13 //且再传递给 itk::SigmoidImageFilter 以便产生潜在图像的边缘。一系列用户提供的种子传递给
14 //FastMarchingImageFilter 以便计算距离映射。从这个映射中减去一个常数以便得到一个水平
15 //集,其中零水平集表示最初的轮廓。这个水平集作为输入传递给 GeodesicActiveContourLevel
16 //SetImageFilter 。
17 //最后,将 GeodesicActiveContourLevelSetImageFilter 产生的水平集传递给一个 Binary
18 //ThresholdImageFilter 以便创建一个二值模板来表达分割对象。
19
20 int main( int argc, char *argv[] )
21
211 catch( itk::ExceptionObject & excep )
212
217
218 std::cout << std::endl;
219 std::cout << "Max. no. iterations: " << geodesicActiveContour>GetNumberOfIterations() << std::endl;
220 std::cout << "Max. RMS error: " << geodesicActiveContour>GetMaximumRMSError() << std::endl;
221 std::cout << std::endl;
222 std::cout << "No. elpased iterations: " << geodesicActiveContour>GetElapsedIterations() << std::endl;
223 std::cout << "RMS change: " << geodesicActiveContour>GetRMSChange() << std::endl;
224
225 writer4>Update();
226
227
228 typedef itk::ImageFileWriter< InternalImageType > InternalWriterType;
229
230 InternalWriterType::Pointer mapWriter = InternalWriterType::New();
231 mapWriter>SetInput( fastMarching>GetOutput() );
232 mapWriter>SetFileName("GeodesicActiveContourImageFilterOutput4.mha");
233 mapWriter>Update();
234
235 InternalWriterType::Pointer speedWriter = InternalWriterType::New();
236 speedWriter>SetInput( sigmoid>GetOutput() );
237 speedWriter>SetFileName("GeodesicActiveContourImageFilterOutput3.mha");
238 speedWriter>Update();
239
240 InternalWriterType::Pointer gradientWriter = InternalWriterType::New();
241 gradientWriter>SetInput( gradientMagnitude>GetOutput() );
242 gradientWriter>SetFileName("GeodesicActiveContourImageFilterOutput2.mha");
243 gradientWriter>Update();
244
245 return EXIT_SUCCESS;
246 }
左脑室、右脑室、白质和灰质分别得到的输出窗口:
注意:分割白质部分需要一个相关的更大的传播缩放比例。有两个原因:白质边界的低对比和组织结构的复杂形状。不幸的是这些缩放比例参数的最优值仅仅通过实验来得到。在一个真实的应用中,我们可以可以想象一个通过用户管理轮廓运动的交互式机制从而调节这些参数。
上一篇:OpenCV3.2图像分割 实例7:基于分水岭图像分割下一篇:ITK 实例7 置信连接算法对脑部MHA文件进行三维分割
ITK