Page MenuHomePhabricator

Modules_MintMITKTesting_mitkLevelWindowReferenceImageTest.cpp

Authored By
kilgus
Nov 16 2011, 4:18 PM
Size
8 KB
Referenced Files
None
Subscribers
None

Modules_MintMITKTesting_mitkLevelWindowReferenceImageTest.cpp

/*=========================================================================
Program: Medical Imaging & Interaction Toolkit
Language: C++
Date: $Date: 2010-07-30 14:42:32 +0200 (Fr, 30 Jul 2010) $
Version: $Revision: 24988 $
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 <mitkImage.h>
#include <mitkImageWriter.h>
#include <mitkTestingMacros.h>
class mitkLevelWindowReferenceImageTestClass { public:
/**
fill pixels from (startX, startY) to (endX, endY), including the endX,endY row/column
*/
static void fillImage(signed short startX, signed short endX,
signed short startY, signed short endY,
signed short value, signed short *imagePointer, signed short column)
{
signed short x;
signed short y;
for(x = startX; x <= endX; x++ )
{
for(y = startY; y <= endY; y++)
imagePointer[y*column+x] = value;
}
}
static void setPoint(signed short startX, signed short endX,
signed short startY, signed short endY,
signed short value, signed short *imagePointer, signed short column)
{
//put one point with value in the middle of the rectangle
signed short centerX = (endX-startX)/2 + startX;
signed short centerY = (endY-startY)/2 + startY;
imagePointer[centerY*column+centerX] = value;
}
static void createVerticalLine(signed short startX,signed short startY, int pixelnumber, signed short *p, signed short column)
{
mitkLevelWindowReferenceImageTestClass::fillImage(startX, startX, startY, startY+pixelnumber-1, 2000, p, column);
}
static void createDiagonalLine(signed short startX,signed short startY, int pixelnumber, signed short *p, signed short column)
{
signed short i;
for (i=0; i < pixelnumber; i++)
mitkLevelWindowReferenceImageTestClass::fillImage(startX+i, startX+i, startY+i, startY+i, 2000, p, column);
}
};
int mitkLevelWindowReferenceImageTest(int /*argc*/, char* /*argv*/[])
{
MITK_TEST_BEGIN(mitkLevelWindowReferenceImageTest);
//Create Image out of nowhere
mitk::Image::Pointer imgMem;
mitk::PixelType pt(typeid(signed short));
unsigned int dim[]={512,512,1};
std::cout << "Testing creation of Image: ";
imgMem=mitk::Image::New();
if(imgMem.IsNull())
{
std::cout<<"[FAILED]"<<std::endl;
return EXIT_FAILURE;
}
std::cout<<"[PASSED]"<<std::endl;
std::cout << "Testing Initialize(const mitk::PixelType& type, unsigned int dimension, unsigned int *dimensions): ";
imgMem->Initialize(mitk::PixelType(typeid(signed short)), 3, dim);
std::cout<<"[PASSED]"<<std::endl;
mitk::Vector3D spacing = (0.75,0.5,0.3);
imgMem->GetGeometry()->SetSpacing(spacing);
std::cout << "Testing IsInitialized(): ";
if(imgMem->IsInitialized()==false)
{
std::cout<<"[FAILED]"<<std::endl;
return EXIT_FAILURE;
}
std::cout<<"[PASSED]"<<std::endl;
std::cout << "Testing GetData(): ";
signed short *p = (signed short*)imgMem->GetData();
if(p==NULL)
{
std::cout<<"[FAILED]"<<std::endl;
return EXIT_FAILURE;
}
std::cout<<"[PASSED]"<<std::endl;
std::cout << "Filling image: ";
//fill background with -1000
mitkLevelWindowReferenceImageTestClass::fillImage(0, dim[0]-1, 0, dim[1]-1, -1000, p, dim[0]);
//create rectangles with different values
mitkLevelWindowReferenceImageTestClass::fillImage(10, (dim[0]/4), 0, dim[1]/10, -800, p, dim[0]);
mitkLevelWindowReferenceImageTestClass::fillImage(10, (dim[0]/4), (dim[1]/10)+3, (dim[1]*2/10), -500, p, dim[0]);
mitkLevelWindowReferenceImageTestClass::fillImage(10, (dim[0]/4), (dim[1]*2/10)+3, (dim[1]*3/10), -100, p, dim[0]);
mitkLevelWindowReferenceImageTestClass::fillImage(10, (dim[0]/4), (dim[1]*3/10)+3, (dim[1]*4/10), 100, p, dim[0]);
mitkLevelWindowReferenceImageTestClass::fillImage(10, (dim[0]/4), (dim[1]*4/10)+3, (dim[1]*5/10), 500, p, dim[0]);
mitkLevelWindowReferenceImageTestClass::fillImage(10, (dim[0]/4), (dim[1]*5/10)+3, (dim[1]*6/10), 1000, p, dim[0]);
mitkLevelWindowReferenceImageTestClass::fillImage(10, (dim[0]/4), (dim[1]*6/10)+3, (dim[1]*7/10), 1500, p, dim[0]);
mitkLevelWindowReferenceImageTestClass::fillImage(10, (dim[0]/4), (dim[1]*7/10)+3, (dim[1]*8/10), 2000, p, dim[0]);
mitkLevelWindowReferenceImageTestClass::fillImage(10, (dim[0]/4), (dim[1]*8/10)+3, (dim[1]*9/10), 2500, p, dim[0]);
mitkLevelWindowReferenceImageTestClass::fillImage(10, (dim[0]/4), (dim[1]*9/10)+3, (dim[1]-1), 3000, p, dim[0]);
//set one point in the middle of the rectangle
mitkLevelWindowReferenceImageTestClass::setPoint(10, (dim[0]/4), 0, dim[1]/10, 3000, p, dim[0]);
mitkLevelWindowReferenceImageTestClass::setPoint(10, (dim[0]/4), (dim[1]/10)+3, (dim[1]*2/10), 3000, p, dim[0]);
mitkLevelWindowReferenceImageTestClass::setPoint(10, (dim[0]/4), (dim[1]*2/10)+3, (dim[1]*3/10), 3000, p, dim[0]);
mitkLevelWindowReferenceImageTestClass::setPoint(10, (dim[0]/4), (dim[1]*3/10)+3, (dim[1]*4/10), 3000, p, dim[0]);
mitkLevelWindowReferenceImageTestClass::setPoint(10, (dim[0]/4), (dim[1]*4/10)+3, (dim[1]*5/10), 3000, p, dim[0]);
mitkLevelWindowReferenceImageTestClass::setPoint(10, (dim[0]/4), (dim[1]*5/10)+3, (dim[1]*6/10), 3000, p, dim[0]);
mitkLevelWindowReferenceImageTestClass::setPoint(10, (dim[0]/4), (dim[1]*6/10)+3, (dim[1]*7/10), 3000, p, dim[0]);
mitkLevelWindowReferenceImageTestClass::setPoint(10, (dim[0]/4), (dim[1]*7/10)+3, (dim[1]*8/10), 3000, p, dim[0]);
mitkLevelWindowReferenceImageTestClass::setPoint(10, (dim[0]/4), (dim[1]*8/10)+3, (dim[1]*9/10), 3000, p, dim[0]);
mitkLevelWindowReferenceImageTestClass::setPoint(10, (dim[0]/4), (dim[1]*9/10)+3, (dim[1]-1), 3000, p, dim[0]);
//create one rectangle with gradient from -1000 to +3000
signed short r;
signed short ydirectionCounter = 0;
float min = -1000;
float max = 3000;
float pixelSize = (float)dim[1]-1;
for (r = 0; r<= pixelSize ; r++)
{
signed short value = min + ((max-min)*((float)r/pixelSize));
mitkLevelWindowReferenceImageTestClass::fillImage( dim[0]/3, dim[0]/2, ydirectionCounter, ydirectionCounter+1, value, p, dim[0]);
ydirectionCounter++;
}
mitkLevelWindowReferenceImageTestClass::setPoint(dim[0]/3, dim[0]/2, (dim[1]*4/10)+3, (dim[1]*5/10), 3000, p, dim[0]);
//create one line with pixel number 100 vertical/ length = 0.75 * 100 = 75mm
mitkLevelWindowReferenceImageTestClass::createVerticalLine( 400, 10, 100, p, dim[0]);
//create one line with pixel number 400 vertical/ length = 0.75 * 400 = 300mm
mitkLevelWindowReferenceImageTestClass::createVerticalLine( 440, 10, 400, p, dim[0]);
//create one line with pixel number 180 diagnonal/ length = sqrt((0,75*180)^2 + (0,5*180)^2) = 162,3mm
mitkLevelWindowReferenceImageTestClass::createDiagonalLine( 260, 260, 180, p, dim[0]);
//create one line with pixel number 60 horizontal/ length = 0.5 * 60 = 30mm
mitkLevelWindowReferenceImageTestClass::fillImage( 260, 260+60-1, 500, 500, 2000, p, dim[0]);
//create square - length diagonal = sqrt((90*0.75)^2 + (70*0.5)^2 = 76,0345mm
mitkLevelWindowReferenceImageTestClass::fillImage( 260, 260+70-1, 10, 10+90-1, 2000, p, dim[0]);
mitkLevelWindowReferenceImageTestClass::fillImage( 261, 260+70-2, 11, 10+90-2, -1000, p, dim[0]);
std::cout<<"[PASSED]"<<std::endl;
std::cout << "store image ";
std::string fileName = "/home/maleike/mbifs/lwreference.dcm";
try
{
mitk::ImageWriter::Pointer writer = mitk::ImageWriter::New();
writer->SetFileName( fileName );
writer->SetExtension(".dcm");
writer->SetInput( imgMem );
writer->Write();
}
catch (std::exception& /*e*/)
{
std::cout<<"[FAILED]"<<std::endl;
return EXIT_FAILURE;
}
std::cout<<"[PASSED]"<<std::endl;
MITK_TEST_END();
return EXIT_SUCCESS;
}

File Metadata

Mime Type
text/x-c++src
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
724
Default Alt Text
Modules_MintMITKTesting_mitkLevelWindowReferenceImageTest.cpp (8 KB)

Event Timeline