[vtkusers] Volume Rendering with Voxel Specific Color

Cory Jones cjayjones at gmail.com
Mon Jun 30 16:08:59 EDT 2014


Thank you for the feedback. That fixed the color problem. I am not sure I
understand the use of component 4 though. I am trying to use it to set the
opacity of the volume using the volume property SetScalarOpacity with a
vtkPiecewiseFunction. The code I am using is:

  vtkSmartPointer<vtkPiecewiseFunction> compositeOpacity =
    vtkSmartPointer<vtkPiecewiseFunction>::New();
  compositeOpacity->AddPoint(0.0,0.0);
  compositeOpacity->AddPoint(1.0,0.25);
  compositeOpacity->AddPoint(255.0,0.25);
  volumeProperty->SetScalarOpacity(3,compositeOpacity);

I set the portions of the volume I want to have not visible to 0 on the
fourth channel of the volume (component 3) and then am trying to set the
opacity to 0 for those positions using the code above. I am not getting a
change in the opacity using this. Is there another way to accomplish this,
or have I just made an error in the above?

Thanks.


On Thu, Jun 26, 2014 at 12:42 PM, Lisa Avila <lisa.avila at kitware.com> wrote:

> Hello Cory,
>
> In the volume property you'll need to indicate that you don't have
> independent components. That is, by default this is set to true and
> therefore VTK assumes you are representing separate properties which each
> of the scalar components (for example pressure and density). In that case,
> each scalar is passed through its own lookup tables for color and opacity
> and the resulting values are merged based on the weightings of the
> components.
>
> VTK also supports IA (intensity / alpha) and RGBA data. This must be 2 or
> 4 component unsigned char data. Once you set it so that your components are
> not independent, the last component will be considered a scalar lookup into
> your opacity transfer function, and the first one or three components will
> be used to represent your color. In the case of 2 component data (IA), that
> first component will be passed through the color transfer function. In the
> case of 4 component data (RGBA) those first three components will be
> directly considered the RGB color of that voxel.
>
> Note that if you have 3 component RGB data you'll need to do something to
> create a 4th component (otherwise you have no concept of alpha and you just
> have a solid block of color). Typical methods of generating that fourth
> component include assigning it to be the hue or intensity of the RGB value.
> For example, with the visible human data we usually assign the fourth
> component to be hue since the body was encased in a blue gel (we can then
> set the opacity of the blue hue to be zero, thereby seeing the human inside
> the cube).
>
> Hope this helps.
>
> Lisa
>
>
>
> On Wed, Jun 25, 2014 at 1:49 PM, Cory Jones <cjayjones at gmail.com> wrote:
>
>> I am trying to render a volume from 3D ImageData and I want to be able to
>> control the color of each voxel independently using the color channels. I
>> am able to set the number of scalar components in my ImageData to 3 and set
>> each channel separately. I am rendering using vtkSmartVolumeMapper. Is
>> there a way to set the vtkVolumeProperty so that the image renders the 3
>> channels as RGB? I have tried using the vtkColorTransferFunction
>> SetColorSpaceToRGB(), but this does not work. Again, I don't want to do
>> scalar color mapping. My current code is:
>>
>>
>>   vtkSmartPointer<vtkSmartVolumeMapper> volumeMapper =
>>               vtkSmartPointer<vtkSmartVolumeMapper>::New();
>>   volumeMapper->SetBlendModeToComposite();
>>   volumeMapper->SetInputConnection(outputImageData->GetProducerPort());
>>
>>   vtkSmartPointer<vtkVolumeProperty> volumeProperty =
>>     vtkSmartPointer<vtkVolumeProperty>::New();
>>   volumeProperty->ShadeOff();
>>   volumeProperty->SetInterpolationType(VTK_LINEAR_INTERPOLATION);
>>
>>   vtkSmartPointer<vtkColorTransferFunction> color =
>>     vtkSmartPointer<vtkColorTransferFunction>::New();
>>   color->SetColorSpaceToRGB();
>>   volumeProperty->SetColor(color);
>>
>>   vtkSmartPointer<vtkVolume> volume =
>>     vtkSmartPointer<vtkVolume>::New();
>>   volume->SetMapper(volumeMapper);
>>   volume->SetProperty(volumeProperty);
>>
>> _______________________________________________
>> 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://public.kitware.com/mailman/listinfo/vtkusers
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/vtkusers/attachments/20140630/2018e638/attachment.html>


More information about the vtkusers mailing list