[vtkusers] Volume Rendering with Voxel Specific Color

Cory Jones cjayjones at gmail.com
Tue Jul 1 08:41:23 EDT 2014


Also, I forgot to mention this, but if my code is modified to remove the
component on the opacity function so that it is:

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

Then the entire volume becomes not visible.


On Tue, Jul 1, 2014 at 6:19 AM, Cory Jones <cjayjones at gmail.com> wrote:

> The opacity function in the previous email is the only one I am creating.
> Is there an error in that code then?
>
> Thanks.
>
>
> On Mon, Jun 30, 2014 at 8:09 PM, Lisa Avila <lisa.avila at kitware.com>
> wrote:
>
>> Cory,
>>
>> Note that if you are using non-independent components, you'd only use the
>> first scalar opacity function, not the fourth. That is, there is only one
>> scalar opacity function (because there is only one channel being used to
>> control opacity - it just happens to be either the 2nd or the 4th component
>> depending on whether you are rendering IA or RGBA data). So likely your
>> issue now is that you are using whatever default opacity function is
>> created for you if you try to render without one already created. :-)
>>
>> Lisa
>>
>>
>>
>> On Mon, Jun 30, 2014 at 4:08 PM, Cory Jones <cjayjones at gmail.com> wrote:
>>
>>> 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/20140701/26aacd7a/attachment-0001.html>


More information about the vtkusers mailing list