//generate binary segment at actual CT image BinaryImageTreeItem *CTImageTreeItem::generateSegment(void) { typedef itk::CastImageFilter< CTImageType, BinaryImageType> CastFilterType; bool ok; //show dialog for segment name QString segName = QInputDialog::getText(NULL, QObject::tr("Segment Name"), QObject::tr("Name:"), QLineEdit::Normal, QObject::tr("Unnamed Segment"), &ok); BinaryImageTreeItem::ImageType::Pointer seg; //if name is valid and dialog was closed with OK if (ok && !segName.isEmpty()) { //create caster, that transforme the CT image to a binary image CastFilterType::Pointer caster = CastFilterType::New(); caster->SetInput( getITKImage() ); caster->Update(); seg = caster->GetOutput(); //fills the segment with zeros seg->FillBuffer(BinaryPixelOff); //create a binary tree item as child of this CT image BinaryImageTreeItem *result = new BinaryImageTreeItem(this, seg, segName); //insert child into the hierarchy insertChild(result); return result; } return NULL; }
int main (int argc, char *argv[]) { // Verify arguments if(argc != 3) { std::cerr << "Required arguments: InputFileName OutputFileName" << std::endl; return EXIT_FAILURE; } // Parse arguments std::string inputFileName = argv[1]; std::string outputFileName = argv[2]; // Output arguments std::cout << "Input image: " << inputFileName << std::endl; std::cout << "Output image: " << outputFileName << std::endl; //typedef itk::Image<unsigned char, 2> ImageType; typedef itk::RGBPixel<float> RGBFloatPixelType; // We must use float pixels so that the averaging operation does not overflow typedef itk::Image<RGBFloatPixelType> RGBFloatImageType; typedef itk::ImageFileReader<RGBFloatImageType> ReaderType; ReaderType::Pointer reader = ReaderType::New(); reader->SetFileName(inputFileName); reader->Update(); SmallHoleFiller<RGBFloatImageType> smallHoleFiller; smallHoleFiller.SetImage(reader->GetOutput()); RGBFloatImageType::PixelType green; green.SetRed(0); green.SetGreen(255); green.SetBlue(0); smallHoleFiller.SetHolePixel(green); smallHoleFiller.GenerateMaskFromImage(); smallHoleFiller.Fill(); typedef itk::RGBPixel<unsigned char> RGBUCharPixelType; typedef itk::Image<RGBUCharPixelType> RGBUCharImageType; typedef itk::CastImageFilter<RGBFloatImageType, RGBUCharImageType> CastFilterType; CastFilterType::Pointer castFilter = CastFilterType::New(); castFilter->SetInput(smallHoleFiller.GetOutput()); castFilter->Update(); typedef itk::ImageFileWriter< RGBUCharImageType > WriterType; WriterType::Pointer writer = WriterType::New(); writer->SetFileName(outputFileName); writer->SetInput(castFilter->GetOutput()); writer->Update(); return EXIT_SUCCESS; }
ImageType::Pointer SBFilterUtils::GaussianSmoothImage(ImageType::Pointer image, float variance) { GaussianFilterType::Pointer gaussianFilter = GaussianFilterType::New(); gaussianFilter->SetInput(image); gaussianFilter->SetVariance(variance); gaussianFilter->Update(); CastFilterType::Pointer castFilter = CastFilterType::New(); castFilter->SetInput(gaussianFilter->GetOutput()); castFilter->Update(); return castFilter->GetOutput(); }
//generate binary segment at actual CT image BinaryImageTreeItem *CTImageTreeItem::generateSegment(QString name) { typedef itk::CastImageFilter< CTImageType, BinaryImageType> CastFilterType; BinaryImageTreeItem::ImageType::Pointer seg; //if name is valid and dialog was closed with OK if (!name.isEmpty()) { //create caster, that transforme the CT image to a binary image CastFilterType::Pointer caster = CastFilterType::New(); caster->SetInput( getITKImage() ); caster->Update(); seg = caster->GetOutput(); //fills the segment with zeros seg->FillBuffer(BinaryPixelOff); //create a binary tree item as child of this CT image BinaryImageTreeItem *result = new BinaryImageTreeItem(this, seg, name); //insert child into the hierarchy insertChild(result); return result; } return NULL; }