[vtkusers] How to map negative grayscale to color?

David Gobbi david.gobbi at gmail.com
Tue Mar 8 23:35:08 EST 2016


No, that isn't necessary.

On Tue, Mar 8, 2016 at 9:29 PM, Liu_tj <tjlp at netease.com> wrote:

> Hi,David,
>
> Do I need to set the LookupTable to vtkImageMapToWindowLevelColors which
> is returned by vtkImageViewer2::GetWindowLevels() instead of create a new
> vtkImageMapToColors?
>
> BR,
> Thanks
>
>
> 在2016-03-09,"David Gobbi" <david.gobbi at gmail.com> 写道:
>
> -----原始邮件-----
> *发件人:*"David Gobbi" <david.gobbi at gmail.com>
> *发送时间:*2016年03月9日 星期三
> *收件人:*"Liu_tj" <tjlp at netease.com>
> *主题:*Re: Re: Re: [vtkusers] How to map negative grayscale to color?
>
>
> Hi Liu Peng,
>
> Do you want to show a gray image underneath, and the color image
> on top?  I'm not sure if vtkImageViewer works property if you add
> more than one image.
>
> You should add a "print" statement of some kind to your code to
> print the values of scalarrange, to be sure they are correct.
>
> Don't call colormap.Build() after setting your own values for the table,
> or it might overwrite the values that you have set.  If you call it at all,
> call it immediately after SetNumberOfTableValues(), before you set
> any of your own values.
>
> The range on the final for() loop should be the following:
> for (int i = (int)(threshhold[1]) + 1; i <= (int)(scalarrange[1]); i++)
>
> Also, if you want the beyond-threshold values to be transparent
> instead of black, then set the alpha component to zero:
>
> for (int i = (int)(scalarrange[0]); i < (int)(threshhold[0]); i++)
> {
>     colormap.SetTableValue(i - (int)scalarrange[0], 0.0, 0.0, 0.0, 0.0);
> }
>
>  - David
>
>
> On Tue, Mar 8, 2016 at 9:40 AM, Liu_tj <tjlp at netease.com> wrote:
>
>> Hi, David,
>>
>> I follow your post and it doesn't work. The DICOM image shows no color,
>> just gray image. Could you have a look at my code below? I use a
>> vtkImageView2 to display the DICOM image. The code is c# by Activiz .NET.
>> The scalar range of test image is [-1024,3071]. I want to show the gray
>> scale at [1000,3000] to green. The function GrayToColors() maps gray scale
>> to color, it is called by Display().
>>
>> private void Display(vtkRenderWindow aRenderWindow, vtkAlgorithmOutput
>> aData)
>>         {
>>             if (aData == null)
>>                 return;
>>
>>             m_imageViewer = vtkImageViewer2.New();
>>             m_imageViewer.SetInputConnection(aData);
>>             switch (m_sliceDirection)
>>             {
>>                 case Direction.AXIAL:
>>                     m_imageViewer.SetSliceOrientationToXY();
>>                     break;
>>                 case Direction.CORONAL:
>>                     m_imageViewer.SetSliceOrientationToYZ();
>>                     break;
>>                 case Direction.SAGITTAL:
>>                     m_imageViewer.SetSliceOrientationToXZ();
>>                     break;
>>                 default:
>>                     break;
>>             }
>>
>>             m_imageViewer.GetSliceRange(ref m_minSliceNumber, ref
>> m_maxSliceNumber);
>>             m_interactorStyle = vtkInteractorStyleImage.New();
>>             m_interactorStyle.MouseWheelForwardEvt += new
>> vtkObject.vtkObjectEventHandler(interactor_MouseWheelForwardEvt);
>>             m_interactorStyle.MouseWheelBackwardEvt += new
>> vtkObject.vtkObjectEventHandler(interactor_MouseWheelBackwardEvt);
>>
>>
>> aRenderWindow.GetInteractor().SetInteractorStyle(m_interactorStyle);
>>             aRenderWindow.GetRenderers().InitTraversal();
>>
>>             m_renderer = aRenderWindow.GetRenderers().GetFirstRenderer();
>>             m_renderer.SetBackground(0.0, 0.0, 0.0);
>>
>>             m_imageViewer.SetRenderWindow(aRenderWindow);
>>             m_currentSlice = m_minSliceNumber + (m_maxSliceNumber -
>> m_minSliceNumber) / 2;
>>             m_imageViewer.SetSlice(m_currentSlice);
>>
>>             double[] scalarrange = new double[2];
>>             scalarrange = m_imageViewer.GetInput().GetScalarRange();
>>             double[] threshhold = new double[2];
>>             threshhold[0] = 1000;
>>             threshhold[1] = 3000;
>>             m_imageViewer.Render();
>>             GrayToColors(m_renderer, aData, scalarrange, threshhold);
>>
>>             m_imageViewer.Render();
>>         }
>>
>>         private void GrayToColors(vtkRenderer renderer,
>> vtkAlgorithmOutput data, double[] scalarrange, double[] threshhold)
>>         {
>>             vtkLookupTable colormap = vtkLookupTable.New();
>>             int number = (int)(scalarrange[1] - scalarrange[0] + 1);
>>             colormap.SetRange(scalarrange[0], scalarrange[1]);
>>             colormap.SetNumberOfTableValues(number);
>>
>>             for (int i = (int)(scalarrange[0]); i < (int)(threshhold[0]);
>> i++)
>>             {
>>                 colormap.SetTableValue(i - (int)scalarrange[0], 0.0, 0.0,
>> 0.0, 1.0);
>>             }
>>             for (int i = (int)(threshhold[0]); i <= (int)(threshhold[1]);
>> i++)
>>             {
>>                 colormap.SetTableValue(i - (int)scalarrange[0], 0.0, 1.0,
>> 0.0, 1.0);
>>             }
>>             for (int i = (int)(threshhold[1]); i < (int)(scalarrange[1]);
>> i++)
>>             {
>>                 colormap.SetTableValue(i - (int)scalarrange[0], 0.0, 0.0,
>> 0.0, 1.0);
>>             }
>>             colormap.Build();
>>
>>             vtkImageMapToColors colormapper = vtkImageMapToColors.New();
>>             colormapper.SetInputConnection(data);
>>             colormapper.SetLookupTable(colormap);
>>             colormapper.Update();
>>
>>             vtkImageActor colormapActor = vtkImageActor.New();
>>             colormapActor.SetInput(colormapper.GetOutput());
>>             renderer.AddActor(colormapActor);
>>             renderer.ResetCamera();
>>             renderer.Modified();
>>         }
>>
>> Thanks
>>
>> 在2016-03-08,"David Gobbi" <david.gobbi at gmail.com> 写道:
>>
>> -----原始邮件-----
>> *发件人:*"David Gobbi" <david.gobbi at gmail.com>
>> *发送时间:*2016年03月8日 星期二
>> *收件人:*"Liu_tj" <tjlp at netease.com>
>> *抄送:*"vtkusers" <vtkusers at vtk.org>
>> *主题:*Re: Re: [vtkusers] How to map negative grayscale to color?
>>
>>
>> Hi Liu Pen,
>>
>> That's because I forgot to include the index argument in the call to
>> SetTableValue:
>>
>> table->SetRange(-1024, 4095);
>> table->SetNumberOfTableValues(4095 + 1024 + 1);
>> for (int i = -1024; i < -10; i++) {
>>     table->SetTableValue(i + 1024, 0.0, 0.0, 0.0, 1.0);
>> }
>>
>> The table index must start at zero.  The call to SetRange(-1024, 4095)
>> causes the scalar value -1024 to map to table index 0.  In the "for" loop,
>> i is the scalar value.
>>
>>  - David
>>
>>
>> On Tue, Mar 8, 2016 at 7:27 AM, Liu_tj <tjlp at netease.com> wrote:
>>
>>> Hi, David,
>>>
>>> When I try, a lot of errors are popup: "Can't set the table value for
>>> negative index".
>>>
>>> Seems the negative grayscale needs some transformation.
>>>
>>> Thanks
>>> Liu Peng
>>>
>>>
>>> 在2016-03-08,"David Gobbi" <david.gobbi at gmail.com> 写道:
>>>
>>> -----原始邮件-----
>>> *发件人:*"David Gobbi" <david.gobbi at gmail.com>
>>> *发送时间:*2016年03月8日 星期二
>>> *收件人:*"Liu_tj" <tjlp at netease.com>
>>> *抄送:*"vtkusers" <vtkusers at vtk.org>
>>> *主题:*Re: [vtkusers] How to map negative grayscale to color?
>>>
>>> Hi Liu Peng,
>>>
>>> You can set individual values in the lookup table,
>>> in order to precisely map certain scalar values to
>>> specific colors:
>>>
>>> table->SetRange(-1024, 4095);
>>> table->SetNumberOfTableValues(4095 + 1024 + 1);
>>> for (int i = -1024; i < -10; i++) {
>>>     table->SetTableValue(0.0, 0.0, 0.0, 1.0);
>>> }
>>> for (int i = -10; i <= 200; i++) {
>>>     table->SetTableValue(0.0, 1.0, 0.0, 1.0);
>>> }
>>> etcetera.
>>>
>>>  - David
>>>
>>>
>>> On Mon, Mar 7, 2016 at 9:31 AM, Liu_tj <tjlp at netease.com> wrote:
>>>
>>>> Hi,
>>>>
>>>> I try to use the vtkLookupTable to convert the grayscale to rgb color.
>>>> The image scalar range is [-1024,3071] returned by
>>>> vtkImageData::GetScalarRange(). Now I want to convert specific grayscale
>>>> range, for example, [-10,200] to one color, such as green (RGB is 0,1,0).
>>>> How to do that by vtkLookupTable? I have no idea what method should call:
>>>> SetNumberOfTableValues(), SetRange(), SetHueRange(), SetValueRange(). What
>>>> do "Hue" and "Value" stand for?
>>>>
>>>> BR,
>>>> Liu Peng
>>>>
>>>
>>>
>>>
>>>
>>>
>>
>>
>>
>>
>>
>
>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/vtkusers/attachments/20160308/bdc4fd35/attachment.html>


More information about the vtkusers mailing list