[Insight-users] Spatial Objects and the SpatialObjectToImageFilter

Julien Jomier jjomier at cs.unc.edu
Mon May 2 17:49:06 EDT 2005


Hi Dominique,

I think the problem comes from the internal Bounding Box computation.

Can you try to add the following line:

line1->ComputeBoundingBox();

after 	

line1->SetPoints(pointlist);

I'll fix the SpatialObject to recompute the bounding box when the list 
of points is set.

Let us know if that fixes the problem,

Julien

Dominique Belhachemi wrote:
> 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
>>
>>
> 
> #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;
> }
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> Insight-users mailing list
> Insight-users at itk.org
> http://www.itk.org/mailman/listinfo/insight-users



More information about the Insight-users mailing list