[Insight-users] Spatial Objects and the SpatialObjectToImageFilter

Dominique Belhachemi domibel at cs.tu-berlin.de
Mon May 2 17:36:42 EDT 2005


Hi Julien,

i still have the same problem. I am not able to produce an Image of a 
LineSpatialObject.....

Please have a look at my example-source. It should write a LineSpatialObject 
and a EllipseSpatialObject to disk in a jpg-file "2D-Line.jpg".
But i can see only the Ellipse. Where is the failure?

Dominique


----- Original Message ----- 
From: "Julien Jomier" <jjomier at cs.unc.edu>
To: "Dominique Belhachemi" <domibel at cs.tu-berlin.de>
Cc: <insight-users at itk.org>
Sent: Monday, May 02, 2005 5:37 AM
Subject: Re: [Insight-users] Spatial Objects and the 
SpatialObjectToImageFilter


> Hi Dominique,
>
> The IsInside() function is not implemented for the ArrowSpatialObject so 
> the SpatialObjectToImageFilter cannot be used with this object.
>
> However, for Line, Surface and BlobSpatialObject the 
> SpatialObjectToImageFilter should work. As you probably know these objects 
> are composed of points (each point having at least a location plus other 
> parameters). The SpatialObjectToImageFilter will set a bright pixel if at 
> least one point lies inside a pixel.
>
> My guess is that you are not creating the Line/Surface/BlobSpatialObject 
> correctly. You can look at the SoftwareGuide (chapter 5) for more 
> information on how to create these objects.
>
> Let us know if you have further problems,
>
> Julien
>
> Dominique Belhachemi wrote:
>> Hello,
>>
>> after creating a SpatialObject i can produce an Image of this 
>> SpatialObject with the SpatialObjectToImageFilter.
>>
>> This process works fine in the case of CylinderSpatialObject or 
>> EllipseSpatialObjects for example.
>>
>> But this process produces for a few SpatialObjects like
>> - ArrowSpatialObject
>> - LineSpatialObject
>> - SurfaceSpatialObject
>> - BlobSpatialObject
>> only Images with grayvalue zero. (This means the pictures are black)
>>
>>
>> Is this volitional ?
>> How can i solve this problem?
>>
>>
>> Dominique
>> _______________________________________________
>> Insight-users mailing list
>> Insight-users at itk.org
>> http://www.itk.org/mailman/listinfo/insight-users
> 
-------------- next part --------------

#include "itkImage.h"
#include "itkImageFileWriter.h"
#include "itkGroupSpatialObject.h"
#include "itkLineSpatialObject.h"
#include "itkEllipseSpatialObject.h"
#include "itkLineSpatialObjectPoint.h"
#include "itkSpatialObjectToImageFilter.h"
#include "itkRescaleIntensityImageFilter.h"


int main( int argc, char *argv[] )
{
	const int Dimension = 2;
	typedef itk::GroupSpatialObject< Dimension >	GroupType;
	typedef itk::EllipseSpatialObject< Dimension >		EllipseType;
	typedef itk::LineSpatialObject< Dimension >		LineType;
	typedef itk::LineSpatialObjectPoint< Dimension >     LinePointType;
	typedef itk::CovariantVector<double, Dimension >     VectorType;

	typedef itk::Image< double, Dimension >     ImageType;
	typedef itk::Image< unsigned char, Dimension > OutputImageType;
	typedef itk::ImageFileWriter< OutputImageType >     WriterType;
	typedef itk::RescaleIntensityImageFilter< ImageType, OutputImageType >     CastFilterType;
	typedef itk::SpatialObjectToImageFilter< GroupType, ImageType >     SpatialObjectToImageFilterType;


	GroupType::Pointer group = GroupType::New();

	EllipseType::Pointer ellipse1 = EllipseType::New();
	LineType::Pointer line1 = LineType::New();

	group->AddSpatialObject(ellipse1);	// visualisation works
	group->AddSpatialObject(line1);		// visualisation doesnt works

	EllipseType::ArrayType radius;
	radius[0] = 5;
	radius[1] = 10;
	ellipse1->SetRadius(radius);

	LineType::PointListType pointlist;  //STL   std::vector< LinePointType >

	LinePointType p;
	VectorType normal;

	normal[0] = 1;
	normal[1] = 6;
	p.SetNormal(normal,0);
	p.SetPosition(10,10);
	p.SetColor(1, 0, 0, 1);
	pointlist.push_back(p);

	normal[0] = 13;
	normal[1] = 3;
	p.SetNormal(normal,0);
	p.SetPosition(20,20);
	p.SetColor(1, 1, 0, 1);
	pointlist.push_back(p);

	normal[0] = 12;
	normal[1] = 4;
	p.SetNormal(normal,0);
	p.SetPosition(100,100);
	p.SetColor(1, 0, 0, 1);
	pointlist.push_back(p);

	normal[0] = 4;
	normal[1] = 1;
	p.SetNormal(normal,0);
	p.SetPosition(20,200);
	p.SetColor(1, 0, 0, 1);
	pointlist.push_back(p);

	line1->SetPoints(pointlist);
	
	LineType::PointListType::const_iterator it = line1->GetPoints().begin(); 
	while(it != line1->GetPoints().end())
	{
		std::cout << "Position = " << (*it).GetPosition() << std::endl;
		std::cout << "Color = " << (*it).GetColor() << std::endl;
		std::cout << "First normal = " << (*it).GetNormal(0) << std::endl;
		std::cout << std::endl;
		it++;
	}

	EllipseType::TransformType::OffsetType offset;
	offset[0] = 40.0;
	offset[1] = 40.0;
	ellipse1->GetObjectToParentTransform()->SetOffset(offset);
	ellipse1->ComputeObjectToWorldTransform();

	SpatialObjectToImageFilterType::Pointer imageFilter = SpatialObjectToImageFilterType::New();
	imageFilter->SetInput( group );
	ImageType::SizeType size;
	size[ 0 ] = 128;
	size[ 1 ] = 128;
	imageFilter->SetSize( size );
	imageFilter->Update();

	CastFilterType::Pointer castFilter = CastFilterType::New();
	castFilter->SetOutputMinimum( 0 );
	castFilter->SetOutputMaximum( 255 );
	castFilter->SetInput( imageFilter->GetOutput() );

	WriterType::Pointer writer = WriterType::New();
	writer->SetFileName( "2D-Line.jpg" );
	writer->SetInput( castFilter->GetOutput() );
	try 
	{
		writer->Update(); 
	}
	catch( itk::ExceptionObject & err ) 
	{
		std::cout << "ExceptionObject caught !" << std::endl; 
		std::cout << err << std::endl; 
		return -1;
	}

	return 0;
}


More information about the Insight-users mailing list