<div dir="ltr"><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small">More efficient would be to construct a closed (capped) polygonal cylinder, transform it into binary mask (<a href="http://www.itk.org/Doxygen/html/classitk_1_1TriangleMeshToBinaryImageFilter.html" style="font-family:arial">http://www.itk.org/Doxygen/html/classitk_1_1TriangleMeshToBinaryImageFilter.html</a> or its VTK equivalent) and then iterate that mask (some subregion, like you already do) and check mask's intensity. 0=outside, 1=inside, 0<x<1=>edge</div>
<div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small">Here is an example conversion:</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small">
<br></div><div class="gmail_default"><div class="gmail_default"><font face="verdana, sans-serif">////voxelization using ITK implementation (bugged)</font></div><div class="gmail_default"><font face="verdana, sans-serif">//VisualizingImageType::Pointer getMask()</font></div>
<div class="gmail_default"><font face="verdana, sans-serif">//{</font></div><div class="gmail_default"><font face="verdana, sans-serif">// MeshType::Pointer mesh=makeCylinder();</font></div><div class="gmail_default">
<font face="verdana, sans-serif">// typedef itk::TriangleMeshToBinaryImageFilter<MeshType,VisualizingImageType> MeshFilterType;</font></div>
<div class="gmail_default"><font face="verdana, sans-serif">// MeshFilterType::Pointer meshFilter = MeshFilterType::New();</font></div><div class="gmail_default"><font face="verdana, sans-serif">// meshFilter->SetInfoImage(visualizingImage);</font></div>
<div class="gmail_default"><font face="verdana, sans-serif">// meshFilter->SetInput(mesh);</font></div><div class="gmail_default"><font face="verdana, sans-serif">// meshFilter->Update();</font></div><div class="gmail_default">
<font face="verdana, sans-serif">// mask=meshFilter->GetOutput();</font></div><div class="gmail_default"><font face="verdana, sans-serif">// return mask;</font></div><div class="gmail_default"><font face="verdana, sans-serif">//}</font></div>
<div class="gmail_default"><font face="verdana, sans-serif"><br></font></div><div class="gmail_default"><font face="verdana, sans-serif">////voxelization using VTK implementation (workaround)</font></div><div class="gmail_default">
<font face="verdana, sans-serif">VisualizingImageType::Pointer getMaskFromImageInformation(</font></div><div class="gmail_default"><font face="verdana, sans-serif"> VisualizingImageType::RegionType region,</font></div>
<div class="gmail_default"><font face="verdana, sans-serif"> VisualizingImageType::SpacingType spacing,</font></div><div class="gmail_default"><font face="verdana, sans-serif"> VisualizingImageType::PointType origin,</font></div>
<div class="gmail_default"><font face="verdana, sans-serif"> VisualizingImageType::DirectionType direction)</font></div><div class="gmail_default"><font face="verdana, sans-serif">{</font></div>
<div class="gmail_default"><font face="verdana, sans-serif"> VisualizingImageType::Pointer whiteITK=VisualizingImageType::New();</font></div><div class="gmail_default"><font face="verdana, sans-serif"> whiteITK->SetRegions(region);</font></div>
<div class="gmail_default"><font face="verdana, sans-serif"> whiteITK->Allocate();</font></div><div class="gmail_default"><font face="verdana, sans-serif"> whiteITK->FillBuffer(1);</font></div><div class="gmail_default">
<font face="verdana, sans-serif"><br></font></div><div class="gmail_default"><font face="verdana, sans-serif"> typedef itk::ImageToVTKImageFilter<VisualizingImageType> itkVtkConverter;</font></div><div class="gmail_default">
<font face="verdana, sans-serif"> itkVtkConverter::Pointer conv=itkVtkConverter::New();</font></div><div class="gmail_default"><font face="verdana, sans-serif"> conv->SetInput(whiteITK);</font></div><div class="gmail_default">
<font face="verdana, sans-serif"> conv->Update();</font></div><div class="gmail_default"><font face="verdana, sans-serif"> vtkSmartPointer<vtkImageData> whiteVTK=conv->GetOutput();</font></div><div class="gmail_default">
<font face="verdana, sans-serif"><br></font></div><div class="gmail_default"><font face="verdana, sans-serif"> vtkSmartPointer<vtkPolyData> poly=makeCylinder();</font></div><div class="gmail_default"><font face="verdana, sans-serif"><br>
</font></div><div class="gmail_default"><font face="verdana, sans-serif"> vtkSmartPointer<vtkMatrix4x4> Mitk=vtkSmartPointer<vtkMatrix4x4>::New();</font></div><div class="gmail_default"><font face="verdana, sans-serif"> for (int i=0; i<3; i++)</font></div>
<div class="gmail_default"><font face="verdana, sans-serif"> for (int k=0; k<3; k++)</font></div><div class="gmail_default"><font face="verdana, sans-serif"> Mitk->SetElement(i,k, direction(i,k));</font></div>
<div class="gmail_default"><font face="verdana, sans-serif"><br></font></div><div class="gmail_default"><font face="verdana, sans-serif"> vtkSmartPointer<vtkMatrix4x4> Ms=vtkSmartPointer<vtkMatrix4x4>::New();</font></div>
<div class="gmail_default"><font face="verdana, sans-serif"> Ms->SetElement(0,0,spacing[0]);</font></div><div class="gmail_default"><font face="verdana, sans-serif"> Ms->SetElement(1,1,spacing[1]);</font></div>
<div class="gmail_default"><font face="verdana, sans-serif"> Ms->SetElement(2,2,spacing[2]);</font></div><div class="gmail_default"><font face="verdana, sans-serif"><br></font></div><div class="gmail_default"><font face="verdana, sans-serif"> vtkMatrix4x4::Multiply4x4(Mitk,Ms,Mitk);</font></div>
<div class="gmail_default"><font face="verdana, sans-serif"> for (int i=0; i<3; i++)</font></div><div class="gmail_default"><font face="verdana, sans-serif"> Mitk->SetElement(i,3, origin[i]);</font></div>
<div class="gmail_default">
<font face="verdana, sans-serif"> Mitk->Invert();</font></div><div class="gmail_default"><font face="verdana, sans-serif"><br></font></div><div class="gmail_default"><font face="verdana, sans-serif"> vtkSmartPointer<vtkTransform> t=vtkSmartPointer<vtkTransform>::New();</font></div>
<div class="gmail_default"><font face="verdana, sans-serif"> t->SetMatrix(Mitk);</font></div><div class="gmail_default"><font face="verdana, sans-serif"> vtkSmartPointer<vtkTransformFilter> tf=vtkSmartPointer<vtkTransformFilter>::New();</font></div>
<div class="gmail_default"><font face="verdana, sans-serif"> tf->SetInputData(poly);</font></div><div class="gmail_default"><font face="verdana, sans-serif"> tf->SetTransform(t);</font></div><div class="gmail_default">
<font face="verdana, sans-serif"> tf->Update();</font></div><div class="gmail_default"><font face="verdana, sans-serif"> poly->SetPoints(tf->GetOutput()->GetPoints());</font></div><div class="gmail_default">
<font face="verdana, sans-serif"><br></font></div><div class="gmail_default"><font face="verdana, sans-serif"> vtkSmartPointer<vtkPolyDataToImageStencil> voxelizer =</font></div><div class="gmail_default"><font face="verdana, sans-serif"> vtkSmartPointer<vtkPolyDataToImageStencil>::New();</font></div>
<div class="gmail_default"><font face="verdana, sans-serif"> voxelizer->SetInputData(poly);</font></div><div class="gmail_default"><font face="verdana, sans-serif"> voxelizer->SetOutputWholeExtent(whiteVTK->GetExtent());</font></div>
<div class="gmail_default"><font face="verdana, sans-serif"> voxelizer->Update();</font></div><div class="gmail_default"><font face="verdana, sans-serif"><br></font></div><div class="gmail_default"><font face="verdana, sans-serif"> vtkImageStencil *stencil=vtkImageStencil::New(); //crashes with smart pointer</font></div>
<div class="gmail_default"><font face="verdana, sans-serif"> //vtkSmartPointer<vtkImageStencil> stencil=vtkSmartPointer<vtkImageStencil>::New();</font></div><div class="gmail_default"><font face="verdana, sans-serif"> stencil->SetInputData(conv->GetOutput());</font></div>
<div class="gmail_default"><font face="verdana, sans-serif"> stencil->SetStencilConnection(voxelizer->GetOutputPort());</font></div><div class="gmail_default"><font face="verdana, sans-serif"> stencil->SetBackgroundValue(0);</font></div>
<div class="gmail_default"><font face="verdana, sans-serif"> stencil->Update();</font></div><div class="gmail_default"><font face="verdana, sans-serif"> whiteVTK=stencil->GetOutput();</font></div><div class="gmail_default">
<font face="verdana, sans-serif"><br></font></div><div class="gmail_default"><font face="verdana, sans-serif"> typedef itk::VTKImageToImageFilter<VisualizingImageType> vtk2itkConverter;</font></div><div class="gmail_default">
<font face="verdana, sans-serif"> vtk2itkConverter::Pointer conv2=vtk2itkConverter::New();</font></div><div class="gmail_default"><font face="verdana, sans-serif"> conv2->SetInput(whiteVTK);</font></div><div class="gmail_default">
<font face="verdana, sans-serif"> conv2->Update();</font></div><div class="gmail_default"><font face="verdana, sans-serif"> mask=conv2->GetOutput();</font></div><div class="gmail_default"><font face="verdana, sans-serif"> mask->DisconnectPipeline();</font></div>
<div class="gmail_default"><font face="verdana, sans-serif"> mask->SetDirection(direction);</font></div><div class="gmail_default"><font face="verdana, sans-serif"> mask->SetSpacing(spacing);</font></div><div class="gmail_default">
<font face="verdana, sans-serif"> mask->SetOrigin(origin);</font></div><div class="gmail_default"><font face="verdana, sans-serif"> return mask;</font></div><div class="gmail_default"><font face="verdana, sans-serif">}</font></div>
</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Aug 1, 2013 at 12:09 PM, Arindam Bhattacharya <span dir="ltr"><<a href="mailto:arindamb86@gmail.com" target="_blank">arindamb86@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">hello all, <div>Given a 3D scalar volume.</div><div>A particular grid point say P</div><div>A direction say V1 ( a unit vector)</div>
<div>A direction say V2 ( an orthogonal unit vector to v1)<br></div><div>
<br></div><div>I wish to find all grid points which are within a 'cylinder' defined by the point P the direction V1 </div><div>a length L and a breadth B along v2</div><div><br></div><div>I have added a <a href="https://dl.dropboxusercontent.com/u/2989703/Note%20Aug%201%2C%202013.pdf" target="_blank">link </a> to show how it might look in 2D </div>
<div><div><br></div><div>i am currently doing this by first finding all the neighbors of the point P in a region RxRxR</div><div>and going through each point and finding the projection on the normal given by V1</div><div>
and the orthogonal plane given by v2 which is very slow, </div><div>is there a faster approach ?</div><div><br></div><div>thanks</div><span class="HOEnZb"><font color="#888888">-- <br><div dir="ltr">Arindam Bhattacharya<br>
Graduate Student<br><div><br></div></div>
</font></span></div></div>
<br>_____________________________________<br>
Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
<br>
Visit other Kitware open-source projects at<br>
<a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
<br>
Kitware offers ITK Training Courses, for more information visit:<br>
<a href="http://www.kitware.com/products/protraining.php" target="_blank">http://www.kitware.com/products/protraining.php</a><br>
<br>
Please keep messages on-topic and check the ITK FAQ at:<br>
<a href="http://www.itk.org/Wiki/ITK_FAQ" target="_blank">http://www.itk.org/Wiki/ITK_FAQ</a><br>
<br>
Follow this link to subscribe/unsubscribe:<br>
<a href="http://www.itk.org/mailman/listinfo/insight-users" target="_blank">http://www.itk.org/mailman/listinfo/insight-users</a><br>
<br></blockquote></div><br></div>