10typename itk::Image<pixel_t, 3>::Pointer
preprocessLabelMap(
typename itk::Image<pixel_t, 3>::Pointer originalLabelMap, pixel_t desiredLabel)
36 typedef itk::Image<pixel_t, 3> image_t;
38 typedef itk::ImageRegionIterator<image_t> imageRegionIterator_t;
41 imageRegionIterator_t iter(originalLabelMap, originalLabelMap->GetLargestPossibleRegion());
44 typename image_t::SizeType sz = originalLabelMap->GetLargestPossibleRegion().GetSize();
46 std::vector<pixel_t> uniqueLabels(sz[0] * sz[1] * sz[2]);
48 for (; !iter.IsAtEnd(); ++iter)
50 uniqueLabels[i++] = iter.Get();
53 std::sort(uniqueLabels.begin(), uniqueLabels.end());
54 typename std::vector<pixel_t>::iterator itl = std::unique(uniqueLabels.begin(), uniqueLabels.end());
55 uniqueLabels.resize(itl - uniqueLabels.begin());
57 if (uniqueLabels[0] != 0)
59 std::cerr <<
"Error: least label is not 0? no background?\n";
63 short numOfLabels = uniqueLabels.size() - 1;
68 return originalLabelMap;
72 if (!std::binary_search(uniqueLabels.begin(), uniqueLabels.end(), desiredLabel))
74 return originalLabelMap;
78 typename image_t::Pointer newLabelMap = image_t::New();
79 newLabelMap->CopyInformation(originalLabelMap);
80 newLabelMap->SetRegions(originalLabelMap->GetLargestPossibleRegion());
81 newLabelMap->Allocate();
82 newLabelMap->FillBuffer(0);
84 imageRegionIterator_t iterNew(newLabelMap, newLabelMap->GetLargestPossibleRegion());
87 for (; !iter.IsAtEnd(); ++iter, ++iterNew)
89 if (iter.Get() == desiredLabel)