Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
#include "itkVoronoiSegmentationImageFilter.h"
#include "itkVoronoiSegmentationImageFilterBase.h"
#include "itkTestingMacros.h"
#include <random> // For mt19937.

int
itkVoronoiSegmentationImageFilterTest(int argc, char * argv[])
Expand Down Expand Up @@ -53,26 +54,31 @@ itkVoronoiSegmentationImageFilterTest(int argc, char * argv[])
inputImage->SetRegions(region);
inputImage->Allocate();

std::mt19937 randomNumberEngine{};

itk::ImageRegionIteratorWithIndex<UShortImage> it(inputImage, region);

// Background: random field with mean: 500, std: 50
std::uniform_int_distribution<unsigned short> backgroundRandomNumberDistribution(450, 550);

std::cout << "Setting background random pattern image" << std::endl;
while (!it.IsAtEnd())
{
it.Set(static_cast<unsigned short>(vnl_sample_uniform(450, 550)));
it.Set(backgroundRandomNumberDistribution(randomNumberEngine));
++it;
}

// Object (2): random field with mean: 520, std: 20
std::uniform_int_distribution<unsigned short> forgroundRandomNumberDistribution(500, 540);

std::cout << "Defining object #2" << std::endl;
for (unsigned int i = 30; i < 94; ++i)
{
index[0] = i;
for (unsigned int j = 30; j < 94; ++j)
{
index[1] = j;
inputImage->SetPixel(index, static_cast<unsigned short>(vnl_sample_uniform(500, 540)));
inputImage->SetPixel(index, forgroundRandomNumberDistribution(randomNumberEngine));
}
}

Expand All @@ -82,7 +88,7 @@ itkVoronoiSegmentationImageFilterTest(int argc, char * argv[])
for (unsigned int j = 150; j < 214; ++j)
{
index[1] = j;
inputImage->SetPixel(index, static_cast<unsigned short>(vnl_sample_uniform(500, 540)));
inputImage->SetPixel(index, forgroundRandomNumberDistribution(randomNumberEngine));
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,11 @@

#include <algorithm> // For generate.
#include <iostream>
#include <random> // For mt19937.

// type alias for all functions
using PixelType = itk::RGBPixel<unsigned char>;
using PixelComponentType = PixelType::ComponentType;
using ImageType = itk::Image<PixelType, 2>;
using SegmentationType = itk::Image<unsigned char, 2>;
using ReaderType = itk::ImageFileReader<ImageType>;
Expand Down Expand Up @@ -69,19 +71,25 @@ SetUpInputImage()
inputImage->SetRegions(region);
inputImage->Allocate();

std::mt19937 randomNumberEngine{};

// add background random field
std::uniform_int_distribution<> backgroundRandomNumberDistribution(bgMean - bgStd, bgMean + bgStd);

itk::ImageRegionIterator<ImageType> iter(inputImage, region);
while (!iter.IsAtEnd())
{
PixelType px;
std::generate(px.begin(), px.end(), [] {
return static_cast<unsigned char>(vnl_sample_uniform(bgMean - bgStd, bgMean + bgStd));
std::generate(px.begin(), px.end(), [&randomNumberEngine, &backgroundRandomNumberDistribution] {
return static_cast<PixelComponentType>(backgroundRandomNumberDistribution(randomNumberEngine));
});
iter.Set(px);
++iter;
}

// add objects to image
std::uniform_int_distribution<> forgroundRandomNumberDistribution(fgMean - fgStd, fgMean + fgStd);

for (unsigned int x = objAStartX; x < objAEndX; ++x)
{
for (unsigned int y = objAStartY; y < objAEndY; ++y)
Expand All @@ -91,8 +99,8 @@ SetUpInputImage()
idx[1] = y;

PixelType px;
std::generate(px.begin(), px.end(), [] {
return static_cast<unsigned char>(vnl_sample_uniform(fgMean - fgStd, fgMean + fgStd));
std::generate(px.begin(), px.end(), [&randomNumberEngine, &forgroundRandomNumberDistribution] {
return static_cast<PixelComponentType>(forgroundRandomNumberDistribution(randomNumberEngine));
});
inputImage->SetPixel(idx, px);
}
Expand All @@ -106,8 +114,8 @@ SetUpInputImage()
idx[1] = y;

PixelType px;
std::generate(px.begin(), px.end(), [] {
return static_cast<unsigned char>(vnl_sample_uniform(fgMean - fgStd, fgMean + fgStd));
std::generate(px.begin(), px.end(), [&randomNumberEngine, &forgroundRandomNumberDistribution] {
return static_cast<PixelComponentType>(forgroundRandomNumberDistribution(randomNumberEngine));
});
inputImage->SetPixel(idx, px);
}
Expand Down
Loading