void Mask::ApplyToRGBImage(TImage* const image, const TColor& color) const { // Using generics, we allow any Color class that has .red(), .green(), and .blue() member functions // to be used to specify the color. if(image->GetLargestPossibleRegion() != this->GetLargestPossibleRegion()) { std::cerr << "Image and mask must be the same size!" << std::endl << "Image region: " << image->GetLargestPossibleRegion() << std::endl << "Mask region: " << this->GetLargestPossibleRegion() << std::endl; return; } // Color the hole pixels in the image. typename TImage::PixelType holeValue; holeValue.SetSize(image->GetNumberOfComponentsPerPixel()); holeValue.Fill(0); if(image->GetNumberOfComponentsPerPixel() >= 3) { holeValue[0] = color.red(); holeValue[1] = color.green(); holeValue[2] = color.blue(); } itk::ImageRegionConstIterator<Mask> maskIterator(this, this->GetLargestPossibleRegion()); while(!maskIterator.IsAtEnd()) { if(this->IsHole(maskIterator.GetIndex())) { image->SetPixel(maskIterator.GetIndex(), holeValue); } ++maskIterator; } }
void FinishVertex(VertexDescriptorType target, VertexDescriptorType sourceNode) { //OutputHelpers::WriteImage(MaskImage, Helpers::GetSequentialFileName("mask", this->NumberOfFinishedVertices, "png")); ITKHelpers::WriteImage(MaskImage, Helpers::GetSequentialFileName("mask", this->NumberOfFinishedVertices, "mha")); //OutputHelpers::WriteVectorImageAsRGB(Image, Helpers::GetSequentialFileName("output", this->NumberOfFinishedVertices, "png")); ITKHelpers::WriteImage(Image, Helpers::GetSequentialFileName("output", this->NumberOfFinishedVertices, "mha")); ITKHelpers::WriteRGBImage(Image, Helpers::GetSequentialFileName("output", this->NumberOfFinishedVertices, "png")); typename TImage::PixelType holeColor; holeColor.SetSize(Image->GetNumberOfComponentsPerPixel()); holeColor[0] = 255; holeColor[1] = 0; holeColor[2] = 0; MaskOperations::WriteMaskedRegionPNG(Image, MaskImage, Image->GetLargestPossibleRegion(), Helpers::GetSequentialFileName("maskedOutput", this->NumberOfFinishedVertices, "png"), holeColor); typedef itk::Image<unsigned char, 2> IndicatorImageType; IndicatorImageType::Pointer boundaryStatusMapImage = IndicatorImageType::New(); boundaryStatusMapImage->SetRegions(Image->GetLargestPossibleRegion()); boundaryStatusMapImage->Allocate(); // BoostHelpers::WritePropertyMapAsImage(BoundaryStatusMap, boundaryStatusMapImage.GetPointer(), // Helpers::GetSequentialFileName("boundaryStatusMap", // this->NumberOfFinishedVertices, "png")); IndicatorImageType::Pointer validBoundaryNodeImage = IndicatorImageType::New(); validBoundaryNodeImage->SetRegions(Image->GetLargestPossibleRegion()); validBoundaryNodeImage->Allocate(); // BoostHelpers::WriteValidQueueNodesAsImage(BoundaryNodeQueue, BoundaryStatusMap, // validBoundaryNodeImage.GetPointer(), // Helpers::GetSequentialFileName("boundaryQueueValidNodes", // this->NumberOfFinishedVertices, "png")); IndicatorImageType::Pointer allBoundaryNodeImage = IndicatorImageType::New(); allBoundaryNodeImage->SetRegions(Image->GetLargestPossibleRegion()); allBoundaryNodeImage->Allocate(); // BoostHelpers::WriteAllQueueNodesAsImage(BoundaryNodeQueue, allBoundaryNodeImage.GetPointer(), // Helpers::GetSequentialFileName("boundaryQueueAllNodes", // this->NumberOfFinishedVertices, "png")); this->NumberOfFinishedVertices++; // std::cout << "Finished node " << this->NumberOfFinishedVertices << std::endl; }
void PotentialMatchMade(VertexDescriptorType targetNode, VertexDescriptorType sourceNode) { std::cout << "Match made: target: " << targetNode[0] << " " << targetNode[1] << " with source: " << sourceNode[0] << " " << sourceNode[1] << std::endl; std::cout << "Writing pair " << NumberOfFinishedVertices << std::endl; { itk::Index<2> sourceIndex = ITKHelpers::CreateIndex(sourceNode); itk::ImageRegion<2> sourceRegion = ITKHelpers::GetRegionInRadiusAroundPixel(sourceIndex, this->HalfWidth); ITKHelpers::WriteVectorImageRegionAsRGB(Image, sourceRegion, Helpers::GetSequentialFileName("sourcePatch", this->NumberOfFinishedVertices, "png")); } { // Construct the region around the vertex itk::Index<2> indexToFinish = ITKHelpers::CreateIndex(targetNode); itk::ImageRegion<2> region = ITKHelpers::GetRegionInRadiusAroundPixel(indexToFinish, this->HalfWidth); ITKHelpers::WriteVectorImageRegionAsRGB(Image, region, Helpers::GetSequentialFileName("targetPatch", this->NumberOfFinishedVertices, "png")); ITKHelpers::WriteRegionAsRGBImage(this->MaskImage, region, Helpers::GetSequentialFileName("maskPatch", this->NumberOfFinishedVertices, "png")); typename TImage::PixelType holeColor; holeColor.SetSize(Image->GetNumberOfComponentsPerPixel()); holeColor[0] = 255; holeColor[1] = 0; holeColor[2] = 0; MaskOperations::WriteMaskedRegionPNG(this->Image, this->MaskImage, region, Helpers::GetSequentialFileName("maskedTargetPatch", this->NumberOfFinishedVertices, "png"), holeColor); } }