头文件声明
void segmentByRegionGrow(
const ImageStyle3D& ct_image,
const std::vector<std::vector<int>> seeds,
const int lower_thresh,
const int upper_thresh,
ImageStyle3D& segment_result
);
实现
void Segmentation::segmentByRegionGrow(
const ImageStyle3D& ct_image,
const std::vector<std::vector<int>> seeds,
const int lower_thresh, const int upper_thresh,
ImageStyle3D& segment_result)
{
using ConnectedFilterType =
itk::ConnectedThresholdImageFilter<ImageType3D, ImageType3D>;
ConnectedFilterType::Pointer connectedThreshold = ConnectedFilterType::New();
connectedThreshold->SetLower(lower_thresh);
connectedThreshold->SetUpper(upper_thresh);
connectedThreshold->SetReplaceValue(1);
for (auto item : seeds) {
ImageType3D::IndexType index;
index[0] = item[0];
index[1] = item[1];
index[2] = item[2];
connectedThreshold->AddSeed(index);
}
connectedThreshold->SetInput(ct_image);
try {
connectedThreshold->Update();
}
catch (const itk::ExceptionObject& ex) {
std::cout << ex.what() << std::endl;
std::cout << "Segmentation::segmentByRegionGrow(),区域增长分割时发生异常!" << std::endl;
throw "异常: 区域增长分割时发生异常!";
}
segment_result = connectedThreshold->GetOutput();
}
用法
vector<vector<int>> guSeedList{ {398,253,221} };
int guLower = 82, guUpper = 94;
ImageStyle3D segmentBone;
seger.segmentByRegionGrow(
ctImageNii, guSeedList, guLower, guUpper, segmentBone);
comm_func.saveNiftiImage(segmentBone, "./segResult.nii.gz");