[vtkusers] Inclusiveness of Rasterization

Bryan Cool bryan at radialogica.com
Mon Jul 14 16:15:14 EDT 2014


Thanks for the suggestion and apologies for the delay, David.  Are you sure
that a tolerance of 0.5 should be enough?  Wouldn't a lower end contour
intersecting a pixel .75 of the way across still be missed with 0.5, since
{floor(.75 - .5) + 1} is 1?

 

I tried tolerance values of 0.5 and 1.0 but unfortunately got the infamous
streaking artifacts with both, so now I'm keeping the default tolerance and
instead piping the output stencil image data through
vtkImageContinuousDilate3D with a kernel size of (3,3,1).  That seems to
give me the coverage I'm looking for without any artifacts.

 

Thanks again,

Bryan

 

From: David Gobbi [mailto:david.gobbi at gmail.com] 
Sent: Wednesday, July 2, 2014 4:17 PM
To: Bryan Cool
Cc: VTK Users
Subject: Re: [vtkusers] Inclusiveness of Rasterization

 

Have you tried adjusting the Tolerance on vtkPolyDataToImageStencil?

You can try setting it to a large value like 0.5, which gives half a pixel

in tolerance.  That should guarantee that the contour is fully inside of

the result.

 

  David

 

On Wed, Jul 2, 2014 at 2:46 PM, Bryan Cool <bryan at radialogica.com
<mailto:bryan at radialogica.com> > wrote:

Thanks for the quick reply, David.  You're right: I'm in need of inclusivity
on both ends.  I'm voxelizing contours using vtkPolyDataToImageStencil and I
want to ensure that the resulting stencil fully encapsulates the contours.
Are there any tricks to compensate that wouldn't require me to modify my
points directly?  I guess I could just dilate my result, but it would be
nice to have it as tight around the contours as possible.

 

Thanks,

Bryan

 

From: David Gobbi [mailto:david.gobbi at gmail.com
<mailto:david.gobbi at gmail.com> ] 
Sent: Wednesday, July 2, 2014 2:50 PM
To: Bryan Cool
Cc: VTK Users
Subject: Re: [vtkusers] Inclusiveness of Rasterization

 

Hi Bryan,

 

Do you mean inclusive on both ends?  Exclusive on both ends would

just make it worse...

 

The behavior of the rasterization is 100% intentional.  In order for

rasterization to work when there are adjacent areas that are being

rasterized, it must be exclusive on one end and inclusive on the

other end.  Otherwise, adjacent areas could end up with either a

gap between them or with an overlap.

 

The exclusitivity can be compensated for by subtracting a small

tolerance at the lower end or by using other tricks.

 

What is your use case?

 

  - David

 

 

On Wed, Jul 2, 2014 at 1:18 PM, Bryan Cool <bryan at radialogica.com
<mailto:bryan at radialogica.com> > wrote:

Hi everyone,

I noticed that vtkImageStencilRaster has code like the following in
InsertLine and FillStencilData, for both the x and y directions:

if (x1 >= xmin)
     {
     r1 = vtkMath::Floor(x1) + 1;
     }
if (x2 < xmax)
     {
     r2 = vtkMath::Floor(x2);
     }

Correct me if I'm wrong, but it looks like the lower side is exclusive,
while the upper end is inclusive.  The upshot of this is that the only way
to stencil the first pixel is to have a line intersect the row on the
negative side of the first pixel (in the extents).  On the other hand, to
stencil the last pixel a line only need intersect anywhere past the
second-to-last pixel (in the extents).

Assuming that's true, it seems a bit asymmetric.  Is there any way to have
exclusive behavior on both ends?

Thanks,
Bryan

 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/vtkusers/attachments/20140714/713026e6/attachment.html>


More information about the vtkusers mailing list