<div dir="ltr"><div><div><div>Hi David,<br>Thanks for the reply. In that case I would need to render the image to the window and set the camera origin and direction to point to the image then save that to a file? <br><br>
</div>I have been trying with the vtkProbefilter to extract the image that I want. I am using the same plane origin and normal as before. <br><br><br> vtkSmartPointer<vtkPlaneSource> PlaneSource = vtkSmartPointer<vtkPlaneSource>::New();<br>
PlaneSource->SetCenter(testpoint2);<br> PlaneSource->SetNormal(normal2);<br><br> vtkPolyData *Plane = PlaneSource -> GetOutput();<br><br> vtkProbeFilter *Probe = vtkProbeFilter::New();<br>
<br> Probe->SetInput(Plane);<br> Probe->SetSource(reader->GetOutput());<br> //Probe->SetInputConnection(reader->GetOutputPort);<br> Probe->SpatialMatchOn();<br> Probe->Update();<br>
<br></div>However, with this method it seems I can only seem to be able to save a vtkpolydata file of the plane. Is it possible to use the vtkProbeFilter to obtain a slice of an image volume? <br><br></div><div>Many thanks,<br>
</div><div>Jesse<br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Dec 4, 2013 at 2:44 PM, David Gobbi <span dir="ltr"><<a href="mailto:david.gobbi@gmail.com" target="_blank">david.gobbi@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Jessie,<br>
<br>
The vtkImageResliceMapper just draws the slice to the screen, it does<br>
not produce it as a output on its output port. So the following line<br>
of code will not work:<br>
<br>
writer->SetInputConnection(im->GetOutputPort());<br>
<br>
The only way to get the image from vtkImageResliceMapper is to capture<br>
the contents of the render window, with vtkWindowToImageFilter.<br>
<span class="HOEnZb"><font color="#888888"><br>
David<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
<br>
On Wed, Dec 4, 2013 at 1:43 AM, Jesse Ross-Jones <<a href="mailto:jesse.rj@gmail.com">jesse.rj@gmail.com</a>> wrote:<br>
> Dear VTKrs<br>
><br>
> I am trying to extract a single slice from an image volume and write the<br>
> image to a file.<br>
><br>
> I have found and example using vtkImageResliceMapper and I have modified it<br>
> below. However I am unable to properly save the image.<br>
><br>
> Suggestions for how to save the single image and the volume with only the<br>
> single image slice much appreciated!<br>
><br>
> Many thanks,<br>
> Jesse<br>
><br>
><br>
> int main(int argc, char *argv[])<br>
> {<br>
> if (argc < 3) {<br>
> cout << "Usage: " << argv[0] << " Input_Image " <<<br>
> "Output_Image"<< endl;<br>
> return EXIT_FAILURE;<br>
> }<br>
><br>
> vtkSmartPointer<vtkRenderer> aRenderer =<br>
> vtkSmartPointer<vtkRenderer>::New();<br>
> vtkSmartPointer<vtkRenderWindow> renWin =<br>
> vtkSmartPointer<vtkRenderWindow>::New();<br>
> renWin->AddRenderer(aRenderer);<br>
> vtkSmartPointer<vtkRenderWindowInteractor> iren =<br>
> vtkSmartPointer<vtkRenderWindowInteractor>::New();<br>
> iren->SetRenderWindow(renWin);<br>
><br>
> vtkSmartPointer<vtkXMLImageDataReader> reader =<br>
> vtkSmartPointer<vtkXMLImageDataReader>::New();<br>
> reader->SetFileName(argv[1]);<br>
> reader->Update();<br>
><br>
> aRenderer->SetBackground(.2, .3, .4);<br>
> renWin->SetSize(640, 480);<br>
><br>
><br>
> // outline provides context around the data.<br>
> vtkSmartPointer<vtkOutlineFilter> outlineData =<br>
> vtkSmartPointer<vtkOutlineFilter>::New();<br>
> outlineData->SetInputConnection(reader->GetOutputPort());<br>
> outlineData->Update();<br>
><br>
> vtkSmartPointer<vtkPolyDataMapper> mapOutline =<br>
> vtkSmartPointer<vtkPolyDataMapper>::New();<br>
> mapOutline->SetInputConnection(outlineData->GetOutputPort());<br>
><br>
> vtkSmartPointer<vtkActor> outline =<br>
> vtkSmartPointer<vtkActor>::New();<br>
> outline->SetMapper(mapOutline);<br>
> outline->GetProperty()->SetColor(0,0,0);<br>
><br>
> // Setting of vtkImageResliceMapper<br>
> vtkSmartPointer<vtkImageResliceMapper> im =<br>
> vtkSmartPointer<vtkImageResliceMapper>::New();<br>
> im->SetInputConnection(reader->GetOutputPort());<br>
> //im->SliceFacesCameraOn();<br>
> //im->SliceAtFocalPointOn();<br>
> im->BorderOff();<br>
><br>
> vtkSmartPointer<vtkPlane> slicePlane =<br>
> vtkSmartPointer<vtkPlane>::New();<br>
><br>
> double testpoint[3];<br>
> testpoint[0] = 49.72023;<br>
> testpoint[1] = 94.96884;<br>
> testpoint[2] = 24.4359779;<br>
><br>
> double normal[3];<br>
> normal[0] = -0.118968;<br>
> normal[1] = -0.9534519;<br>
> normal[2] = 0.27708499;<br>
><br>
> double testpoint2[3];<br>
> testpoint2[0] = 47.7378;<br>
> testpoint2[1] = 88.439;<br>
> testpoint2[2] = 26.1231;<br>
><br>
> double normal2[3];<br>
> normal2[0] = -0.4399;<br>
> normal2[1] = -0.8165;<br>
> normal2[2] = 0.3738968;<br>
><br>
> slicePlane->SetNormal(normal2);<br>
> slicePlane->SetOrigin(testpoint2);<br>
><br>
> im->SetSlicePlane(slicePlane);<br>
><br>
><br>
><br>
> // Setting of vtkImageProperty<br>
> vtkSmartPointer<vtkImageProperty> ip =<br>
> vtkSmartPointer<vtkImageProperty>::New();<br>
> ip->SetColorWindow(2000);<br>
> ip->SetColorLevel(1000);<br>
> ip->SetAmbient(0.0);<br>
> ip->SetDiffuse(1.0);<br>
> ip->SetOpacity(1.0);<br>
> ip->SetInterpolationTypeToLinear();<br>
><br>
> // Try of vtkImageSlice<br>
> vtkSmartPointer<vtkImageSlice> imageSlice =<br>
> vtkSmartPointer<vtkImageSlice>::New();<br>
> vtkSmartPointer<vtkInteractorStyleImage > styleImage =<br>
> vtkSmartPointer<vtkInteractorStyleImage >::New();<br>
><br>
> imageSlice->SetMapper(im);<br>
> imageSlice->SetProperty(ip);<br>
><br>
><br>
> vtkSmartPointer<vtkXMLImageDataWriter> writer =<br>
> vtkSmartPointer<vtkXMLImageDataWriter>::New();<br>
> writer->SetFileName(argv[2]);<br>
> writer->SetInputConnection(im->GetOutputPort());<br>
> writer->Write();<br>
><br>
> styleImage->SetInteractionModeToImage3D();<br>
> iren->SetInteractorStyle(styleImage);<br>
> renWin->SetInteractor(iren);<br>
><br>
> // Actors are added to the renderer.<br>
> aRenderer->AddActor(outline);<br>
> aRenderer->AddViewProp(imageSlice);<br>
><br>
> // camera Setting<br>
> vtkSmartPointer<vtkCamera> aCamera =<br>
> vtkSmartPointer<vtkCamera>::New();<br>
> aCamera->SetViewUp (0, 0, -1);<br>
> aCamera->SetPosition (0, 1, 0);<br>
> aCamera->SetFocalPoint (0, 0, 0);<br>
> aCamera->ComputeViewPlaneNormal();<br>
> aCamera->Azimuth(30.0);<br>
> aCamera->Elevation(30.0);<br>
> aCamera->ParallelProjectionOn();<br>
> aRenderer->SetActiveCamera(aCamera);<br>
><br>
><br>
> renWin->Render();<br>
> aRenderer->ResetCamera();<br>
> aRenderer->ResetCameraClippingRange();<br>
><br>
> // interact with data<br>
> iren->Initialize();<br>
> iren->Start();<br>
><br>
> return EXIT_SUCCESS;<br>
> }<br>
</div></div></blockquote></div><br></div>