[Insight-users] Median filter on Volume: Performance

sacrif markus_m at gmx.net
Wed Feb 23 08:36:31 EST 2011


Hello!

Actually I simply want to load a volume, run a median filter on it and write
the resulting volume back to disk. Therefore I implemented the following
code:


typedef signed short PixelType;
static const unsigned int Dimension = 3;
typedef itk::Image<PixelType, Dimension> InputImageType;
typedef itk::Image<PixelType, Dimension> OutputImageType;
typedef itk::ImageFileReader<InputImageType> ReaderType;
typedef itk::ImageFileWriter< InputImageType >  WriterType;
typedef itk::MedianImageFilter< InputImageType, OutputImageType >
MedianFilterType;

void MyClass::createMedianHdrFile(std::string filename)
{
	ReaderType::Pointer reader = ReaderType::New();
	reader->SetFileName(filename.c_str());

	MedianFilterType::Pointer medianFilter = MedianFilterType::New();
	InputImageType::SizeType indexRadius;
	indexRadius[0] = 10; // radius along x
	indexRadius[1] = 10; // radius along y
	indexRadius[2] = 10; // radius along z
	medianFilter->SetRadius( indexRadius );
	medianFilter->SetInput(reader->GetOutput());

	std::string fnNoEnding = getFilenameWithErasedEnding(filename, ".hdr");
	std::string fnNewEnding = getFilenameWithNewEnding(fnNoEnding,
"_Median.hdr");

	WriterType::Pointer writer = WriterType::New();
	writer->SetFileName( fnNewEnding.c_str());
	writer->SetInput( medianFilter->GetOutput() );
	writer->Update();
	cout << "Median End" << endl;
}


Basically this works if I use a very small filter with "indexRadius[0/1/2] =
1;". However, as soon as I use "indexRadius[0/1/2] = 10;" the calculation
seems to take for ever. 
In the meanwhile the program ran for approximately 3 hours and did not
finish yet. Is it really possible that the calculation of a "median volume"
takes such a long time? And is there any way to reduce this time span?

My input and output volume are in the Analyze format. For the current test
run my input and output volume dimensions are  96x96x96 and the filter size
is 10x10x10. However, I would also like to create "median volumes" of even
larger data sets and with larger Filter dimensions.
The test input volume min and max intensity are -1093 and 1086,
respectively.

Additionally I wanted to ask whether there is a simple way to run apply a
spherical median filter of a certain radius instead of using the cuboid
defined by "indexRadius[0/1/2]".

Thank you for your help & Kind regards
Mark
-- 
View this message in context: http://old.nabble.com/Median-filter-on-Volume%3A-Performance-tp30994977p30994977.html
Sent from the ITK - Users mailing list archive at Nabble.com.



More information about the Insight-users mailing list