[vtkusers] Problem with SimpleImageToImageFilter Implementation
Christian Werner
christian.werner at rwth-aachen.de
Fri Feb 12 03:43:03 EST 2010
David, you were (nearly) perfectly right. I solved the problem by giving
the array some name in SimpleExecute itself:
outarray->SetName("MyArray");
Thanks for the help and best regards,
Christian
Christian Werner wrote:
> Thank you for the quick response. I am afraid that won't help, since I
> am not implementing a viewer myself. My Filter is a plugin for
> Paraview, I don't do anything about any painter. So maybe that's a
> Paraview issue?
>
> btw. What are these "Scalars"? Format data? Is there some setup I
> could change in my vtkImageData output to fix that?
>
>
> David Doria wrote:
>> On Thu, Feb 11, 2010 at 11:33 AM, Christian Werner
>> <christian.werner at rwth-aachen.de
>> <mailto:christian.werner at rwth-aachen.de>> wrote:
>>
>> Hello!
>>
>> I used the vtkSimpleImageToImageFilter to make a nifty little
>> segmentation to get started. Below is how I overwrote the
>> SimpleExecute function. It looks good and actually does the job,
>> at least in a Reader>MyFilter>Writer setup. But if its passed to a
>> vtkTexturePainter I get a warning that comes from the function
>>
>> int vtkTexturePainter::SetupScalars(vtkImageData* input) ...
>>
>> Warning: In /opt/ParaView3/Servers/Filters/vtkTexturePainter.cxx,
>> line 173
>> vtkTexturePainter (0x1a34fd0): Failed to locate selected scalars.
>> Will use image scalars by default.
>>
>>
>> What is displayed then (this is all with Paraview by the way) is
>> an image which is indeed segmented as meant, but it has strange
>> colors. The background color of the image mysteriously gets the
>> background color of the 2d viewer (but should be 0/black), and the
>> foreground color (which should be white) is some ugly pink, or
>> green, now that I tried again. Also Paraview does not seem to have
>> information about the data array, at least its not listed where as
>> there IS information on the original image: DataType: unsigned
>> char, Data Ranges[0,255]...
>>
>>
>> Here is my code:
>>
>>
>> void vtkDislev::SimpleExecute(vtkImageData* input, vtkImageData*
>> output)
>> {
>> if (input==NULL) {
>> vtkErrorMacro(<<"Bad Input to vtkDislev");
>> return;
>> }
>> int dim[3];
>> input->GetDimensions(dim);
>> int numvox = dim[0]*dim[1]*dim[2];
>> int numcomp = input->GetNumberOfScalarComponents();
>> vtkDataArray* inarray = input->GetPointData()->GetScalars();
>> vtkDataArray* outarray = output->GetPointData()->GetScalars();
>> unsigned char in=255;
>> unsigned char out=0;
>> for (int component=0; component < numcomp; component++) {
>> for (int i=0; i < numvox; i++) {
>> unsigned char v=inarray->GetComponent(i,component);
>> if (v >= this->LowerThreshold && v<=this->UpperThreshold) {
>> outarray->SetComponent(i,component,in);
>> } else {
>> outarray->SetComponent(i,component,out); }
>> }
>> }
>> }
>>
>>
>> Anyone any idea?
>>
>> Best regards,
>> Christian
>> __
>>
>>
>> It looks like this (from vtkTexturePainter.cxx) is returning NULL:
>>
>> vtkDataArray* scalars = vtkAbstractMapper::GetScalars(input,
>> this->ScalarMode, this->ScalarArrayName?
>> VTK_GET_ARRAY_BY_NAME : VTK_GET_ARRAY_BY_ID,
>> this->ScalarArrayIndex,
>> this->ScalarArrayName,
>> cellFlag);
>>
>> It looks like you can call
>> painter->SetScalarArrayName("yourArray");
>>
>> to set the array that you want it to use.
>>
>> Hope that helps,
>>
>> David
>> ------------------------------------------------------------------------
>>
>> _______________________________________________
>> 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
>>
>
> _______________________________________________
> 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
More information about the vtkusers
mailing list