# How can i read a dicom file in “float pixel format”, using "itkConnectedThresholdImageFilter" and write it to dicom file again?

**URL:** https://discourse.itk.org/t/how-can-i-read-a-dicom-file-in-float-pixel-format-using-itkconnectedthresholdimagefilter-and-write-it-to-dicom-file-again/2971
**Category:** Engineering
**Tags:** dicom
**Created:** [April 19, 2020, 4:01am UTC](https://discourse.itk.org/t/how-can-i-read-a-dicom-file-in-float-pixel-format-using-itkconnectedthresholdimagefilter-and-write-it-to-dicom-file-again/2971 "2020-04-19T04:01:25Z")
**Posts on this page:** 1
**Page:** 1

<div class="post-metadata">

### Author: ![wulicheng](https://discourse.itk.org/user_avatar/discourse.itk.org/wulicheng/32/1390_2.png) [@wulicheng](https://discourse.itk.org/u/wulicheng)
#### Post date: [April 19, 2020, 4:01am UTC](https://discourse.itk.org/t/how-can-i-read-a-dicom-file-in-float-pixel-format-using-itkconnectedthresholdimagefilter-and-write-it-to-dicom-file-again/2971/1 "2020-04-19T04:01:25Z")

</div>

I test as next, but failed:

```cpp
	typedef float InternalOneFilePixelType;
	const unsigned int DimensionOneFile = 2;
	typedef itk::Image< InternalOneFilePixelType, DimensionOneFile > InternalOneFileImageType;
 

	typedef signed short OutputUCharPixelType;
	typedef itk::Image< OutputUCharPixelType, DimensionOneFile > OutputUCharImageType;
	typedef itk::CastImageFilter< InternalOneFileImageType, OutputUCharImageType >
		CastingFilterType;
	CastingFilterType::Pointer caster = CastingFilterType::New();

	 
	typedef itk::ImageFileReader< InternalOneFileImageType > ReaderType;
	typedef itk::ImageFileWriter< OutputUCharImageType > WriterType;
	ReaderType::Pointer readerOneFile = ReaderType::New();
	WriterType::Pointer writerOneFile = WriterType::New();
	readerOneFile->SetFileName("E:/ITK/results/test80.DCM");
	writerOneFile->SetFileName("E:/ITK/results/ITKFilterTest80.DCM");
	typedef itk::GDCMImageIO ImageIOType;
	ImageIOType::Pointer gdcmImageIO = ImageIOType::New();
	readerOneFile->SetImageIO(gdcmImageIO);
	try
	{
		readerOneFile->Update();
	}
	catch (itk::ExceptionObject & e)
	{
		std::cerr << "exception in file reader " << std::endl;
		std::cerr << e << std::endl;
		 
	}

	//平滑过滤器是使用图像类型作为模板参数实例化的。
	typedef itk::CurvatureFlowImageFilter< InternalOneFileImageType, InternalOneFileImageType >
		CurvatureFlowImageFilterType;

	CurvatureFlowImageFilterType::Pointer smoothing =
		CurvatureFlowImageFilterType::New();
	//声明区域生长滤波器
	typedef itk::ConnectedThresholdImageFilter< InternalOneFileImageType,
		InternalOneFileImageType > ConnectedFilterType;
	//创建实例
	ConnectedFilterType::Pointer connectedThreshold = ConnectedFilterType::New();

 
	//现在是时候连接一个简单的线性管道了。在管道的开头添加一个文件读取器，在结尾添加一个转 换筛选器和写入程序。
	//转换浮点像素类型为整数类型需要使用转换过滤器，因为只有少数图像文件格式支持浮点类型。
	smoothing->SetInput(readerOneFile->GetOutput());
	connectedThreshold->SetInput(smoothing->GetOutput());
	caster->SetInput(connectedThreshold->GetOutput());
	writerOneFile->SetInput(caster->GetOutput());
	 
	smoothing->SetNumberOfIterations(5);
	smoothing->SetTimeStep(0.125);
	 
	const InternalOneFilePixelType lowerThreshold = 220;
	const InternalOneFilePixelType upperThreshold = 255;

	connectedThreshold->SetLower(lowerThreshold);
	connectedThreshold->SetUpper(upperThreshold);
	//这个滤波器的输出是一个二值图像，除了提取的区域外，其他地方都是零值像素。使用方法选择区域内设置的强度值
	connectedThreshold->SetReplaceValue(255);

	InternalOneFileImageType::IndexType index;
	index[0] = 318;
	index[1] = 428;
	connectedThreshold->SetSeed(index);
	writerOneFile->SetImageIO(gdcmImageIO);
	try
	{
		writerOneFile->Update();
	}
	catch (itk::ExceptionObject & excep)
	{
		std::cerr << "Exception caught !" << std::endl;
		std::cerr << excep << std::endl;
	}`Preformatted text`

```
