diff --git a/Modules/ToFHardware/Testing/files.cmake b/Modules/ToFHardware/Testing/files.cmake index 0998283555..2bbf0ec6f8 100644 --- a/Modules/ToFHardware/Testing/files.cmake +++ b/Modules/ToFHardware/Testing/files.cmake @@ -1,25 +1,26 @@ SET(MODULE_TESTS mitkToFCameraMITKPlayerControllerTest.cpp mitkToFCameraMITKPlayerDeviceTest.cpp mitkToFCameraPMDCamBoardControllerTest.cpp mitkToFCameraPMDCamBoardDeviceTest.cpp mitkToFCameraPMDCamCubeControllerTest.cpp mitkToFCameraPMDCamCubeDeviceTest.cpp mitkToFCameraPMDControllerTest.cpp mitkToFCameraPMDDeviceTest.cpp mitkToFCameraPMDMITKPlayerControllerTest.cpp mitkToFCameraPMDMITKPlayerDeviceTest.cpp mitkToFCameraPMDO3ControllerTest.cpp mitkToFCameraPMDO3DeviceTest.cpp mitkToFCameraPMDPlayerControllerTest.cpp mitkToFCameraPMDPlayerDeviceTest.cpp mitkToFImageCsvWriterTest.cpp mitkToFImageGrabberTest.cpp mitkToFImageGrabberCreatorTest.cpp mitkToFImageRecorderTest.cpp mitkToFImageRecorderFilterTest.cpp mitkToFImageWriterTest.cpp mitkToFNrrdImageWriterTest.cpp + mitkToFPicImageWriterTest.cpp mitkToFOpenCVImageGrabberTest.cpp ) diff --git a/Modules/ToFHardware/Testing/mitkToFImageCsvWriterTest.cpp b/Modules/ToFHardware/Testing/mitkToFImageCsvWriterTest.cpp index e877ef35c7..acc26f5d0d 100644 --- a/Modules/ToFHardware/Testing/mitkToFImageCsvWriterTest.cpp +++ b/Modules/ToFHardware/Testing/mitkToFImageCsvWriterTest.cpp @@ -1,199 +1,201 @@ /*========================================================================= Program: Medical Imaging & Interaction Toolkit Module: $RCSfile$ Language: C++ Date: $Date: 2010-05-27 16:06:53 +0200 (Do, 27 Mai 2010) $ Version: $Revision: $ Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. See MITKCopyright.txt or http://www.mitk.org/copyright.html for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #include #include #include #include void CloseCsvFile(FILE* outfile) { fclose(outfile); } void OpenCsvFile(FILE** outfile, std::string outfileName) { (*outfile) = fopen( outfileName.c_str(), "r" ); if( !outfile ) { MITK_ERROR << "Error opening outfile: " << outfileName; throw std::logic_error("Error opening outfile."); return; } } /**Documentation * test for the class "ToFImageCsvWriter". */ int mitkToFImageCsvWriterTest(int /* argc */, char* /*argv*/[]) { MITK_TEST_BEGIN("ToFImageCsvWriter"); + mitk::ToFImageCsvWriter::Pointer csvWriter = mitk::ToFImageCsvWriter::New(); + MITK_TEST_CONDITION_REQUIRED(csvWriter.GetPointer(), "Testing initialization of test object!"); + MITK_TEST_CONDITION_REQUIRED(csvWriter->GetExtension() == ".csv", "Testing correct initialization of member variable extension!"); unsigned int dimX = 320; unsigned int dimY = 160; unsigned int pixelNumber = dimX*dimY; unsigned int numOfFrames = 87; mitk::Image::Pointer distanceImage = mitk::ImageGenerator::GenerateRandomImage(dimX, dimY, numOfFrames); mitk::Image::Pointer amplitudeImage = mitk::ImageGenerator::GenerateRandomImage(dimX, dimY, numOfFrames); mitk::Image::Pointer intensityImage = mitk::ImageGenerator::GenerateRandomImage(dimX, dimY, numOfFrames); - mitk::ToFImageCsvWriter::Pointer csvWriter = mitk::ToFImageCsvWriter::New(); std::string distanceImageFileName("distImg.csv"); std::string amplitudeImageFileName("amplImg.csv"); std::string intensityImageFileName("intImg.csv"); csvWriter->SetDistanceImageFileName(distanceImageFileName); csvWriter->SetAmplitudeImageFileName(amplitudeImageFileName); csvWriter->SetIntensityImageFileName(intensityImageFileName); csvWriter->SetCaptureWidth(dimX); csvWriter->SetCaptureHeight(dimY); csvWriter->SetToFImageType(mitk::ToFImageWriter::ToFImageType3D); mitk::ImageSliceSelector::Pointer distanceSelector = mitk::ImageSliceSelector::New(); mitk::ImageSliceSelector::Pointer amplitudeSelector = mitk::ImageSliceSelector::New(); mitk::ImageSliceSelector::Pointer intensitySelector = mitk::ImageSliceSelector::New(); mitk::Image::Pointer tmpDistance; mitk::Image::Pointer tmpAmplitude; mitk::Image::Pointer tmpIntensity; distanceSelector->SetInput(distanceImage); amplitudeSelector->SetInput(amplitudeImage); intensitySelector->SetInput(intensityImage); //buffer float* distanceArray; float* amplitudeArray; float* intensityArray; csvWriter->Open(); //open file/stream for(unsigned int i = 0; iSetSliceNr(i); distanceSelector->Update(); tmpDistance = distanceSelector->GetOutput(); distanceArray = (float*)tmpDistance->GetData(); amplitudeSelector->SetSliceNr(i); amplitudeSelector->Update(); tmpAmplitude = amplitudeSelector->GetOutput(); amplitudeArray = (float*)tmpAmplitude->GetData(); intensitySelector->SetSliceNr(i); intensitySelector->Update(); tmpIntensity = intensitySelector->GetOutput(); intensityArray = (float*)tmpIntensity->GetData(); csvWriter->Add(distanceArray, amplitudeArray, intensityArray); } csvWriter->Close(); //close file FILE* distanceInfile = NULL; FILE* amplitudeInfile = NULL; FILE* intensityInfile = NULL; //open file again OpenCsvFile(&(distanceInfile), distanceImageFileName); OpenCsvFile(&(amplitudeInfile), amplitudeImageFileName); OpenCsvFile(&(intensityInfile), intensityImageFileName); float distVal = 0.0, amplVal = 0.0, intenVal = 0.0; int dErr = 0, aErr = 0, iErr = 0; bool readingCorrect = true; //for all frames... for(unsigned int j=0; jSetSliceNr(j); distanceSelector->Update(); tmpDistance = distanceSelector->GetOutput(); distanceArray = (float*)tmpDistance->GetData(); amplitudeSelector->SetSliceNr(j); amplitudeSelector->Update(); tmpAmplitude = amplitudeSelector->GetOutput(); amplitudeArray = (float*)tmpAmplitude->GetData(); intensitySelector->SetSliceNr(j); intensitySelector->Update(); tmpIntensity = intensitySelector->GetOutput(); intensityArray = (float*)tmpIntensity->GetData(); //for all pixels for(unsigned int i=0; i #include -#include -#include -#include -#include /**Documentation * test for the class "ToFImageWriter". */ int mitkToFImageWriterTest(int /* argc */, char* /*argv*/[]) { MITK_TEST_BEGIN("ToFImageWriter"); - //run the test with some unusual parameters + //testing initialization of object + mitk::ToFImageWriter::Pointer tofWriter = mitk::ToFImageWriter::New(); + MITK_TEST_CONDITION_REQUIRED(tofWriter.GetPointer(), "Testing initialization of test object!"); + MITK_TEST_CONDITION_REQUIRED(tofWriter->GetExtension()!= "", "Test initialization of member extension!"); + MITK_TEST_CONDITION_REQUIRED(tofWriter->GetDistanceImageFileName()== "", "Test initialization of member distanceImageFileName!"); + MITK_TEST_CONDITION_REQUIRED(tofWriter->GetAmplitudeImageFileName()== "", "Test initialization of member amplitudeImageFileName!"); + MITK_TEST_CONDITION_REQUIRED(tofWriter->GetIntensityImageFileName()== "", "Test initialization of member intnensityImageFileName!"); + MITK_TEST_CONDITION_REQUIRED(tofWriter->GetDistanceImageSelected(), "Test initialization of member distanceImageSelected!"); + MITK_TEST_CONDITION_REQUIRED(tofWriter->GetAmplitudeImageSelected(), "Test initialization of member amplitudeImageSelected!"); + MITK_TEST_CONDITION_REQUIRED(tofWriter->GetIntensityImageSelected(), "Test initialization of member intnensityImageSelected!"); + MITK_TEST_CONDITION_REQUIRED(tofWriter->GetCaptureWidth()== 200, "Test initialization of member captureWidth!"); + MITK_TEST_CONDITION_REQUIRED(tofWriter->GetCaptureHeight()== 200, "Test initialization of member captureHeight!"); + MITK_TEST_CONDITION_REQUIRED(tofWriter->GetToFImageType()== mitk::ToFImageWriter::ToFImageType3D, "Test initialization of member ToFImageType!"); + + //set member parameter and test again unsigned int dimX = 255; unsigned int dimY = 188; - unsigned int pixelNumber = dimX*dimY; - unsigned int numOfFrames = 117; //or numberOfSlices - - //create 3 images filled with random values - mitk::Image::Pointer distanceImage = mitk::ImageGenerator::GenerateRandomImage(dimX, dimY, numOfFrames,0); - mitk::Image::Pointer amplitudeImage = mitk::ImageGenerator::GenerateRandomImage(dimX, dimY, numOfFrames,0); - mitk::Image::Pointer intensityImage = mitk::ImageGenerator::GenerateRandomImage(dimX, dimY, numOfFrames,0); - - mitk::ToFImageWriter::Pointer tofWriter = mitk::ToFImageWriter::New(); - - //file names on the disc std::string distanceImageFileName("distImg.pic"); std::string amplitudeImageFileName("amplImg.pic"); std::string intensityImageFileName("intImg.pic"); - + std::string fileExtension(".test"); + bool distanceImageSelected = false; + bool amplitudeImageSelected = false; + bool intensityImageSelected = false; + + tofWriter->SetCaptureWidth(dimX); + tofWriter->SetCaptureHeight(dimY); tofWriter->SetDistanceImageFileName(distanceImageFileName); tofWriter->SetAmplitudeImageFileName(amplitudeImageFileName); tofWriter->SetIntensityImageFileName(intensityImageFileName); + tofWriter->SetExtension(fileExtension); + tofWriter->SetDistanceImageSelected(distanceImageSelected); + tofWriter->SetAmplitudeImageSelected(amplitudeImageSelected); + tofWriter->SetIntensityImageSelected(intensityImageSelected); + tofWriter->SetToFImageType(mitk::ToFImageWriter::ToFImageType2DPlusT); MITK_TEST_CONDITION_REQUIRED(distanceImageFileName==tofWriter->GetDistanceImageFileName(), "Testing set/get distance image file name"); MITK_TEST_CONDITION_REQUIRED(amplitudeImageFileName==tofWriter->GetAmplitudeImageFileName(), "Testing set/get amplitude image file name"); MITK_TEST_CONDITION_REQUIRED(intensityImageFileName==tofWriter->GetIntensityImageFileName(), "Testing set/get intensity image file name"); - - tofWriter->SetCaptureWidth(dimX); - tofWriter->SetCaptureHeight(dimY); - MITK_TEST_CONDITION_REQUIRED(dimX==tofWriter->GetCaptureWidth(), "Testing set/get CaptureWidth"); MITK_TEST_CONDITION_REQUIRED(dimY==tofWriter->GetCaptureHeight(), "Testing set/get CaptureHeight"); - - tofWriter->SetToFImageType(mitk::ToFImageWriter::ToFImageType2DPlusT); - + MITK_TEST_CONDITION_REQUIRED(distanceImageSelected==tofWriter->GetDistanceImageSelected(), "Testing set/get distance image selection"); + MITK_TEST_CONDITION_REQUIRED(amplitudeImageSelected==tofWriter->GetAmplitudeImageSelected(), "Testing set/get amplitude image selection"); + MITK_TEST_CONDITION_REQUIRED(intensityImageSelected==tofWriter->GetIntensityImageSelected(), "Testing set/get intensity image selection"); + MITK_TEST_CONDITION_REQUIRED(fileExtension==tofWriter->GetExtension(), "Testing set/get file extension"); MITK_TEST_CONDITION_REQUIRED(mitk::ToFImageWriter::ToFImageType2DPlusT==tofWriter->GetToFImageType(), "Testing set/get ToFImageType"); - tofWriter->SetToFImageType(mitk::ToFImageWriter::ToFImageType3D); - - //buffer for each slice - float* distanceArray; - float* amplitudeArray; - float* intensityArray; - - float* distanceArrayRead; - float* amplitudeArrayRead; - float* intensityArrayRead; - - tofWriter->Open(); //open file/stream - //Note: the slices are written out reverse order, because the ToFImageWriter has to write them out immediately. - //A PicFileWriter would write them out vice versa and the PicFileWriter reads the slices vice versa. - for(unsigned int i = numOfFrames; i > 0 ; i--) - { //write values to file/stream - //The slice index is "i-1", because "for(unsigned int i = numOfFrames-1; i >= 0 ; i--)" does not work for some reason - distanceArray = (float*)distanceImage->GetSliceData(i-1, 0, 0)->GetData(); - amplitudeArray = (float*)amplitudeImage->GetSliceData(i-1, 0, 0)->GetData(); - intensityArray = (float*)intensityImage->GetSliceData(i-1, 0, 0)->GetData(); - - //write (or add) the three slices to the file - tofWriter->Add(distanceArray, amplitudeArray, intensityArray); - } - tofWriter->Close(); //close file - - //read in the three images from disc - mitk::PicFileReader::Pointer fileReader = mitk::PicFileReader::New(); - fileReader->SetFileName(distanceImageFileName); - fileReader->Update(); - mitk::Image::Pointer distanceImageRead = fileReader->GetOutput(); - - fileReader = mitk::PicFileReader::New(); - fileReader->SetFileName(amplitudeImageFileName); - fileReader->Update(); - mitk::Image::Pointer amplitudeImageRead = fileReader->GetOutput(); - - fileReader = mitk::PicFileReader::New(); - fileReader->SetFileName(intensityImageFileName); - fileReader->Update(); - mitk::Image::Pointer intensityImageRead = fileReader->GetOutput(); - - bool readingCorrect = true; - // for all frames... - for(unsigned int j=0; jGetSliceData(j, 0, 0)->GetData(); - amplitudeArray = (float*)amplitudeImage->GetSliceData(j, 0, 0)->GetData(); - intensityArray = (float*)intensityImage->GetSliceData(j, 0, 0)->GetData(); - - //data read from disc - distanceArrayRead = (float*)distanceImageRead->GetSliceData(j, 0, 0)->GetData(); - amplitudeArrayRead = (float*)amplitudeImageRead->GetSliceData(j, 0, 0)->GetData(); - intensityArrayRead = (float*)intensityImageRead->GetSliceData(j, 0, 0)->GetData(); - - //for all pixels -for(unsigned int i=0; i #include #include #include -//#include -//#include +#include "mitkItkImageFileReader.h" /**Documentation * test for the class "ToFImageWriter". */ int mitkToFNrrdImageWriterTest(int /* argc */, char* /*argv*/[]) { MITK_TEST_BEGIN("ToFNrrdImageWriter"); + mitk::ToFNrrdImageWriter::Pointer tofNrrdWriter = mitk::ToFNrrdImageWriter::New(); + // testing correct initialization + MITK_TEST_CONDITION_REQUIRED(tofNrrdWriter.GetPointer(), "Testing initialization of test object!"); + MITK_TEST_CONDITION_REQUIRED(tofNrrdWriter->GetExtension() == ".nrrd", "testing initialization of extension member variable!"); + + //GENERATE TEST DATA ////run the test with some unusual parameters - unsigned int dimX = 25; - unsigned int dimY = 18; + unsigned int dimX = 255; + unsigned int dimY = 178; unsigned int pixelNumber = dimX*dimY; - unsigned int numOfFrames = 5; //or numberOfSlices - + unsigned int numOfFrames = 23; //or numberOfSlices ////create 3 images filled with random values - mitk::Image::Pointer distanceImage = mitk::ImageGenerator::GenerateRandomImage(dimX, dimY, numOfFrames,0, 1.0f, 5.0f); - mitk::Image::Pointer amplitudeImage = mitk::ImageGenerator::GenerateRandomImage(dimX, dimY, numOfFrames,0, 6.0f, 10.0f); - mitk::Image::Pointer intensityImage = mitk::ImageGenerator::GenerateRandomImage(dimX, dimY, numOfFrames,0, 11.0f, 15.0f); - - mitk::ToFNrrdImageWriter::Pointer tofWriter = mitk::ToFNrrdImageWriter::New(); + mitk::Image::Pointer distanceImage = mitk::ImageGenerator::GenerateRandomImage(dimX, dimY, numOfFrames,0, 1.0f, 1.0f); + mitk::Image::Pointer amplitudeImage = mitk::ImageGenerator::GenerateRandomImage(dimX, dimY, numOfFrames,0, 0.0f, 2000.0f); + mitk::Image::Pointer intensityImage = mitk::ImageGenerator::GenerateRandomImage(dimX, dimY, numOfFrames,0, 0.0f, 100000.0f); + //SET NEEDED PARAMETER //file names on the disc - std::string distanceImageFileName("E:/distImg.nrrd"); - std::string amplitudeImageFileName("E:/amplImg.nrrd"); - std::string intensityImageFileName("E:/intImg.nrrd"); - - tofWriter->SetDistanceImageFileName(distanceImageFileName); - tofWriter->SetAmplitudeImageFileName(amplitudeImageFileName); - tofWriter->SetIntensityImageFileName(intensityImageFileName); - - MITK_TEST_CONDITION_REQUIRED(distanceImageFileName==tofWriter->GetDistanceImageFileName(), "Testing set/get distance image file name"); - MITK_TEST_CONDITION_REQUIRED(amplitudeImageFileName==tofWriter->GetAmplitudeImageFileName(), "Testing set/get amplitude image file name"); - MITK_TEST_CONDITION_REQUIRED(intensityImageFileName==tofWriter->GetIntensityImageFileName(), "Testing set/get intensity image file name"); - - tofWriter->SetCaptureWidth(dimX); - tofWriter->SetCaptureHeight(dimY); - - MITK_TEST_CONDITION_REQUIRED(dimX==tofWriter->GetCaptureWidth(), "Testing set/get CaptureWidth"); - MITK_TEST_CONDITION_REQUIRED(dimY==tofWriter->GetCaptureHeight(), "Testing set/get CaptureHeight"); - - tofWriter->SetToFImageType(mitk::ToFNrrdImageWriter::ToFImageType2DPlusT); - - MITK_TEST_CONDITION_REQUIRED(mitk::ToFNrrdImageWriter::ToFImageType2DPlusT==tofWriter->GetToFImageType(), "Testing set/get ToFImageType"); - - tofWriter->SetToFImageType(mitk::ToFNrrdImageWriter::ToFImageType3D); + std::string distanceImageFileName("distImg.nrrd"); + std::string amplitudeImageFileName("amplImg.nrrd"); + std::string intensityImageFileName("intImg.nrrd"); + + // set file name methods + tofNrrdWriter->SetDistanceImageFileName(distanceImageFileName); + tofNrrdWriter->SetAmplitudeImageFileName(amplitudeImageFileName); + tofNrrdWriter->SetIntensityImageFileName(intensityImageFileName); + tofNrrdWriter->SetCaptureWidth(dimX); + tofNrrdWriter->SetCaptureHeight(dimY); + tofNrrdWriter->SetToFImageType(mitk::ToFNrrdImageWriter::ToFImageType3D); //buffer for each slice float* distanceArray; float* amplitudeArray; float* intensityArray; float* distanceArrayRead; float* amplitudeArrayRead; float* intensityArrayRead; - tofWriter->Open(); //open file/stream - //Note: the slices are written out reverse order, because the ToFImageWriter has to write them out immediately. - //A PicFileWriter would write them out vice versa and the PicFileWriter reads the slices vice versa. - for(unsigned int i = numOfFrames; i > 0 ; i--) - { //write values to file/stream - //The slice index is "i-1", because "for(unsigned int i = numOfFrames-1; i >= 0 ; i--)" does not work for some reason - distanceArray = (float*)distanceImage->GetSliceData(i-1, 0, 0)->GetData(); - amplitudeArray = (float*)amplitudeImage->GetSliceData(i-1, 0, 0)->GetData(); - intensityArray = (float*)intensityImage->GetSliceData(i-1, 0, 0)->GetData(); + tofNrrdWriter->Open(); //open file/stream + + for(unsigned int i = 0; i < numOfFrames ; i++) + { + distanceArray = (float*)distanceImage->GetSliceData(i, 0, 0)->GetData(); + amplitudeArray = (float*)amplitudeImage->GetSliceData(i, 0, 0)->GetData(); + intensityArray = (float*)intensityImage->GetSliceData(i, 0, 0)->GetData(); //write (or add) the three slices to the file - tofWriter->Add(distanceArray, amplitudeArray, intensityArray); + tofNrrdWriter->Add(distanceArray, amplitudeArray, intensityArray); } - tofWriter->Close(); //close file + tofNrrdWriter->Close(); //close file //read in the three images from disc -// mitk::PicFileReader::Pointer fileReader = mitk::PicFileReader::New(); -// fileReader->SetFileName(distanceImageFileName); -// fileReader->Update(); -// mitk::Image::Pointer distanceImageRead = fileReader->GetOutput(); -// -// fileReader = mitk::PicFileReader::New(); -// fileReader->SetFileName(amplitudeImageFileName); -// fileReader->Update(); -// mitk::Image::Pointer amplitudeImageRead = fileReader->GetOutput(); -// -// fileReader = mitk::PicFileReader::New(); -// fileReader->SetFileName(intensityImageFileName); -// fileReader->Update(); -// mitk::Image::Pointer intensityImageRead = fileReader->GetOutput(); -// -// bool readingCorrect = true; -// // for all frames... -// for(unsigned int j=0; jGetSliceData(j, 0, 0)->GetData(); -// amplitudeArray = (float*)amplitudeImage->GetSliceData(j, 0, 0)->GetData(); -// intensityArray = (float*)intensityImage->GetSliceData(j, 0, 0)->GetData(); -// -// //data read from disc -// distanceArrayRead = (float*)distanceImageRead->GetSliceData(j, 0, 0)->GetData(); -// amplitudeArrayRead = (float*)amplitudeImageRead->GetSliceData(j, 0, 0)->GetData(); -// intensityArrayRead = (float*)intensityImageRead->GetSliceData(j, 0, 0)->GetData(); -// -// //for all pixels -//for(unsigned int i=0; iSetFileName(distanceImageFileName); + fileReader->Update(); + mitk::Image::Pointer distanceImageRead = fileReader->GetOutput(); + + fileReader = mitk::ItkImageFileReader::New(); + fileReader->SetFileName(amplitudeImageFileName); + fileReader->Update(); + mitk::Image::Pointer amplitudeImageRead = fileReader->GetOutput(); + + fileReader = mitk::ItkImageFileReader::New(); + fileReader->SetFileName(intensityImageFileName); + fileReader->Update(); + mitk::Image::Pointer intensityImageRead = fileReader->GetOutput(); + + bool readingCorrect = true; + // for all frames... + for(unsigned int j=0; j < numOfFrames; j++) + { + //get one slice of each image and compare it + //original data + distanceArray = (float*)distanceImage->GetSliceData(j, 0, 0)->GetData(); + amplitudeArray = (float*)amplitudeImage->GetSliceData(j, 0, 0)->GetData(); + intensityArray = (float*)intensityImage->GetSliceData(j, 0, 0)->GetData(); + + //data read from disc + distanceArrayRead = (float*)distanceImageRead->GetSliceData(j, 0, 0)->GetData(); + amplitudeArrayRead = (float*)amplitudeImageRead->GetSliceData(j, 0, 0)->GetData(); + intensityArrayRead = (float*)intensityImageRead->GetSliceData(j, 0, 0)->GetData(); + + //for all pixels + for(unsigned int i=0; i -#include +#include #include #include #include #include /**Documentation - * test for the class "ToFImageWriter". + * test for the class "ToFPicImageWriter". */ -int mitkToFImageWriterTest(int /* argc */, char* /*argv*/[]) +int mitkToFPicImageWriterTest(int /* argc */, char* /*argv*/[]) { - MITK_TEST_BEGIN("ToFImageWriter"); + MITK_TEST_BEGIN("ToFPicImageWriter"); + + mitk::ToFPicImageWriter::Pointer tofPicWriter = mitk::ToFPicImageWriter::New(); + MITK_TEST_CONDITION_REQUIRED(tofPicWriter.GetPointer(), "Testing initialization of test object!"); + MITK_TEST_CONDITION_REQUIRED(tofPicWriter->GetExtension() == ".pic", "Testing initialization of extension member variable!"); //run the test with some unusual parameters unsigned int dimX = 255; unsigned int dimY = 188; unsigned int pixelNumber = dimX*dimY; unsigned int numOfFrames = 117; //or numberOfSlices //create 3 images filled with random values mitk::Image::Pointer distanceImage = mitk::ImageGenerator::GenerateRandomImage(dimX, dimY, numOfFrames,0); mitk::Image::Pointer amplitudeImage = mitk::ImageGenerator::GenerateRandomImage(dimX, dimY, numOfFrames,0); mitk::Image::Pointer intensityImage = mitk::ImageGenerator::GenerateRandomImage(dimX, dimY, numOfFrames,0); - mitk::ToFImageWriter::Pointer tofWriter = mitk::ToFImageWriter::New(); - //file names on the disc std::string distanceImageFileName("distImg.pic"); std::string amplitudeImageFileName("amplImg.pic"); std::string intensityImageFileName("intImg.pic"); - tofWriter->SetDistanceImageFileName(distanceImageFileName); - tofWriter->SetAmplitudeImageFileName(amplitudeImageFileName); - tofWriter->SetIntensityImageFileName(intensityImageFileName); - - MITK_TEST_CONDITION_REQUIRED(distanceImageFileName==tofWriter->GetDistanceImageFileName(), "Testing set/get distance image file name"); - MITK_TEST_CONDITION_REQUIRED(amplitudeImageFileName==tofWriter->GetAmplitudeImageFileName(), "Testing set/get amplitude image file name"); - MITK_TEST_CONDITION_REQUIRED(intensityImageFileName==tofWriter->GetIntensityImageFileName(), "Testing set/get intensity image file name"); - - tofWriter->SetCaptureWidth(dimX); - tofWriter->SetCaptureHeight(dimY); - - MITK_TEST_CONDITION_REQUIRED(dimX==tofWriter->GetCaptureWidth(), "Testing set/get CaptureWidth"); - MITK_TEST_CONDITION_REQUIRED(dimY==tofWriter->GetCaptureHeight(), "Testing set/get CaptureHeight"); - - tofWriter->SetToFImageType(mitk::ToFImageWriter::ToFImageType2DPlusT); - - MITK_TEST_CONDITION_REQUIRED(mitk::ToFImageWriter::ToFImageType2DPlusT==tofWriter->GetToFImageType(), "Testing set/get ToFImageType"); - - tofWriter->SetToFImageType(mitk::ToFImageWriter::ToFImageType3D); + tofPicWriter->SetDistanceImageFileName(distanceImageFileName); + tofPicWriter->SetAmplitudeImageFileName(amplitudeImageFileName); + tofPicWriter->SetIntensityImageFileName(intensityImageFileName); + tofPicWriter->SetCaptureWidth(dimX); + tofPicWriter->SetCaptureHeight(dimY); + tofPicWriter->SetToFImageType(mitk::ToFImageWriter::ToFImageType3D); //buffer for each slice float* distanceArray; float* amplitudeArray; float* intensityArray; float* distanceArrayRead; float* amplitudeArrayRead; float* intensityArrayRead; - tofWriter->Open(); //open file/stream - //Note: the slices are written out reverse order, because the ToFImageWriter has to write them out immediately. + tofPicWriter->Open(); //open file/stream + //Note: the slices are written out reverse order, because the ToFPicImageWriter has to write them out immediately. //A PicFileWriter would write them out vice versa and the PicFileWriter reads the slices vice versa. + for(unsigned int i = numOfFrames; i > 0 ; i--) { //write values to file/stream //The slice index is "i-1", because "for(unsigned int i = numOfFrames-1; i >= 0 ; i--)" does not work for some reason distanceArray = (float*)distanceImage->GetSliceData(i-1, 0, 0)->GetData(); amplitudeArray = (float*)amplitudeImage->GetSliceData(i-1, 0, 0)->GetData(); intensityArray = (float*)intensityImage->GetSliceData(i-1, 0, 0)->GetData(); //write (or add) the three slices to the file - tofWriter->Add(distanceArray, amplitudeArray, intensityArray); + tofPicWriter->Add(distanceArray, amplitudeArray, intensityArray); } - tofWriter->Close(); //close file + tofPicWriter->Close(); //close file //read in the three images from disc mitk::PicFileReader::Pointer fileReader = mitk::PicFileReader::New(); fileReader->SetFileName(distanceImageFileName); fileReader->Update(); mitk::Image::Pointer distanceImageRead = fileReader->GetOutput(); fileReader = mitk::PicFileReader::New(); fileReader->SetFileName(amplitudeImageFileName); fileReader->Update(); mitk::Image::Pointer amplitudeImageRead = fileReader->GetOutput(); fileReader = mitk::PicFileReader::New(); fileReader->SetFileName(intensityImageFileName); fileReader->Update(); mitk::Image::Pointer intensityImageRead = fileReader->GetOutput(); bool readingCorrect = true; // for all frames... for(unsigned int j=0; jGetSliceData(j, 0, 0)->GetData(); amplitudeArray = (float*)amplitudeImage->GetSliceData(j, 0, 0)->GetData(); intensityArray = (float*)intensityImage->GetSliceData(j, 0, 0)->GetData(); //data read from disc distanceArrayRead = (float*)distanceImageRead->GetSliceData(j, 0, 0)->GetData(); amplitudeArrayRead = (float*)amplitudeImageRead->GetSliceData(j, 0, 0)->GetData(); intensityArrayRead = (float*)intensityImageRead->GetSliceData(j, 0, 0)->GetData(); //for all pixels for(unsigned int i=0; i -//#include namespace mitk { ToFImageCsvWriter::ToFImageCsvWriter(): ToFImageWriter(), m_DistanceOutfile(NULL), m_AmplitudeOutfile(NULL), m_IntensityOutfile(NULL) { this->m_Extension = std::string(".csv"); } ToFImageCsvWriter::~ToFImageCsvWriter() { } void ToFImageCsvWriter::Open() { this->CheckForFileExtension(this->m_DistanceImageFileName); this->CheckForFileExtension(this->m_AmplitudeImageFileName); this->CheckForFileExtension(this->m_IntensityImageFileName); this->m_PixelNumber = this->m_CaptureWidth * this->m_CaptureHeight; this->m_ImageSizeInBytes = this->m_PixelNumber * sizeof(float); if (this->m_DistanceImageSelected) { this->OpenCsvFile(&(this->m_DistanceOutfile), this->m_DistanceImageFileName); } if (this->m_AmplitudeImageSelected) { this->OpenCsvFile(&(this->m_AmplitudeOutfile), this->m_AmplitudeImageFileName); } if (this->m_IntensityImageSelected) { this->OpenCsvFile(&(this->m_IntensityOutfile), this->m_IntensityImageFileName); } this->m_NumOfFrames = 0; } void ToFImageCsvWriter::Close() { if (this->m_DistanceImageSelected) { this->CloseCsvFile(this->m_DistanceOutfile); } if (this->m_AmplitudeImageSelected) { this->CloseCsvFile(this->m_AmplitudeOutfile); } if (this->m_IntensityImageSelected) { this->CloseCsvFile(this->m_IntensityOutfile); } } void ToFImageCsvWriter::Add(float* distanceFloatData, float* amplitudeFloatData, float* intensityFloatData) { if (this->m_DistanceImageSelected) { this->WriteCsvFile(this->m_DistanceOutfile, distanceFloatData); } if (this->m_AmplitudeImageSelected) { this->WriteCsvFile(this->m_AmplitudeOutfile, amplitudeFloatData); } if (this->m_IntensityImageSelected) { this->WriteCsvFile(this->m_IntensityOutfile, intensityFloatData); } this->m_NumOfFrames++; } void ToFImageCsvWriter::WriteCsvFile(FILE* outfile, float* floatData) { for(int i=0; im_PixelNumber; i++) { if (this->m_NumOfFrames==0 && i==0) { fprintf(outfile, "%f", floatData[i]); } else { fprintf(outfile, ",%f", floatData[i]); } } } void ToFImageCsvWriter::OpenCsvFile(FILE** outfile, std::string outfileName) { (*outfile) = fopen( outfileName.c_str(), "w+" ); if( !outfile ) { MITK_ERROR << "Error opening outfile: " << outfileName; throw std::logic_error("Error opening outfile."); return; } } void ToFImageCsvWriter::CloseCsvFile(FILE* outfile) { if (this->m_NumOfFrames == 0) { fclose(outfile); throw std::logic_error("File is empty."); return; } fclose(outfile); } } diff --git a/Modules/ToFHardware/mitkToFImageWriter.cpp b/Modules/ToFHardware/mitkToFImageWriter.cpp index 568b41637c..ddde151160 100644 --- a/Modules/ToFHardware/mitkToFImageWriter.cpp +++ b/Modules/ToFHardware/mitkToFImageWriter.cpp @@ -1,257 +1,257 @@ /*========================================================================= Program: Medical Imaging & Interaction Toolkit Module: $RCSfile$ Language: C++ Date: $Date: 2010-05-27 16:06:53 +0200 (Do, 27 Mai 2010) $ Version: $Revision: $ Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. See MITKCopyright.txt or http://www.mitk.org/copyright.html for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #include //#include #include //#include // itk includes #include "itksys/SystemTools.hxx" //extern "C" //{ //size_t _mitkIpPicFWrite( const void *ptr, size_t size, size_t nitems, mitkIpPicFile_t stream); //} namespace mitk { - ToFImageWriter::ToFImageWriter():m_Extension(".nrrd"),/*m_DistanceOutfile(NULL), - m_AmplitudeOutfile(NULL), m_IntensityOutfile(NULL),*/m_NumOfFrames(0), - /* m_MitkImage(NULL),*/m_DistanceImageSelected(true), m_AmplitudeImageSelected(true), + ToFImageWriter::ToFImageWriter():m_Extension(".nrrd"), + m_DistanceImageFileName(), m_AmplitudeImageFileName(), m_IntensityImageFileName(), + m_NumOfFrames(0), m_DistanceImageSelected(true), m_AmplitudeImageSelected(true), m_IntensityImageSelected(true),m_CaptureWidth(200),m_CaptureHeight(200), m_PixelNumber(0), m_ImageSizeInBytes(0), m_ToFImageType(ToFImageWriter::ToFImageType3D) { } ToFImageWriter::~ToFImageWriter() { } //void ToFImageWriter::Open() //{ // this->CheckForFileExtension(this->m_DistanceImageFileName); // this->CheckForFileExtension(this->m_AmplitudeImageFileName); // this->CheckForFileExtension(this->m_IntensityImageFileName); // this->m_PixelNumber = this->m_CaptureWidth * this->m_CaptureHeight; // this->m_ImageSizeInBytes = this->m_PixelNumber * sizeof(float); // float* floatData = new float[this->m_PixelNumber]; // for(int i=0; im_PixelNumber; i++) // { // floatData[i] = i + 0.0; // } // this->m_MitkImage = Image::New(); // unsigned int dimensions[4]; // dimensions[0] = this->m_CaptureWidth; // dimensions[1] = this->m_CaptureHeight; // if (this->m_ToFImageType == ToFImageWriter::ToFImageType2DPlusT) // { // dimensions[2] = 1; // dimensions[3] = 2; // this->m_MitkImage->Initialize( PixelType(typeid(float)), 4, dimensions, 1); // } // else // { // dimensions[2] = 2; // dimensions[3] = 1; // this->m_MitkImage->Initialize( PixelType(typeid(float)), 3, dimensions, 1); // } // this->m_MitkImage->SetSlice(floatData, 0, 0, 0); // //ImageWriter::Pointer imageWriter = ImageWriter::New(); // // if (this->m_DistanceImageSelected) // // { // // imageWriter->SetFileName(this->m_DistanceImageFileName); // // imageWriter->SetInputImage(); // // imageWriter->SetExtension(this->m_Extension); // // imageWriter->Modified(); // // imageWriter->Update(); // // } // // if (this->m_AmplitudeImageSelected) // // { // // imageWriter->SetFileName(this->m_AmplitudeImageFileName); // // imageWriter->SetInputImage(); // // imageWriter->SetExtension(this->m_Extension); // // imageWriter->Modified(); // // imageWriter->Update(); // // } // // if (this->m_IntensityImageSelected) // // { // // imageWriter->SetFileName(this->m_IntensityImageFileName); // // imageWriter->SetInputImage(); // // imageWriter->SetExtension(this->m_Extension); // // imageWriter->Modified(); // // imageWriter->Update(); // // } // mitkIpPicDescriptor* pic = this->m_MitkImage->GetPic(); // if (this->m_DistanceImageSelected) // { // this->OpenPicFile(&(this->m_DistanceOutfile), this->m_DistanceImageFileName); // this->WritePicFileHeader(this->m_DistanceOutfile, pic); // } // if (this->m_AmplitudeImageSelected) // { // this->OpenPicFile(&(this->m_AmplitudeOutfile), this->m_AmplitudeImageFileName); // this->WritePicFileHeader(this->m_AmplitudeOutfile, pic); // } // if (this->m_IntensityImageSelected) // { // this->OpenPicFile(&(this->m_IntensityOutfile), this->m_IntensityImageFileName); // this->WritePicFileHeader(this->m_IntensityOutfile, pic); // } // this->m_NumOfFrames = 0; // delete[] floatData; //} //void ToFImageWriter::Close() //{ // //if (this->m_DistanceImageSelected) // //{ // // this->ClosePicFile(this->m_DistanceOutfile); // //} // //if (this->m_AmplitudeImageSelected) // //{ // // this->ClosePicFile(this->m_AmplitudeOutfile); // //} // //if (this->m_IntensityImageSelected) // //{ // // this->ClosePicFile(this->m_IntensityOutfile); // //} //} //void ToFImageWriter::Add(float* distanceFloatData, float* amplitudeFloatData, float* intensityFloatData) //{ // //if (this->m_DistanceImageSelected) // //{ // // fwrite( distanceFloatData, this->m_ImageSizeInBytes, 1, this->m_DistanceOutfile ); // //} // //if (this->m_AmplitudeImageSelected) // //{ // // fwrite( amplitudeFloatData, this->m_ImageSizeInBytes, 1, this->m_AmplitudeOutfile ); // //} // //if (this->m_IntensityImageSelected) // //{ // // fwrite( intensityFloatData, this->m_ImageSizeInBytes, 1, this->m_IntensityOutfile ); // //} // //this->m_NumOfFrames++; //} //void ToFImageWriter::OpenPicFile(FILE** outfile,std::string outfileName) //{ // (*outfile) = fopen( outfileName.c_str(), "w+b" ); // if( !outfile ) // if fopen_s was not successful! // { // MITK_ERROR << "Error opening outfile: " << outfileName; // throw std::logic_error("Error opening outfile."); // return; // } //} //void ToFImageWriter::ClosePicFile(FILE* outfile) //{ // if (this->m_NumOfFrames == 0) // { // fclose(outfile); // throw std::logic_error("File is empty."); // return; // } // this->ReplacePicFileHeader(outfile); // fclose(outfile); //} //void ToFImageWriter::ReplacePicFileHeader(FILE* outfile) //{ // mitkIpPicDescriptor* pic = this->m_MitkImage->GetPic(); // if (this->m_ToFImageType == ToFImageWriter::ToFImageType2DPlusT) // { // pic->dim = 4; // pic->n[2] = 1; // pic->n[3] = this->m_NumOfFrames; // } // else // { // pic->dim = 3; // pic->n[2] = this->m_NumOfFrames; // pic->n[3] = 1; // } // fseek ( outfile, 0, SEEK_SET ); // this->WritePicFileHeader( outfile, pic ); //} //void ToFImageWriter::WritePicFileHeader(FILE* outfile, mitkIpPicDescriptor* pic) //{ // mitkIpUInt4_t len; // mitkIpUInt4_t tagsLen; // tagsLen = _mitkIpPicTagsSize( pic->info->tags_head ); // len = tagsLen + 3 * sizeof(mitkIpUInt4_t) + pic->dim * sizeof(mitkIpUInt4_t); // /* write oufile */ // if( mitkIpPicEncryptionType(pic) == ' ' ) // mitkIpPicFWrite( mitkIpPicVERSION, 1, sizeof(mitkIpPicTag_t), outfile ); // else // mitkIpPicFWrite( pic->info->version, 1, sizeof(mitkIpPicTag_t), outfile ); // mitkIpPicFWriteLE( &len, sizeof(mitkIpUInt4_t), 1, outfile ); // mitkIpPicFWriteLE( &(pic->type), sizeof(mitkIpUInt4_t), 1, outfile ); // mitkIpPicFWriteLE( &(pic->bpe), sizeof(mitkIpUInt4_t), 1, outfile ); // mitkIpPicFWriteLE( &(pic->dim), sizeof(mitkIpUInt4_t), 1, outfile ); // mitkIpPicFWriteLE( pic->n, sizeof(mitkIpUInt4_t), pic->dim, outfile ); // _mitkIpPicWriteTags( pic->info->tags_head, outfile, mitkIpPicEncryptionType(pic) ); // pic->info->pixel_start_in_file = ftell( outfile ); //} void ToFImageWriter::CheckForFileExtension(std::string& fileName) { std::string baseFilename = itksys::SystemTools::GetFilenameWithoutLastExtension( fileName ); std::string extension = itksys::SystemTools::GetFilenameLastExtension( fileName ); if( extension.length() != 0 && extension != this->m_Extension) { MITK_ERROR << "Wrong file extension! The default extension is " << this->m_Extension.c_str() << ", currently the requested file extension is " << extension.c_str() <<"!"; this->m_Extension = extension; } size_t found = fileName.find( this->m_Extension ); // !!! HAS to be at the very end of the filename (not somewhere in the middle) if( found == std::string::npos) { fileName.append(this->m_Extension); } } ToFImageWriter::ToFImageType ToFImageWriter::GetToFImageType() { return this->m_ToFImageType; } void ToFImageWriter::SetToFImageType(ToFImageWriter::ToFImageType toFImageType) { this->m_ToFImageType = toFImageType; } } // end namespace mitk diff --git a/Modules/ToFHardware/mitkToFImageWriter.h b/Modules/ToFHardware/mitkToFImageWriter.h index 831521c9f8..7d5ecd039b 100644 --- a/Modules/ToFHardware/mitkToFImageWriter.h +++ b/Modules/ToFHardware/mitkToFImageWriter.h @@ -1,146 +1,124 @@ /*========================================================================= Program: Medical Imaging & Interaction Toolkit Module: $RCSfile$ Language: C++ Date: $Date: 2010-05-27 16:06:53 +0200 (Do, 27 Mai 2010) $ Version: $Revision: $ Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. See MITKCopyright.txt or http://www.mitk.org/copyright.html for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef __mitkToFImageWriter_h #define __mitkToFImageWriter_h #include "mitkToFHardwareExports.h" #include "mitkCommon.h" #include "mitkToFImageGrabber.h" #include "itkObject.h" #include "itkObjectFactory.h" namespace mitk { /** * @brief Writer class for ToF images * * This writer class allows streaming of ToF data into a file. The .pic file format is used for writing the data. * Image information is included in the header of the pic file. * Writer can simultaneously save "distance", "intensity" and "amplitude" image. * Images can be written as 3D volume (ToFImageType::ToFImageType3D) or temporal image stack (ToFImageType::ToFImageType2DPlusT) * * @ingroup ToFHardware */ class MITK_TOFHARDWARE_EXPORT ToFImageWriter : public itk::Object { public: ToFImageWriter(); ~ToFImageWriter(); mitkClassMacro( ToFImageWriter , itk::Object ); itkNewMacro( Self ); itkGetMacro( DistanceImageFileName, std::string ); itkGetMacro( AmplitudeImageFileName, std::string ); itkGetMacro( IntensityImageFileName, std::string ); itkGetMacro( Extension, std::string ); itkGetMacro( CaptureWidth, int ); itkGetMacro( CaptureHeight, int ); itkGetMacro( DistanceImageSelected, bool ); itkGetMacro( AmplitudeImageSelected, bool ); itkGetMacro( IntensityImageSelected, bool ); itkSetMacro( DistanceImageFileName, std::string ); itkSetMacro( AmplitudeImageFileName, std::string ); itkSetMacro( IntensityImageFileName, std::string ); itkSetMacro( Extension, std::string ); itkSetMacro( CaptureWidth, int ); itkSetMacro( CaptureHeight, int ); itkSetMacro( DistanceImageSelected, bool ); itkSetMacro( AmplitudeImageSelected, bool ); itkSetMacro( IntensityImageSelected, bool ); enum ToFImageType{ ToFImageType3D, ToFImageType2DPlusT }; /*! \brief Get the type of image to be written \return ToF image type: ToFImageType3D (0) or ToFImageType2DPlusT (1) */ ToFImageWriter::ToFImageType GetToFImageType(); /*! \brief Set the type of image to be written \param toFImageType type of the ToF image: ToFImageType3D (0) or ToFImageType2DPlusT (1) */ void SetToFImageType(ToFImageWriter::ToFImageType toFImageType); /*! \brief Open file(s) for writing */ virtual void Open(){}; /*! \brief Close file(s) add .pic header and write */ virtual void Close(){}; /*! \brief Add new data to file. */ virtual void Add(float* distanceFloatData, float* amplitudeFloatData, float* intensityFloatData){}; protected: /*! - \brief Checks file name if file extension exists. If not .pic is added to fileName - \param fileName file name to be checked + \brief Checks file name if file extension exists. If not an error message is returned */ void CheckForFileExtension(std::string& fileName); - + + // member variables std::string m_DistanceImageFileName; ///< file name for saving the distance image std::string m_AmplitudeImageFileName; ///< file name for saving the amplitude image std::string m_IntensityImageFileName; ///< file name for saving the intensity image std::string m_Extension; ///< file extension used for saving images int m_CaptureWidth; ///< width (x-dimension) of the images to record. int m_CaptureHeight; ///< height (y-dimension) of the images to record. int m_PixelNumber; ///< number of pixels (widht*height) of the images to record int m_ImageSizeInBytes; ///< size of the image to save in bytes int m_NumOfFrames; ///< number of frames written to the image. Used for pic header. ToFImageWriter::ToFImageType m_ToFImageType; ///< type of image to be recorded: ToFImageType3D (0) or ToFImageType2DPlusT (1) bool m_DistanceImageSelected; ///< flag indicating if distance image should be recorded bool m_AmplitudeImageSelected; ///< flag indicating if amplitude image should be recorded bool m_IntensityImageSelected; ///< flag indicating if intensity image should be recorded - - //Image::Pointer m_MitkImage; ///< mitk image used for pic header creation - //FILE* m_DistanceOutfile; ///< file for distance image - //FILE* m_AmplitudeOutfile; ///< file for amplitude image - //FILE* m_IntensityOutfile; ///< file for intensity image - private: - ///*! - //\brief Open file by filename to gain write access to it. - //*/ - //void OpenPicFile(FILE** outfile, std::string outfileName); - ///*! - //\brief Close file after work on it is finished. - //*/ - //void ClosePicFile(FILE* outfile); - ///*! - //\brief Replace current PicFileHeader information. - //*/ - //void ReplacePicFileHeader(FILE* outfile); - ///*! - //\brief Write image information to the PicFileHeader. - //*/ - //void WritePicFileHeader(FILE* outfile, mitkIpPicDescriptor* pic); }; } //END mitk namespace #endif // __mitkToFImageWriter_h diff --git a/Modules/ToFHardware/mitkToFNrrdImageWriter.cpp b/Modules/ToFHardware/mitkToFNrrdImageWriter.cpp index 9c2a9c9bf6..badccdb338 100644 --- a/Modules/ToFHardware/mitkToFNrrdImageWriter.cpp +++ b/Modules/ToFHardware/mitkToFNrrdImageWriter.cpp @@ -1,251 +1,207 @@ /*========================================================================= Program: Medical Imaging & Interaction Toolkit Module: $RCSfile$ Language: C++ Date: $Date: 2010-05-27 16:06:53 +0200 (Do, 27 Mai 2010) $ Version: $Revision: $ Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. See MITKCopyright.txt or http://www.mitk.org/copyright.html for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ +// mitk includes #include -//#include -#include -//#include // itk includes #include "itksys/SystemTools.hxx" #include "itkNrrdImageIO.h" -//#include "itkImageIOBase.h" namespace mitk { ToFNrrdImageWriter::ToFNrrdImageWriter(): ToFImageWriter(), m_DistanceOutfile(), m_AmplitudeOutfile(), m_IntensityOutfile() { m_Extension = std::string(".nrrd"); } ToFNrrdImageWriter::~ToFNrrdImageWriter() { } void ToFNrrdImageWriter::Open() { this->CheckForFileExtension(this->m_DistanceImageFileName); this->CheckForFileExtension(this->m_AmplitudeImageFileName); this->CheckForFileExtension(this->m_IntensityImageFileName); this->m_PixelNumber = this->m_CaptureWidth * this->m_CaptureHeight; this->m_ImageSizeInBytes = this->m_PixelNumber * sizeof(float); if (this->m_DistanceImageSelected) { this->OpenStreamFile( this->m_DistanceOutfile, this->m_DistanceImageFileName); } if (this->m_AmplitudeImageSelected) { this->OpenStreamFile(this->m_AmplitudeOutfile, this->m_AmplitudeImageFileName); } if (this->m_IntensityImageSelected) { this->OpenStreamFile(this->m_IntensityOutfile, this->m_IntensityImageFileName); } this->m_NumOfFrames = 0; } void ToFNrrdImageWriter::Close() { if (this->m_DistanceImageSelected) { this->CloseStreamFile(this->m_DistanceOutfile, this->m_DistanceImageFileName); } if (this->m_AmplitudeImageSelected) { this->CloseStreamFile(this->m_AmplitudeOutfile, this->m_AmplitudeImageFileName); } if (this->m_IntensityImageSelected) { this->CloseStreamFile(this->m_IntensityOutfile, this->m_IntensityImageFileName); } } - //void ToFNrrdImageWriter::CheckForFileExtension(std::string& fileName) - //{ - // std::string baseFilename = itksys::SystemTools::GetFilenameWithoutLastExtension( fileName ); - // std::string extension = itksys::SystemTools::GetFilenameLastExtension( fileName ); - - // if( extension.length() != 0 && extension != this->m_Extension) - // { - // this->m_Extension = extension; - // } - - // size_t found = fileName.find( this->m_Extension ); // !!! HAS to be at the very end of the filename (not somewhere in the middle) - // if( fileName.length() > 3 && found != fileName.length() - this->m_Extension.length() ) - // { - // fileName.append(this->m_Extension); - // } - //} - void ToFNrrdImageWriter::Add(float* distanceFloatData, float* amplitudeFloatData, float* intensityFloatData) { if (this->m_DistanceImageSelected) { this->m_DistanceOutfile.write( (char*) distanceFloatData, this->m_ImageSizeInBytes); } if (this->m_AmplitudeImageSelected) { this->m_AmplitudeOutfile.write( (char*)amplitudeFloatData, this->m_ImageSizeInBytes); } if (this->m_IntensityImageSelected) { this->m_IntensityOutfile.write(( char* )intensityFloatData, this->m_ImageSizeInBytes); } this->m_NumOfFrames++; } void ToFNrrdImageWriter::OpenStreamFile( std::ofstream &outfile, std::string outfileName ) { outfile.open(outfileName.c_str(), std::ofstream::binary); if(!outfile.is_open()) { MITK_ERROR << "Error opening outfile: " << outfileName; throw std::logic_error("Error opening outfile."); return; } } void ToFNrrdImageWriter::CloseStreamFile( std::ofstream &outfile, std::string fileName ) { if (this->m_NumOfFrames == 0) { outfile.close(); throw std::logic_error("File is empty."); return; } - // flush the last data to the file and convert the stream data to Nrrd file + // flush the last data to the file and convert the stream data to nrrd file outfile.flush(); this->ConvertStreamToNrrdFormat( fileName ); outfile.close(); } void ToFNrrdImageWriter::ConvertStreamToNrrdFormat( std::string fileName ) { float* floatData = new float[this->m_PixelNumber]; for(int i=0; im_PixelNumber; i++) { floatData[i] = i + 0.0; } Image::Pointer imageTemplate = Image::New(); int dimension ; unsigned int* dimensions; if(m_ToFImageType == ToFImageType2DPlusT) { dimension = 4; dimensions = new unsigned int[dimension]; dimensions[0] = this->m_CaptureWidth; dimensions[1] = this->m_CaptureHeight; dimensions[2] = 1; dimensions[3] = this->m_NumOfFrames; } else if( m_ToFImageType == ToFImageType3D) { dimension = 3; dimensions = new unsigned int[dimension]; dimensions[0] = this->m_CaptureWidth; dimensions[1] = this->m_CaptureHeight; dimensions[2] = this->m_NumOfFrames; } else { throw std::logic_error("No image type set, please choose between 2D+t and 3D!"); } imageTemplate->Initialize( PixelType(typeid(float)),dimension, dimensions, 1); imageTemplate->SetSlice(floatData, 0, 0, 0); itk::NrrdImageIO::Pointer nrrdWriter = itk::NrrdImageIO::New(); nrrdWriter->SetNumberOfDimensions(dimension); nrrdWriter->SetPixelTypeInfo(*(imageTemplate->GetPixelType().GetTypeId())); if(imageTemplate->GetPixelType().GetNumberOfComponents() > 1) { nrrdWriter->SetNumberOfComponents(imageTemplate->GetPixelType().GetNumberOfComponents()); } itk::ImageIORegion ioRegion( dimension ); mitk::Vector3D spacing = imageTemplate->GetGeometry()->GetSpacing(); mitk::Point3D origin = imageTemplate->GetGeometry()->GetOrigin(); for(unsigned int i = 0; i < dimension; i++) { nrrdWriter->SetDimensions(i,dimensions[i]); nrrdWriter->SetSpacing(i,spacing[i]); nrrdWriter->SetOrigin(i,origin[i]); mitk::Vector3D direction; direction.Set_vnl_vector(imageTemplate->GetGeometry()->GetIndexToWorldTransform()->GetMatrix().GetVnlMatrix().get_column(i)); vnl_vector< double > axisDirection(dimension); for(unsigned int j = 0; j < dimension; j++) { axisDirection[j] = direction[j]/spacing[i]; } nrrdWriter->SetDirection( i, axisDirection ); ioRegion.SetSize(i, imageTemplate->GetLargestPossibleRegion().GetSize(i) ); ioRegion.SetIndex(i, imageTemplate->GetLargestPossibleRegion().GetIndex(i) ); } nrrdWriter->SetIORegion(ioRegion); nrrdWriter->SetFileName(fileName); nrrdWriter->SetUseStreamedWriting(true); std::ifstream stream(fileName.c_str(), std::ifstream::binary); unsigned int size = this->m_PixelNumber * this->m_NumOfFrames; unsigned int sizeInBytes = size * sizeof(float); float* data = new float[size]; - - //int count = 0; - //while(count < size) - //{ - // data[count] = 0.0f; - // count++; - //} stream.read((char*)data, sizeInBytes); - - //count = 0; - //while(count < size) - //{ - // MITK_INFO<< "data at " << count << " = " << data[count]; - // count++; - //} nrrdWriter->Write(data); stream.close(); delete[] data; delete[] dimensions; delete[] floatData; } - //ToFNrrdImageWriter::ToFImageType ToFNrrdImageWriter::GetToFImageType() - //{ - // return this->m_ToFImageType; - //} - - //void ToFNrrdImageWriter::SetToFImageType(ToFNrrdImageWriter::ToFImageType toFImageType) - //{ - // this->m_ToFImageType = toFImageType; - //} - } // end namespace mitk diff --git a/Modules/ToFHardware/mitkToFNrrdImageWriter.h b/Modules/ToFHardware/mitkToFNrrdImageWriter.h index acdc22eef0..49db648aed 100644 --- a/Modules/ToFHardware/mitkToFNrrdImageWriter.h +++ b/Modules/ToFHardware/mitkToFNrrdImageWriter.h @@ -1,139 +1,79 @@ /*========================================================================= Program: Medical Imaging & Interaction Toolkit Module: $RCSfile$ Language: C++ Date: $Date: 2010-05-27 16:06:53 +0200 (Do, 27 Mai 2010) $ Version: $Revision: $ Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. See MITKCopyright.txt or http://www.mitk.org/copyright.html for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef __mitkToFNrrdImageWriter_h #define __mitkToFNrrdImageWriter_h -//#include "mitkToFHardwareExports.h" -//#include "mitkCommon.h" -//#include "mitkToFImageGrabber.h" +#include "mitkToFHardwareExports.h" #include "mitkToFImageWriter.h" -//#include "itkObject.h" -//#include "itkObjectFactory.h" - namespace mitk { /** - * @brief Writer class for ToF images - * - * This writer class allows streaming of ToF data into a file. The .pic file format is used for writing the data. - * Image information is included in the header of the pic file. + * @brief Writer class for ToF nrrd images + * + * This writer class allows streaming of ToF data into a nrrd file. This class uses the itkNrrdImageIO class * Writer can simultaneously save "distance", "intensity" and "amplitude" image. * Images can be written as 3D volume (ToFImageType::ToFImageType3D) or temporal image stack (ToFImageType::ToFImageType2DPlusT) * * @ingroup ToFHardware */ class MITK_TOFHARDWARE_EXPORT ToFNrrdImageWriter : public ToFImageWriter { public: mitkClassMacro( ToFNrrdImageWriter , ToFImageWriter ); itkNewMacro( Self ); - //itkGetMacro( DistanceImageFileName, std::string ); - //itkGetMacro( AmplitudeImageFileName, std::string ); - //itkGetMacro( IntensityImageFileName, std::string ); - //itkGetMacro( Extension, std::string ); - //itkGetMacro( CaptureWidth, int ); - //itkGetMacro( CaptureHeight, int ); - //itkGetMacro( DistanceImageSelected, bool ); - //itkGetMacro( AmplitudeImageSelected, bool ); - //itkGetMacro( IntensityImageSelected, bool ); - - //itkSetMacro( DistanceImageFileName, std::string ); - //itkSetMacro( AmplitudeImageFileName, std::string ); - //itkSetMacro( IntensityImageFileName, std::string ); - //itkSetMacro( Extension, std::string ); - //itkSetMacro( CaptureWidth, int ); - //itkSetMacro( CaptureHeight, int ); - //itkSetMacro( DistanceImageSelected, bool ); - //itkSetMacro( AmplitudeImageSelected, bool ); - //itkSetMacro( IntensityImageSelected, bool ); - - //enum ToFImageType{ ToFImageType3D, ToFImageType2DPlusT }; - ///*! - //\brief Get the type of image to be written - //\return ToF image type: ToFImageType3D (0) or ToFImageType2DPlusT (1) - //*/ - //ToFNrrdImageWriter::ToFImageType GetToFImageType(); - ///*! - //\brief Set the type of image to be written - //\param toFImageType type of the ToF image: ToFImageType3D (0) or ToFImageType2DPlusT (1) - //*/ - //void SetToFImageType(ToFNrrdImageWriter::ToFImageType toFImageType); /*! \brief Open file(s) for writing */ void Open(); /*! \brief Close file(s) add .pic header and write */ void Close(); /*! \brief Add new data to file. */ void Add(float* distanceFloatData, float* amplitudeFloatData, float* intensityFloatData); protected: - /*! - \brief Checks file name if file extension exists. If not .pic is added to fileName - \param fileName file name to be checked - */ - //void CheckForFileExtension(std::string& fileName); - - //std::string m_DistanceImageFileName; ///< file name for saving the distance image - //std::string m_AmplitudeImageFileName; ///< file name for saving the amplitude image - //std::string m_IntensityImageFileName; ///< file name for saving the intensity image - //std::string m_Extension; ///< file extension used for saving images - - //int m_CaptureWidth; ///< width (x-dimension) of the images to record. - //int m_CaptureHeight; ///< height (y-dimension) of the images to record. - //int m_PixelNumber; ///< number of pixels (widht*height) of the images to record - //int m_ImageSizeInBytes; ///< size of the image to save in bytes - //int m_NumOfFrames; ///< number of frames written to the image. Used for pic header. - //ToFNrrdImageWriter::ToFImageType m_ToFImageType; ///< type of image to be recorded: ToFImageType3D (0) or ToFImageType2DPlusT (1) - - //bool m_DistanceImageSelected; ///< flag indicating if distance image should be recorded - //bool m_AmplitudeImageSelected; ///< flag indicating if amplitude image should be recorded - //bool m_IntensityImageSelected; ///< flag indicating if intensity image should be recorded - - //Image::Pointer m_MitkImage; ///< mitk image used for pic header creation std::ofstream m_DistanceOutfile; ///< file for distance image std::ofstream m_AmplitudeOutfile; ///< file for amplitude image std::ofstream m_IntensityOutfile; ///< file for intensity image private: ToFNrrdImageWriter(); ~ToFNrrdImageWriter(); /*! \brief Open file by filename to gain write access to it. */ void OpenStreamFile(std::ofstream &outfile, std::string outfileName); /*! \brief Close file after work on it is finished. */ void CloseStreamFile(std::ofstream &outfile, std::string fileName); /*! \brief Write image information to the NrrdFile. */ void ConvertStreamToNrrdFormat( std::string fileName ); }; } //END mitk namespace #endif // __mitkToFNrrdImageWriter_h diff --git a/Modules/ToFHardware/mitkToFPicImageWriter.cpp b/Modules/ToFHardware/mitkToFPicImageWriter.cpp index ca5d75584b..cd72a6dcdc 100644 --- a/Modules/ToFHardware/mitkToFPicImageWriter.cpp +++ b/Modules/ToFHardware/mitkToFPicImageWriter.cpp @@ -1,252 +1,198 @@ /*========================================================================= Program: Medical Imaging & Interaction Toolkit Module: $RCSfile$ Language: C++ Date: $Date: 2010-05-27 16:06:53 +0200 (Do, 27 Mai 2010) $ Version: $Revision: $ Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. See MITKCopyright.txt or http://www.mitk.org/copyright.html for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #include #include -#include #include // itk includes #include "itksys/SystemTools.hxx" extern "C" { size_t _mitkIpPicFWrite( const void *ptr, size_t size, size_t nitems, mitkIpPicFile_t stream); } namespace mitk { ToFPicImageWriter::ToFPicImageWriter(): ToFImageWriter(), m_DistanceOutfile(NULL), m_AmplitudeOutfile(NULL), m_IntensityOutfile(NULL) { m_Extension = std::string(".pic"); } ToFPicImageWriter::~ToFPicImageWriter() { } void ToFPicImageWriter::Open() { this->CheckForFileExtension(this->m_DistanceImageFileName); this->CheckForFileExtension(this->m_AmplitudeImageFileName); this->CheckForFileExtension(this->m_IntensityImageFileName); this->m_PixelNumber = this->m_CaptureWidth * this->m_CaptureHeight; this->m_ImageSizeInBytes = this->m_PixelNumber * sizeof(float); float* floatData = new float[this->m_PixelNumber]; for(int i=0; im_PixelNumber; i++) { floatData[i] = i + 0.0; } this->m_MitkImage = Image::New(); unsigned int dimensions[4]; dimensions[0] = this->m_CaptureWidth; dimensions[1] = this->m_CaptureHeight; if (this->m_ToFImageType == ToFImageWriter::ToFImageType2DPlusT) { dimensions[2] = 1; dimensions[3] = 2; this->m_MitkImage->Initialize( PixelType(typeid(float)), 4, dimensions, 1); } else { dimensions[2] = 2; dimensions[3] = 1; this->m_MitkImage->Initialize( PixelType(typeid(float)), 3, dimensions, 1); } this->m_MitkImage->SetSlice(floatData, 0, 0, 0); - - //ImageWriter::Pointer imageWriter = ImageWriter::New(); - // if (this->m_DistanceImageSelected) - // { - // imageWriter->SetFileName(this->m_DistanceImageFileName); - // imageWriter->SetInputImage(); - // imageWriter->SetExtension(this->m_Extension); - // imageWriter->Modified(); - // imageWriter->Update(); - // } - // if (this->m_AmplitudeImageSelected) - // { - // imageWriter->SetFileName(this->m_AmplitudeImageFileName); - // imageWriter->SetInputImage(); - // imageWriter->SetExtension(this->m_Extension); - // imageWriter->Modified(); - // imageWriter->Update(); - // } - // if (this->m_IntensityImageSelected) - // { - // imageWriter->SetFileName(this->m_IntensityImageFileName); - // imageWriter->SetInputImage(); - // imageWriter->SetExtension(this->m_Extension); - // imageWriter->Modified(); - // imageWriter->Update(); - // } - mitkIpPicDescriptor* pic = this->m_MitkImage->GetPic(); if (this->m_DistanceImageSelected) { this->OpenPicFile(&(this->m_DistanceOutfile), this->m_DistanceImageFileName); this->WritePicFileHeader(this->m_DistanceOutfile, pic); } if (this->m_AmplitudeImageSelected) { this->OpenPicFile(&(this->m_AmplitudeOutfile), this->m_AmplitudeImageFileName); this->WritePicFileHeader(this->m_AmplitudeOutfile, pic); } if (this->m_IntensityImageSelected) { this->OpenPicFile(&(this->m_IntensityOutfile), this->m_IntensityImageFileName); this->WritePicFileHeader(this->m_IntensityOutfile, pic); } this->m_NumOfFrames = 0; delete[] floatData; } void ToFPicImageWriter::Close() { if (this->m_DistanceImageSelected) { this->ClosePicFile(this->m_DistanceOutfile); } if (this->m_AmplitudeImageSelected) { this->ClosePicFile(this->m_AmplitudeOutfile); } if (this->m_IntensityImageSelected) { this->ClosePicFile(this->m_IntensityOutfile); } } void ToFPicImageWriter::Add(float* distanceFloatData, float* amplitudeFloatData, float* intensityFloatData) { if (this->m_DistanceImageSelected) { fwrite( distanceFloatData, this->m_ImageSizeInBytes, 1, this->m_DistanceOutfile ); } if (this->m_AmplitudeImageSelected) { fwrite( amplitudeFloatData, this->m_ImageSizeInBytes, 1, this->m_AmplitudeOutfile ); } if (this->m_IntensityImageSelected) { fwrite( intensityFloatData, this->m_ImageSizeInBytes, 1, this->m_IntensityOutfile ); } this->m_NumOfFrames++; } void ToFPicImageWriter::OpenPicFile(FILE** outfile,std::string outfileName) { (*outfile) = fopen( outfileName.c_str(), "w+b" ); if( !outfile ) // if fopen_s was not successful! { MITK_ERROR << "Error opening outfile: " << outfileName; throw std::logic_error("Error opening outfile."); return; } } void ToFPicImageWriter::ClosePicFile(FILE* outfile) { if (this->m_NumOfFrames == 0) { fclose(outfile); throw std::logic_error("File is empty."); return; } this->ReplacePicFileHeader(outfile); fclose(outfile); } void ToFPicImageWriter::ReplacePicFileHeader(FILE* outfile) { mitkIpPicDescriptor* pic = this->m_MitkImage->GetPic(); if (this->m_ToFImageType == ToFImageWriter::ToFImageType2DPlusT) { pic->dim = 4; pic->n[2] = 1; pic->n[3] = this->m_NumOfFrames; } else { pic->dim = 3; pic->n[2] = this->m_NumOfFrames; pic->n[3] = 1; } fseek ( outfile, 0, SEEK_SET ); this->WritePicFileHeader( outfile, pic ); } void ToFPicImageWriter::WritePicFileHeader(FILE* outfile, mitkIpPicDescriptor* pic) { mitkIpUInt4_t len; mitkIpUInt4_t tagsLen; tagsLen = _mitkIpPicTagsSize( pic->info->tags_head ); len = tagsLen + 3 * sizeof(mitkIpUInt4_t) + pic->dim * sizeof(mitkIpUInt4_t); /* write oufile */ if( mitkIpPicEncryptionType(pic) == ' ' ) mitkIpPicFWrite( mitkIpPicVERSION, 1, sizeof(mitkIpPicTag_t), outfile ); else mitkIpPicFWrite( pic->info->version, 1, sizeof(mitkIpPicTag_t), outfile ); mitkIpPicFWriteLE( &len, sizeof(mitkIpUInt4_t), 1, outfile ); mitkIpPicFWriteLE( &(pic->type), sizeof(mitkIpUInt4_t), 1, outfile ); mitkIpPicFWriteLE( &(pic->bpe), sizeof(mitkIpUInt4_t), 1, outfile ); mitkIpPicFWriteLE( &(pic->dim), sizeof(mitkIpUInt4_t), 1, outfile ); mitkIpPicFWriteLE( pic->n, sizeof(mitkIpUInt4_t), pic->dim, outfile ); _mitkIpPicWriteTags( pic->info->tags_head, outfile, mitkIpPicEncryptionType(pic) ); pic->info->pixel_start_in_file = ftell( outfile ); } - //void ToFPicImageWriter::CheckForFileExtension(std::string& fileName) - //{ - // std::string baseFilename = itksys::SystemTools::GetFilenameWithoutLastExtension( fileName ); - // std::string extension = itksys::SystemTools::GetFilenameLastExtension( fileName ); - - // if( extension.length() != 0 && extension != this->m_Extension) - // { - // this->m_Extension = extension; - // } - - // size_t found = fileName.find( this->m_Extension ); // !!! HAS to be at the very end of the filename (not somewhere in the middle) - // if( fileName.length() > this->m_Extension.length() && found != fileName.length() - this->m_Extension.length() ) - // { - // fileName.append(this->m_Extension); - // } - //} - - //ToFPicImageWriter::ToFImageType ToFImageWriter::GetToFImageType() - //{ - // return this->m_ToFImageType; - //} - - //void ToFPicImageWriter::SetToFImageType(ToFImageWriter::ToFImageType toFImageType) - //{ - // this->m_ToFImageType = toFImageType; - //} } // end namespace mitk diff --git a/Modules/ToFHardware/mitkToFPicImageWriter.h b/Modules/ToFHardware/mitkToFPicImageWriter.h index 292bd71866..22afd31b0c 100644 --- a/Modules/ToFHardware/mitkToFPicImageWriter.h +++ b/Modules/ToFHardware/mitkToFPicImageWriter.h @@ -1,147 +1,89 @@ /*========================================================================= Program: Medical Imaging & Interaction Toolkit Module: $RCSfile$ Language: C++ Date: $Date: 2010-05-27 16:06:53 +0200 (Do, 27 Mai 2010) $ Version: $Revision: $ Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. See MITKCopyright.txt or http://www.mitk.org/copyright.html for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef __mitkToFPicImageWriter_h #define __mitkToFPicImageWriter_h #include "mitkToFHardwareExports.h" -#include "mitkCommon.h" -#include "mitkToFImageGrabber.h" #include "mitkToFImageWriter.h" -#include "itkObject.h" -#include "itkObjectFactory.h" - namespace mitk { /** * @brief Writer class for ToF images * * This writer class allows streaming of ToF data into a file. The .pic file format is used for writing the data. * Image information is included in the header of the pic file. * Writer can simultaneously save "distance", "intensity" and "amplitude" image. * Images can be written as 3D volume (ToFImageType::ToFImageType3D) or temporal image stack (ToFImageType::ToFImageType2DPlusT) * * @ingroup ToFHardware */ class MITK_TOFHARDWARE_EXPORT ToFPicImageWriter : public ToFImageWriter { public: ToFPicImageWriter(); ~ToFPicImageWriter(); mitkClassMacro( ToFPicImageWriter , ToFImageWriter ); itkNewMacro( Self ); - //itkGetMacro( DistanceImageFileName, std::string ); - //itkGetMacro( AmplitudeImageFileName, std::string ); - //itkGetMacro( IntensityImageFileName, std::string ); - //itkGetMacro( Extension, std::string ); - //itkGetMacro( CaptureWidth, int ); - //itkGetMacro( CaptureHeight, int ); - //itkGetMacro( DistanceImageSelected, bool ); - //itkGetMacro( AmplitudeImageSelected, bool ); - //itkGetMacro( IntensityImageSelected, bool ); - - //itkSetMacro( DistanceImageFileName, std::string ); - //itkSetMacro( AmplitudeImageFileName, std::string ); - //itkSetMacro( IntensityImageFileName, std::string ); - //itkSetMacro( Extension, std::string ); - //itkSetMacro( CaptureWidth, int ); - //itkSetMacro( CaptureHeight, int ); - //itkSetMacro( DistanceImageSelected, bool ); - //itkSetMacro( AmplitudeImageSelected, bool ); - //itkSetMacro( IntensityImageSelected, bool ); - - //enum ToFImageType{ ToFImageType3D, ToFImageType2DPlusT }; - /*! - \brief Get the type of image to be written - \return ToF image type: ToFImageType3D (0) or ToFImageType2DPlusT (1) - */ - //ToFImageWriter::ToFImageType GetToFImageType(); - /*! - \brief Set the type of image to be written - \param toFImageType type of the ToF image: ToFImageType3D (0) or ToFImageType2DPlusT (1) - */ - //void SetToFImageType(ToFImageWriter::ToFImageType toFImageType); /*! \brief Open file(s) for writing */ void Open(); /*! \brief Close file(s) add .pic header and write */ void Close(); /*! \brief Add new data to file. */ void Add(float* distanceFloatData, float* amplitudeFloatData, float* intensityFloatData); protected: - - /*! - \brief Checks file name if file extension exists. If not .pic is added to fileName - \param fileName file name to be checked - */ - //void CheckForFileExtension(std::string& fileName); - - //std::string m_DistanceImageFileName; ///< file name for saving the distance image - //std::string m_AmplitudeImageFileName; ///< file name for saving the amplitude image - //std::string m_IntensityImageFileName; ///< file name for saving the intensity image - //std::string m_Extension; ///< file extension used for saving images - - //int m_CaptureWidth; ///< width (x-dimension) of the images to record. - //int m_CaptureHeight; ///< height (y-dimension) of the images to record. - //int m_PixelNumber; ///< number of pixels (widht*height) of the images to record - //int m_ImageSizeInBytes; ///< size of the image to save in bytes - //int m_NumOfFrames; ///< number of frames written to the image. Used for pic header. - //ToFImageWriter::ToFImageType m_ToFImageType; ///< type of image to be recorded: ToFImageType3D (0) or ToFImageType2DPlusT (1) - - //bool m_DistanceImageSelected; ///< flag indicating if distance image should be recorded - //bool m_AmplitudeImageSelected; ///< flag indicating if amplitude image should be recorded - //bool m_IntensityImageSelected; ///< flag indicating if intensity image should be recorded Image::Pointer m_MitkImage; ///< mitk image used for pic header creation FILE* m_DistanceOutfile; ///< file for distance image FILE* m_AmplitudeOutfile; ///< file for amplitude image FILE* m_IntensityOutfile; ///< file for intensity image private: /*! \brief Open file by filename to gain write access to it. */ void OpenPicFile(FILE** outfile, std::string outfileName); /*! \brief Close file after work on it is finished. */ void ClosePicFile(FILE* outfile); /*! \brief Replace current PicFileHeader information. */ void ReplacePicFileHeader(FILE* outfile); /*! \brief Write image information to the PicFileHeader. */ void WritePicFileHeader(FILE* outfile, mitkIpPicDescriptor* pic); }; } //END mitk namespace #endif // __mitkToFPicImageWriter_h