[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