[Insight-users] Spatial Objects and the SpatialObjectToImageFilter

Julien Jomier jjomier at cs.unc.edu
Mon May 2 18:15:20 EDT 2005


Dominique,

The itkLineSpatialObject is actually a polyline so it's defined by a set 
of points and not only the two end points. You need to do a loop to fill 
in the gap between the two end points manually.

Julien

Dominique Belhachemi wrote:
> Hi Julien,
> 
> now i can see the endpoints of the line.
> This is good, but the line between the endpoints are still black.
> 
> Thx 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 11:49 PM
> Subject: Re: [Insight-users] Spatial Objects and the 
> SpatialObjectToImageFilter
> 
> 
>> 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