[vtkusers] Blending two different slices of raw file and color one of them
Jesús Spínola
jspinola at gmail.com
Thu Sep 8 08:14:15 EDT 2011
This example may help you:
http://www.vtk.org/Wiki/VTK/Examples/Cxx/Images/Transparency
On Mon, Feb 21, 2011 at 11:47 PM, kigras <kigras at gmail.com> wrote:
>
> Hi,
> I would like to visualize two images at the same time in one renderer
> window
> (CT and binary images in vtkImageViewer2). In my opinnion using vtkBlend is
> a good direction to follow. However, I encounter some problems. At
> present,
> In my software I can simple visualize CT slice with all functionality
> provided by vtkImageViewer2, i need to preserve that functionality ie.
> window level adjustment. Now I have binary image (with the same size), my
> goal is to make transparent all black pixels and color to half transparent
> yellow all object pixels. However, when I use following code the results
> are
> not as I have expected.
>
> This is my code:
>
> //read raw file
>
> vtkImageReader *ImageReader = vtkImageReader::New();
> ImageReader->SetFileName("p1tree.raw");
> ImageReader->SetDataScalarTypeToUnsignedChar();
> ImageReader->SetDataByteOrder(0);
> ImageReader->SetFileDimensionality(3);
> ImageReader->SetDataOrigin (0.0, 0.0, 0.0);
> ImageReader->SetDataSpacing(1.0 ,1.0, 1.0);
> ImageReader->SetDataExtent( 0,431, 0, 270, 0, 444);
> ImageReader->SetNumberOfScalarComponents(1);
>
> //input=ImageReader->GetOutput();
> ImageReader->Update();
> vtkImageReader *ImageReader1 = vtkImageReader::New();
> ImageReader1->SetFileName("p1.raw");
> ImageReader1->SetDataScalarTypeToShort();
> ImageReader1->SetDataByteOrder(1);
> ImageReader1->SetFileDimensionality(3);
> ImageReader1->SetDataOrigin (0.0, 0.0, 0.0);
> ImageReader1->SetDataSpacing(1.0 ,1.0, 1.0);
> ImageReader1->SetDataExtent( 0,431, 0, 270, 0, 444);
> ImageReader1->SetNumberOfScalarComponents(1);
> ImageReader1->Update();
>
> //color
>
> vtkSmartPointer<vtkLookupTable> FirstColorMap =
> vtkSmartPointer<vtkLookupTable>::New();
>
> //binary
> FirstColorMap->SetTableValue(0, 0.2000, 0.6300, 0.7900, 1);
> FirstColorMap->Build();
>
> //CT
> vtkSmartPointer<vtkLookupTable> ColorMap =
> vtkSmartPointer<vtkLookupTable>::New(); // hot color map]
>
> ColorMap->SetTableValue(0, 0.8900, 0.8100, 0.3400, 1);
> ColorMap->Build();
>
> vtkImageCast *cast = vtkImageCast::New();
>
> cast->SetInput(ImageReader->GetOutputDataObject(0));
> cast->SetOutputScalarTypeToShort();
> cast->ClampOverflowOn();
> cast->Print(std::cout);
>
>
> vtkSmartPointer<vtkImageMapToColors> ColorMapper =
> vtkSmartPointer<vtkImageMapToColors>::New();
> ColorMapper->SetInput( cast->GetOutput() );
> ColorMapper->SetLookupTable( FirstColorMap );
>
> vtkSmartPointer<vtkImageMapToColors> ColorMapper1 =
> vtkSmartPointer<vtkImageMapToColors>::New();
> ColorMapper1->SetInput( ImageReader1->GetOutput() );
> ColorMapper1->SetLookupTable( ColorMap );
>
>
> // Combine the images (blend takes multiple connections on the 0th input
> port)
> vtkSmartPointer<vtkImageBlend> blend =
> vtkSmartPointer<vtkImageBlend>::New();
>
> //blend->AddInputConnection(0,cast->GetOutputPort());
> //blend->AddInputConnection(0,ImageReader1->GetOutputPort());
>
>
> blend->AddInputConnection(0,ColorMapper->GetOutputPort());
> blend->AddInputConnection(0,ColorMapper1->GetOutputPort());
>
> blend->SetOpacity(0,1.0);
> blend->SetOpacity(1,.5);
>
> // Display the result
> vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
> vtkSmartPointer<vtkRenderWindowInteractor>::New();
>
> vtkSmartPointer<vtkImageViewer2> imageViewer =
> vtkSmartPointer<vtkImageViewer2>::New();
> imageViewer->SetColorLevel(0);
> imageViewer->SetColorWindow(255);
> imageViewer->SetSliceOrientation(2);
> imageViewer->SetSlice(259);
>
> imageViewer->SetInputConnection(blend->GetOutputPort());
> imageViewer->SetupInteractor(renderWindowInteractor);
> imageViewer->GetRenderer()->ResetCamera();
> imageViewer->SetSize( 800, 800 );
> imageViewer->GetRenderer()->SetBackground(.1,.2,.3); //dark blue
>
> vtkRenderer *ren = vtkRenderer::New();
> vtkImageActor * mriActor = vtkImageActor::New();
> mriActor->SetInput(blend->GetOutput());
> ren->AddViewProp( mriActor );
>
> renderWindowInteractor->Initialize();
> renderWindowInteractor->Start();
>
>
>
> I attach a few pics what I want to result:
> http://vtk.1045678.n5.nabble.com/file/n3394758/bin.png // binary picture
> http://vtk.1045678.n5.nabble.com/file/n3394758/CT.png // CT picture
> http://vtk.1045678.n5.nabble.com/file/n3394758/CTandBIN.png // combined
> pictures this is my goal
>
>
>
> Thanks a lot for help.
>
> Jakub Igras
> --
> View this message in context:
> http://vtk.1045678.n5.nabble.com/Blending-two-different-slices-of-raw-file-and-color-one-of-them-tp3394758p3394758.html
> Sent from the VTK - Users mailing list archive at Nabble.com.
> _______________________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Please keep messages on-topic and check the VTK FAQ at:
> http://www.vtk.org/Wiki/VTK_FAQ
>
> Follow this link to subscribe/unsubscribe:
> http://www.vtk.org/mailman/listinfo/vtkusers
>
--
Jesús Spínola
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20110908/84f2de79/attachment.htm>
More information about the vtkusers
mailing list