ITK 实例15 测量主动轮廓算法对脑部PNG图像进行二维分割


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 实例6 置信连接算法对脑部PNG图像进行二维分割


ITK
Copyright © 2002-2019 k262电脑网 www.k262.cn 皖ICP备2020016292号
温馨提示:部分文章图片数据来源与网络,仅供参考!版权归原作者所有,如有侵权请联系删除!QQ:251442993 热门搜索 网站地图