Искаженные изображения DICOM при записи с использованием ITK

Я пытаюсь написать серию изображений dicom внутри большого проекта ITK. Изображения являются окончательными изображениями после применения множества различных фильтров. Я использую Image Plane Widget VTK для отображения моих изображений.

У меня проблемы с записью файлов dicom. Код действительно пишет, но изображения не являются правильными вообще. Они отображаются в виде искаженных изображений (см. Рисунок), если я просматриваю их либо в лучистом средстве просмотра, либо в изображенииJ. (Я попытался исправить настройки уровня окна, чтобы увидеть, если это было проблемой).

Рисунок: искаженное изображение дикомы
Рисунок: искаженное изображение дикомы

На предыдущей установке с использованием Microsoft Visual Studio 2010 Professional это работает. Однако я использую выпуск сообщества Microsoft Visual Studio 2015. Кажется, работает оставшаяся часть кода, включая просмотр результатов в виджете плоскости изображения ВТК. Однако экспортированные файлы неверны.
Я прочитал раздел о написании серии статей в окне ITK и не вижу, что делаю неправильно.

На последнем шаге применения фильтров я преобразовываю данные изображения в 8-битный как беззнаковый символ с 3-мя измерениями (это для дальнейшего разбиения в VTK) с указателем thresholder2.

Затем я определяю свой выходной каталог, куда нужно экспортировать данные, на которые указывает thresholder2, устанавливаю мои типы для записи изображения в виде неизмененного символа с двумя измерениями (так как я хочу серию dicom, а не том), получаю вывод и передаю его в ImageIO, получить сгенерированные имена и сохранить.

Кто-нибудь знает, что я делаю не так?

Любая помощь будет принята с благодарностью.

typedef float             OutputPixelType;
const unsigned int        Dimension = 3;
typedef itk::Image< OutputPixelType, Dimension >   OutputImageType;
typedef itk::Image< unsigned char,   Dimension >   CharImageType;
typedef itk::BinaryThresholdImageFilter<OutputImageType, CharImageType > ThresholdingFilterType;
ThresholdingFilterType::Pointer thresholder2 = ThresholdingFilterType::New();

thresholder2->SetInput(geodesicActiveContour->GetOutput() );
thresholder2->SetLowerThreshold(-1000);
thresholder2->SetUpperThreshold(0);
thresholder2->SetOutsideValue( 0 );
thresholder2->SetInsideValue( 255 );
thresholder2->Update( );

const char * outputDirectory = "C:/ITK-VTK/dicoms_to_test_second_patient/results";
itksys::SystemTools::MakeDirectory( outputDirectory );

typedef itk::Image<unsigned char, 2 > WriteImageType;
typedef itk::ImageSeriesWriter<CharImageType,WriteImageType > SeriesWriterType;SeriesWriterType::Pointer seriesWriter = SeriesWriterType::New();
seriesWriter->SetInput(thresholder2->GetOutput() );
seriesWriter->SetImageIO(dicomIO);

nameGenerator->SetOutputDirectory( outputDirectory );
seriesWriter->SetFileNames( nameGenerator->GetOutputFileNames() );
seriesWriter->SetMetaDataDictionaryArray(reader->GetMetaDataDictionaryArray());

try
{
seriesWriter->Update();
}
catch( itk::ExceptionObject & excp )
{
std::cerr << "Exception thrown while writing the series " << std::endl;
std::cerr << excp << std::endl;
return EXIT_FAILURE;
}

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]