[Insight-users] Spatial Objects and the SpatialObjectToImageFilter

Dominique Belhachemi domibel at cs.tu-berlin.de
Mon May 2 18:09:45 EDT 2005


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