[vtkusers] reasons of limitations on opacity per component and up to 4 components in label-map volume rendering?
Sankhesh Jhaveri
sankhesh.jhaveri at kitware.com
Thu Jun 14 22:36:57 EDT 2018
Hi,
The code you shared seems fine to me.
I see the image you shared but could you please describe what we’re looking
at and what we expect to see?
It would help to identify the issue by removing all additional logic and
minimizing the test case.
Do you see the issue without the gradient opacity function and masking?
Thanks,
Sankhesh
On Thu, Jun 14, 2018 at 6:50 AM terminator via vtkusers <
vtkusers at public.kitware.com> wrote:
> Of curse,
> It's the output:
> <http://vtk.1045678.n5.nabble.com/file/t342452/output-vtk.jpg>
>
> And this is the code:
>
> #include <vtkRenderer.h>
> #include <vtkRenderWindow.h>
> #include <vtkRenderWindowInteractor.h>
> #include <vtkSmartPointer.h>
> #include <vtkTIFFReader.h>
> #include <vtk_tiff.h>
> #include <vtkVolume.h>
> #include <vtkSmartVolumeMapper.h>
> #include <vtkGPUVolumeRayCastMapper.h>
> #include <vtkOpenGLGPUVolumeRayCastMapper.h>
> #include <vtkImageData.h>
> #include <vtkVolumeProperty.h>
> #include <vtkPiecewiseFunction.h>
> #include <vtkColorTransferFunction.h>
> #include <vtkStringArray.h>
> #include <vtkStdString.h>
> #include <string>
>
> #define PIC_STEP 5
> int main(int, char *[])
> {
> int start = 3785, end = 4285;
> std::string ctPath = "..\\CTDATA\\";
> std::string maskPath = "..\\labelmap\\";
> vtkSmartPointer<vtkTIFFReader> ctReader =
> vtkSmartPointer<vtkTIFFReader>::New();
> vtkSmartPointer<vtkTIFFReader> maskReader =
> vtkSmartPointer<vtkTIFFReader>::New();
> vtkImageData * ctImages;
> vtkImageData * maskImages;
> vtkVolume * volume;
> vtkGPUVolumeRayCastMapper * vMap;
> vtkVolumeProperty * vProp;
> vtkPiecewiseFunction * tf[3];
> vtkColorTransferFunction * cf[3];
>
>
> int pic_num = start;
> ctReader->SetFileName((ctPath + std::to_string(pic_num) +
> ".tif").c_str());
> ctReader->Update();
> int * extents = ctReader->GetOutput()->GetExtent();
>
>
> vtkStdString * ctFileNames = new vtkStdString[(end - start) /
> PIC_STEP +
> 1];
> vtkStdString * maskFileNames = new vtkStdString[(end - start) /
> PIC_STEP +
> 1];
> int i = 0;
> for (int pic_num = start; pic_num <= end; pic_num += PIC_STEP) {
> ctFileNames[i] = ctPath + std::to_string(pic_num) + ".tif";
> maskFileNames[i] = maskPath + std::to_string(pic_num) +
> ".tif";
> i++;
> }
> vtkStringArray * ctFileNameArr = vtkStringArray::New();
> vtkStringArray * maskFileNameArr = vtkStringArray::New();
> ctFileNameArr->SetArray(ctFileNames, (end - start) / PIC_STEP + 1,
> 0);
> maskFileNameArr->SetArray(maskFileNames, (end - start) / PIC_STEP
> + 1, 0);
> std::cout << "Slices: " << (end - start) / PIC_STEP << std::endl;
> ctReader->SetDataExtent(extents[0], extents[1], extents[2],
> extents[3], 0,
> ((end - start) / PIC_STEP));
> ctReader->SetFileNames(ctFileNameArr);
> ctReader->Update();
> ctImages = ctReader->GetOutput();
> maskReader->SetDataExtent(extents[0], extents[1], extents[2],
> extents[3],
> 0, ((end - start) / PIC_STEP));
> maskReader->SetFileNames(maskFileNameArr);
> maskReader->SetOrientationType(ORIENTATION_LEFTBOT);
> maskReader->Update();
> maskImages = maskReader->GetOutput();
>
> //Opacity TF
> tf[0] = vtkPiecewiseFunction::New();
> tf[0]->AddPoint(20, 0);
> tf[0]->AddPoint(255, 0.2);
> tf[1] = vtkPiecewiseFunction::New();
> tf[1]->AddPoint(0, 1);
> tf[1]->AddPoint(255, 1);
> tf[2] = vtkPiecewiseFunction::New();
> tf[2]->AddPoint(0, 0);
> tf[2]->AddPoint(255, 0);
> //Color TF
> cf[0] = vtkColorTransferFunction::New();
> cf[0]->AddRGBPoint(0, 0, 0, 0);
> cf[0]->AddRGBPoint(255, 1, 1, 1);
> cf[1] = vtkColorTransferFunction::New();
> cf[1]->AddRGBPoint(0, 1, 0, 0);
> cf[1]->AddRGBPoint(255, 1, 0, 0);
> cf[2] = vtkColorTransferFunction::New();
> cf[2]->AddRGBPoint(0, 0, 0, 1);
> cf[2]->AddRGBPoint(255, 0, 0, 1);
>
> vProp = vtkVolumeProperty::New();
> vProp->IndependentComponentsOn();
> vProp->SetScalarOpacity(0, tf[0]);
> vProp->SetGradientOpacity(0, tf[0]);
> vProp->SetScalarOpacity(1, tf[1]);
> vProp->SetGradientOpacity(1, tf[1]);
> vProp->SetScalarOpacity(2, tf[2]);
> vProp->SetGradientOpacity(2, tf[2]);
> vProp->SetColor(0, cf[0]);
> vProp->SetColor(1, cf[1]);
> vProp->SetColor(2, cf[2]);
>
>
> vMap = vtkGPUVolumeRayCastMapper::New();
> vMap->SetInputData(ctImages);
> vMap->SetMaskTypeToLabelMap();
> vMap->SetMaskBlendFactor(0.8);
> vMap->SetMaskInput(maskImages);
>
> volume = vtkVolume::New();
> volume->SetMapper(vMap);
> volume->SetProperty(vProp);
>
> vtkRenderer * render = vtkRenderer::New();
> vtkRenderWindow * renderWin = vtkRenderWindow::New();
> vtkRenderWindowInteractor * irenWin =
> vtkRenderWindowInteractor::New();
> render->SetBackground(0, 0.5, 0.5);
> render->AddVolume(volume);
> renderWin->AddRenderer(render);
> irenWin->SetRenderWindow(renderWin);
> renderWin->Render();
> irenWin->Start();
> return EXIT_SUCCESS;
> }
>
>
>
> --
> Sent from: http://vtk.1045678.n5.nabble.com/VTK-Users-f1224199.html
> _______________________________________________
> 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
>
> Search the list archives at: http://markmail.org/search/?q=vtkusers
>
> Follow this link to subscribe/unsubscribe:
> https://public.kitware.com/mailman/listinfo/vtkusers
>
--
Sankhesh Jhaveri *Sr. Research & Development Engineer* | Kitware
<http://www.kitware.com/> | (518) 881-4417
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://public.kitware.com/pipermail/vtkusers/attachments/20180614/1f97b852/attachment.html>
More information about the vtkusers
mailing list