# 医学图像处理案例（十三）——快速行进算法分割医学图像

1、FastMarching简介

2、使用SimpleITK函数来实现FastMarching分割算法

C++代码：

```*=========================================================================
// This example is based on ITK's FastMarchingImageFilter.cxx example
#include <SimpleITK.h>
#include <iostream>
#include <string>
#include <cstdlib>

namespace sitk = itk::simple;
int main(int argc, char *argv[])
{
if ( argc < 10 )
{
std::cerr << "Missing Parameters " << std::endl;
std::cerr << "Usage: " << argv[0];
std::cerr << " inputImage  outputImage seedX seedY";
std::cerr << " Sigma SigmoidAlpha SigmoidBeta TimeThreshold StoppingTime" << std::endl;
return EXIT_FAILURE;
}

const std::string inputFilename(argv[1]);
const std::string outputFilename(argv[2]);

unsigned int seedPosition[2];
seedPosition[0] = atoi( argv[3] );
seedPosition[1] = atoi( argv[4] );

const double sigma = atof( argv[5] );
const double alpha =  atof( argv[6] );
const double beta  =  atof( argv[7] );
const double timeThreshold = atof( argv[8] );
const double stoppingTime = atof( argv[9] );

sitk::Image inputImage = sitk::ReadImage( inputFilename, sitk::sitkFloat32 );

sitk::CurvatureAnisotropicDiffusionImageFilter smoothing;
smoothing.SetTimeStep( 0.125 );
smoothing.SetNumberOfIterations(  5 );
smoothing.SetConductanceParameter( 9.0 );
sitk::Image smoothingOutput = smoothing.Execute( inputImage );

sitk::SigmoidImageFilter sigmoid;
sigmoid.SetOutputMinimum(  0.0  );
sigmoid.SetOutputMaximum(  1.0  );
sigmoid.SetAlpha( alpha );
sigmoid.SetBeta(  beta  );
sitk::Image sigmoidOutput = sigmoid.Execute( gradientMagnitudeOutput );

sitk::FastMarchingImageFilter fastMarching;

std::vector< unsigned int > trialPoint(3);

trialPoint[0] = seedPosition[0];
trialPoint[1] = seedPosition[1];

trialPoint[2] = 0u; // Seed Value

fastMarching.SetStoppingValue(stoppingTime);

sitk::Image fastmarchingOutput = fastMarching.Execute( sigmoidOutput );

sitk::BinaryThresholdImageFilter thresholder;
thresholder.SetLowerThreshold(           0.0  );
thresholder.SetUpperThreshold( timeThreshold  );
thresholder.SetOutsideValue(  0  );
thresholder.SetInsideValue(  255 );

sitk::Image result = thresholder.Execute(fastmarchingOutput);

sitk::WriteImage(result, outputFilename);

return 0;
}```

Python代码：

```#!/usr/bin/env python

from __future__ import print_function

import SimpleITK as sitk
import sys
import os

if len(sys.argv) < 10:
print("Usage: {0} <inputImage> <outputImage> <seedX> <seedY> <Sigma> <SigmoidAlpha> <SigmoidBeta> <TimeThreshold>".format(sys.argv[0]))
sys.exit(1)

inputFilename = sys.argv[1]
outputFilename = sys.argv[2]

seedPosition = (int(sys.argv[3]), int(sys.argv[4]))

sigma = float(sys.argv[5])
alpha = float(sys.argv[6])
beta = float(sys.argv[7])
timeThreshold = float(sys.argv[8])
stoppingTime = float(sys.argv[9])

print(inputImage)

smoothing = sitk.CurvatureAnisotropicDiffusionImageFilter()
smoothing.SetTimeStep(0.125)
smoothing.SetNumberOfIterations(5)
smoothing.SetConductanceParameter(9.0)
smoothingOutput = smoothing.Execute(inputImage)

sigmoid = sitk.SigmoidImageFilter()
sigmoid.SetOutputMinimum(0.0)
sigmoid.SetOutputMaximum(1.0)
sigmoid.SetAlpha(alpha)
sigmoid.SetBeta(beta)
sigmoid.DebugOn()

fastMarching = sitk.FastMarchingImageFilter()

seedValue = 0
trialPoint = (seedPosition[0], seedPosition[1], seedValue)

fastMarching.SetStoppingValue(stoppingTime)

fastMarchingOutput = fastMarching.Execute(sigmoidOutput)

thresholder = sitk.BinaryThresholdImageFilter()
thresholder.SetLowerThreshold(0.0)
thresholder.SetUpperThreshold(timeThreshold)
thresholder.SetOutsideValue(0)
thresholder.SetInsideValue(255)

result = thresholder.Execute(fastMarchingOutput)

sitk.WriteImage(result, outputFilename)```

3、FastMarching分割效果

0 条评论

• ### 医学图像处理案例（二十）——医学图像处理案例代码详解

在前面分享的医学图像处理案例中，给出了很多具体案例，但有些读者还是渴望可以深入分享案例代码详解。那么今天我将从骨骼分割，气管分割，肺组织分割，血管分割这四个具体...

• ### 医学图像处理教程（四）——医学图像去噪算法

均值滤波是典型的线性滤波算法，它是指在图像上对目标像素给一个模板，该模板包括了其周围的临近像素（以目标像素为中心的周围8个像素，构成一个滤波模板，即去掉目标像素...

• ### BraTS18——多模态MR图像脑肿瘤分割挑战赛续4

今天将继续分享从网络结构上进行改进提出SEVNet模型来分割脑肿瘤。为了方便大家学习理解整个分割流程，我将整个流程步骤进行了整理，并给出每个步骤的结果，希望对大...

• ### 论文阅读——利用Binary Hash Codes的深度图像检索

这篇文章是阅读《Deep Learning of Binary Hash Codes for Fast Image Retrieval》后的总结，该文章提出了...

• ### 腾讯出品！这个免费网盘小程序，让你快速「找私货」| 亲儿子 #17

在 2017 年 1 月 16 日前，腾讯微云为每个帐号分配了非常大的网盘容量，很多人都用它来当照片、文件等的「仓库」。

• ### 当年的Windows 手机系统，为何不如安卓系统受欢迎？

微软作为PC端的绝对霸主一直想在移动端开辟属于自己的战场，中间做了很多次的尝试都以失败而告终，最后孤注一掷拿下诺基亚结果windows手机还是处于不温不火的状态...

• ### 03 Jme3和Nifty1.4.2中文显示

用JMonkey最大的问题就是中文问题，IDE不是中文没关系，反正可以迁移到Idea里，但是打包发布的项目以及Nifty做的GUI里没有中文就心塞塞了。好在找到...

• ### Shell常见命令实践

版权声明：本文为博主原创文章，未经博主允许不得转载。 https://blog.csdn.net/sinat_35512245/articl...