TEST(binary, Shanbhag){ const string img{"./fixtures/M1045_11_20.tiff"}; auto denoise = make_shared<Denoise>() ; auto r = denoise->Read(img); auto b = denoise->BinaryShanbhag(r); QuickView viewer; viewer.AddImage(r.GetPointer(), 1, img); viewer.AddImage(b->GetOutput(), 1, "BinaryShanbhag"); if (VFLAG) viewer.Visualize(); }
int main(int argc, char* argv[]) { ImageType::Pointer image = ImageType::New(); GenerateImage(image); QuickView viewer; viewer.AddImage(image.GetPointer()); viewer.Visualize(); return EXIT_SUCCESS; }
TEST(fileIO, write){ const string img{"./fixtures/M1045_11_20.tiff"}; auto denoise = make_shared<Denoise>() ; auto r = denoise->Read(img); auto d1 = denoise->AnisotropicFilterCurvature(r, 10, 0.044, 2); string outFile = "./testResults/M1045_11_20_denoised.tiff"; denoise->Write(d1->GetOutput(), outFile); QuickView viewer; viewer.AddImage(r.GetPointer(), 1, img); viewer.AddImage(d1->GetOutput(), 1, "Denoised"); if (VFLAG) viewer.Visualize(); }
TEST(binary, threshold){ const string img{"./fixtures/M1045_11_20.tiff"}; auto denoise = make_shared<Denoise>() ; auto r = denoise->Read(img); unsigned int threshold = 90; auto b = denoise->BinaryThreshold(r, threshold); QuickView viewer; viewer.AddImage(r.GetPointer(), 1, img); viewer.AddImage(b->GetOutput(), 1, "BinaryThreshold"); if (VFLAG) viewer.Visualize(); string outFile = "./testResults/pectin_threshold.tiff"; denoise->Write(b->GetOutput(), outFile); }
TEST(regionGrowth, connectedThreshold){ const string img{"./fixtures/M1045_11_20.tiff"}; auto denoise = make_shared<Denoise>() ; auto r = denoise->Read(img); auto d1 = denoise->AnisotropicFilterCurvature(r, 5, 0.044, 5); auto rg = denoise->RegionGrowth(d1->GetOutput(), 0, 100); itk::Index<2> s1 = {{309,185}}; rg->SetSeed(s1); rg->Update(); auto rgo = rg->GetOutput(); // Visualize QuickView viewer; viewer.AddImage(r.GetPointer(), 1, img); viewer.AddImage(d1->GetOutput(), 1, "Denoised"); viewer.AddImage(rgo, 1, "Rgrowth"); if (VFLAG) viewer.Visualize(); }
TEST(holeFilling, binary){ const string img{"./testResults/pectin_threshold.tiff"}; auto denoise = make_shared<Denoise>() ; auto r = denoise->Read(img); using HoleFilter = itk::BinaryFillholeImageFilter<Denoise::InputImageType>; auto fillFilter = HoleFilter::New(); fillFilter->SetInput(r.GetPointer()); fillFilter->SetForegroundValue( itk::NumericTraits< Denoise::InputPixelType>::min()); fillFilter->Update(); QuickView viewer; viewer.AddImage(r.GetPointer(), 1, img); viewer.AddImage(fillFilter->GetOutput(), 1, "BinaryThreshold"); if (VFLAG) viewer.Visualize(); string outFile = "./testResults/pectin_threshold_hole_filled.tiff"; denoise->Write(fillFilter->GetOutput(), outFile); }
TEST(morphological, opening){ const string img{"./fixtures/M1045_11_20.tiff"}; auto denoise = make_shared<Denoise>() ; auto r = denoise->Read(img); auto mo10 = denoise->MorphologicalOpening(r, 10); auto mo5 = denoise->MorphologicalOpening(r, 5); auto mo20 = denoise->MorphologicalOpening(r, 20); auto mo3 = denoise->MorphologicalOpening(r, 3); QuickView viewer; viewer.AddImage(r.GetPointer(), 1, img); viewer.AddImage(mo10->GetOutput(), 1, "Morphological Opening, r=10"); viewer.AddImage(mo5->GetOutput(), 1, "Morphological Opening, r=5"); viewer.AddImage(mo20->GetOutput(), 1, "Morphological Opening, r=20"); viewer.AddImage(mo3->GetOutput(), 1, "Morphological Opening, r=3"); auto d1 = denoise->AnisotropicFilterCurvature(mo3->GetOutput(), 5, 0.044, 5); if (VFLAG) viewer.Visualize(); }
TEST(anisotropic, InPectinSubSet){ const string img{"./fixtures/M1045_11_20.tiff"}; auto denoise = make_shared<Denoise>() ; auto r = denoise->Read(img); auto outSmart = denoise->AnisotropicFilterCurvature(r, 5, 0.044, 2); // // Visualize QuickView viewer; viewer.AddImage(r.GetPointer(), 1, img); viewer.AddImage( outSmart->GetOutput(), 1 , "Anisotropic Filter"); auto outSmart2 = denoise->AnisotropicFilterCurvature(outSmart->GetOutput(), 5, 0.044, 5); viewer.AddImage( outSmart2->GetOutput(), 1 , "Anisotropic Filterx2"); auto outSmart3 = denoise->AnisotropicFilterCurvature(outSmart2->GetOutput(), 10, 0.044, 2); viewer.AddImage( outSmart3->GetOutput(), 1 , "Anisotropic Filterx3"); if (VFLAG) viewer.Visualize(); }
int main(int, char **) { char inputFile[] = "C:/Users/bmi/Documents/GitHub/Lab3/HR_081507_L_1003.tif"; unsigned int maximum = 65535; typedef itk::Image<unsigned int, 2> ImageType; typedef itk::ImageFileReader<ImageType> ReaderType; // register TIFF itk::TIFFImageIOFactory::RegisterOneFactory(); ReaderType::Pointer reader = ReaderType::New(); //read file reader->SetFileName(inputFile); reader->Update(); ///////////////////////////////////////// /// binary threshold filter ///////////////////////////////////////// /* typedef itk::BinaryThresholdImageFilter <ImageType, ImageType> BinaryThresholdImageFilterType; BinaryThresholdImageFilterType::Pointer thresholdFilter = BinaryThresholdImageFilterType::New(); unsigned int lowerBinaryThreshold = 42000; unsigned int upperBinaryThreshold = maximum; thresholdFilter->SetInput(reader->GetOutput()); thresholdFilter->SetLowerThreshold(lowerBinaryThreshold); thresholdFilter->SetUpperThreshold(upperBinaryThreshold); thresholdFilter->SetInsideValue(maximum); thresholdFilter->SetOutsideValue(0); // view the images QuickView viewer; viewer.AddImage(reader->GetOutput(), true, "Original Image"); viewer.AddImage(thresholdFilter->GetOutput(), true, "Binary Threshold Filter"); viewer.Visualize(); */ ///////////////////////////////////////// /// Threshold Filter ///////////////////////////////////////// /* typedef itk::ThresholdImageFilter <ImageType> ThresholdImageFilterType; ThresholdImageFilterType::Pointer thresholdFilter = ThresholdImageFilterType::New(); unsigned int lowerThreshold = 42000; unsigned int upperThreshold = maximum; thresholdFilter->SetInput(reader->GetOutput()); thresholdFilter->ThresholdOutside(lowerThreshold, upperThreshold); thresholdFilter->SetOutsideValue(0); // view the images QuickView viewer; viewer.AddImage(reader->GetOutput(), true, "Original Image"); viewer.AddImage(thresholdFilter->GetOutput(), true, "Threshold Filter"); viewer.Visualize(); */ ///////////////////////////////////////// /// Intensity mapping ///////////////////////////////////////// /* typedef itk::RescaleIntensityImageFilter< ImageType, ImageType > RescaleFilterType; RescaleFilterType::Pointer rescaleFilter = RescaleFilterType::New(); rescaleFilter->SetInput(reader->GetOutput()); rescaleFilter->SetOutputMinimum(0); rescaleFilter->SetOutputMaximum(3); // view the images QuickView viewer; viewer.AddImage(reader->GetOutput(), true, "Original Image"); viewer.AddImage(rescaleFilter->GetOutput(), true, "Intensity Mapping Filter"); viewer.Visualize(); */ ///////////////////////////////////////// /// Mean Filter ///////////////////////////////////////// /* typedef itk::MedianImageFilter<ImageType, ImageType > FilterType; FilterType::Pointer medianFilter = FilterType::New(); FilterType::InputSizeType radius; QuickView viewer; viewer.AddImage(reader->GetOutput(), true, "Original Image"); // r = 1; radius.Fill( 1.4142f ); medianFilter->SetRadius(radius); medianFilter->SetInput( reader->GetOutput() ); medianFilter->Update(); viewer.AddImage(medianFilter->GetOutput(), true, "Median Filter: x=1, y=1, r=1.4142f"); // r = 2 radius.Fill( 2.9155f ); medianFilter->SetRadius(radius); medianFilter->SetInput( reader->GetOutput() ); medianFilter->Update(); viewer.AddImage(medianFilter->GetOutput(), true, "Median Filter: x=2, y=2, r=2.9155f"); // r = 3; radius.Fill( 4.3012f ); medianFilter->SetRadius(radius); medianFilter->SetInput( reader->GetOutput() ); medianFilter->Update(); viewer.AddImage(medianFilter->GetOutput(), true, "Median Filter: x=3, y=3, r=4.3012f"); // r = 4 radius.Fill( 5.7009f ); medianFilter->SetRadius(radius); medianFilter->SetInput( reader->GetOutput() ); medianFilter->Update(); viewer.AddImage(medianFilter->GetOutput(), true, "Median Filter: x=4, y=4, r=5.7009f"); //r = 5 radius.Fill( 7.1063f ); medianFilter->SetRadius(radius); medianFilter->SetInput( reader->GetOutput() ); medianFilter->Update(); viewer.AddImage(medianFilter->GetOutput(), true, "Median Filter: x=5, y=5, r=7.1063f"); // view the images viewer.Visualize(); */ ///////////////////////////////////////// /// Smoothing Filter ///////////////////////////////////////// typedef itk::DiscreteGaussianImageFilter< ImageType, ImageType > filterType; double variance; filterType::Pointer gaussianFilter = filterType::New(); gaussianFilter->SetInput( reader->GetOutput() ); QuickView viewer; viewer.AddImage(reader->GetOutput(), true, "Original Image"); variance = 2.9; gaussianFilter->SetMaximumKernelWidth(14); gaussianFilter->SetVariance(variance); gaussianFilter->Update(); viewer.AddImage(gaussianFilter->GetOutput(), true, "Gaussian Filter, variance=2.9, width=14"); variance = 7.825; gaussianFilter->SetMaximumKernelWidth(16); gaussianFilter->SetVariance(variance); gaussianFilter->Update(); viewer.AddImage(gaussianFilter->GetOutput(), true, "Gaussian Filter, variance=7.825, width=16"); variance = 1.1; gaussianFilter->SetMaximumKernelWidth(25); gaussianFilter->SetVariance(variance); gaussianFilter->Update(); viewer.AddImage(gaussianFilter->GetOutput(), true, "Gaussian Filter, variance=1.1, width=25"); variance = 22; gaussianFilter->SetMaximumKernelWidth(60); gaussianFilter->SetVariance(variance); gaussianFilter->Update(); viewer.AddImage(gaussianFilter->GetOutput(), true, "Gaussian Filter, variance=22, width=60"); variance = 22; gaussianFilter->SetMaximumKernelWidth(20); gaussianFilter->SetVariance(variance); gaussianFilter->Update(); viewer.AddImage(gaussianFilter->GetOutput(), true, "Gaussian Filter, variance=22, width=20"); // view the images viewer.Visualize(); }