[vtkusers] Combination of two images

Adrien Marion adrien.marion at creatis.insa-lyon.fr
Wed Apr 13 11:14:16 EDT 2011


Great ! It seems OK now.
I tried with 2 objects with different gray levels in the mask and It 
works fine.
I have still to verify with non uniform objects.

Thanks a lot David for your help,
Adrien

Le 13/04/2011 16:02, David Gobbi a écrit :
> Hi Adrien,
>
> I'm sorry, I did not read your code carefully enough.
>
> The append filter you need is vtkImageAppendComponents.
>
> The SetInput() only sets the first input, not the second.
> Do this instead:
>
> app.SetInput(readerMask.GetOutput());
> app.AddInput(opac.GetOutput());
>
> blend.SetInput(readerImage.GetOutput());
> blend.AddInput(app.GetOutput());
>
> Hopefully that will make it work.
>
>   - David
>
> On Wed, Apr 13, 2011 at 7:54 AM, Adrien Marion
> <adrien.marion at creatis.insa-lyon.fr>  wrote:
>> I added the correct lines below:
>>
>> opac = vtkImageThreshold();
>> opac.SetInput(readerMask.GetOutput());
>> opac.ThresholdByUpper(1);
>> opac.ReplaceInOn();
>> opac.ReplaceOutOn();
>> opac.SetInValue(255);
>> opac.SetOutValue(0);
>> opac.Update();
>>
>> // Here opac is a binary image (0 or 255).
>>
>> app = vtkImageAppend();
>> app.SetInput(readerMask.GetOutput());
>> app.SetInput(opac.GetOutput());
>> app.Update();
>>
>> blend = vtkImageBlend();
>> blend.SetInput(readerImage.GetOutput());
>> blend.SetInput(app.GetOutput());
>> blend.Update();
>>
>> // blend is the same as opac, i.e. equal to 0 or 255
>>
>> Another tip or mistake to avoid ?
>>
>> Adrien
>>
>> Le 13/04/2011 15:45, David Gobbi a écrit :
>>> Oops, one other thing!
>>>
>>> When blending, the image with alpha comes second, not first:
>>> blend.SetInput(currentImage);
>>> blend.AddInput(app.GetOutput());
>>>
>>>   - David
>>>
>>>
>>> On Wed, Apr 13, 2011 at 7:42 AM, David Gobbi<david.gobbi at gmail.com>
>>>   wrote:
>>>> Hi Adrien,
>>>>
>>>> The alpha mask should have values of 0 and 255:
>>>> opac.ReplaceInOn();
>>>> opac.ReplaceOutOn();
>>>> opac.SetInValue(255);
>>>> opac.SetOutValue(0);
>>>>
>>>>   - David
>>>>
>>>>
>>>> On Wed, Apr 13, 2011 at 7:33 AM, Adrien Marion
>>>> <adrien.marion at creatis.insa-lyon.fr>    wrote:
>>>>> Thank you David.
>>>>> vtkImageStencil is not OK adding
>>>>>
>>>>> IS.SetInput(img);
>>>>>
>>>>> So I tried your second solution doing (test with python):
>>>>>
>>>>> opac = vtkImageThreshold();
>>>>> opac.SetInput(img);
>>>>> opac.ThresholdByUpper(1);
>>>>> opac.SetInValue(1);
>>>>> opac.Update();    // Thresholded image with 2 levels (0 and 1)
>>>>>
>>>>> app = vtkImageAppend();
>>>>> app.SetInput(img);
>>>>> app.SetInput(opac.GetOutput());
>>>>> app.Update();    // Image with 2 components, the initial one (img) and
>>>>> the
>>>>> associated binary mask
>>>>>
>>>>> blend = vtkImageBlend();
>>>>> blend.SetInput(app.GetOutput());
>>>>> blend.SetInput(currentImage);
>>>>> blend.Update();
>>>>>
>>>>> However, It does not provide the good combination. Did I wrote mistakes
>>>>> ?
>>>>> I do not understand how to say that the blend must take the second
>>>>> component
>>>>> of app (i.e. the binary mask) to decide if pixels have to be replaced.
>>>>>
>>>>> Adrien
>>>>>
>>>>> Le 13/04/2011 14:59, David Gobbi a écrit :
>>>>>> Hi Pat,
>>>>>>
>>>>>> The vtkImageStencil filter can take two image inputs, try adding this:
>>>>>>
>>>>>>
>>>>>>
>>>>>> You can also combine the images without using stencils.  To do this,
>>>>>> you would use vtkImageThreshold to generate your mask image, and then
>>>>>> vtkImageAppend to append this mask to img as an alpha channel.  Then
>>>>>> vtkImageBlend can be used to combine the images, it will use the alpha
>>>>>> channel to decide which pixels to replace.  This method doesn't have
>>>>>> any advantage compared to using stencils, it's just a different way of
>>>>>> doing the same thing.
>>>>>>
>>>>>>   - David
>>>>>>
>>>>>> On Wed, Apr 13, 2011 at 6:42 AM, Adrien Marion
>>>>>> <adrien.marion at creatis.insa-lyon.fr>      wrote:
>>>>>>> Hi,
>>>>>>> I have two vtkImageData (called currentImage and img), each containing
>>>>>>> values from 0 to 250.
>>>>>>> I would like to combine these images to obtain a resulting image
>>>>>>> (resImage)
>>>>>>> doing for each pixel:
>>>>>>> - if Mask == 0, resImage = currentImage
>>>>>>> - else resImage = Mask
>>>>>>>
>>>>>>> I currently work with VTK wrapped version in Java and I cannot afford
>>>>>>> a
>>>>>>> triple loop with getScalarAsDoubleComponent to do that.
>>>>>>>
>>>>>>> Does someone have a simple solution to do that ?
>>>>>>>
>>>>>>> I already tried with vtkImageStencil but It does not give the good
>>>>>>> solution:
>>>>>>>
>>>>>>>         vtkImageToImageStencil IIS = new vtkImageToImageStencil();
>>>>>>>         IIS.SetInput(img);
>>>>>>>         vtkImageStencil IS = new vtkImageStencil();
>>>>>>>         IS.SetStencil(IIS.GetOutput());
>>>>>>>         IS.SetInput(currentImage);
>>>>>>>         IS.Update();
>>>>>>>         result = IS.GetOutput();
>>>>>>>
>>>>>>> I think I did not understand how vtkImageStencil works.
>>>>>>>
>>>>>>> Thank you in advance for your help,
>>>>>>> Adrien
>>>>>>>
>>>>>>> --
>>>>>>> Adrien MARION, Docteur/PhD
>>>>>>> Chercheur post-doctorant (ANR VIP)
>>>>>>> Laboratoire CREATIS, INSA de Lyon
>>>>>>> CNRS UMR 5220, INSERM U1044
>>>>>>> Bâtiment Blaise Pascal, 4ème étage
>>>>>>> 7, avenue Jean Capelle
>>>>>>> 69621 Villeurbanne cedex FRANCE
>>>>>>> Tel : (+33) 4 72 43 87 86
>>>>>>> Fax:  (+33) 4 72 43 85 26
>>>>>>> e-mail : adrien.marion at creatis.insa-lyon.fr
>>>>>>> http://www.creatis.insa-lyon.fr/~amarion
>>>>> --
>>>>> Adrien MARION, Docteur/PhD
>>>>> Chercheur post-doctorant (ANR VIP)
>>>>> Laboratoire CREATIS, INSA de Lyon
>>>>> CNRS UMR 5220, INSERM U1044
>>>>> Bâtiment Blaise Pascal, 4ème étage
>>>>> 7, avenue Jean Capelle
>>>>> 69621 Villeurbanne cedex FRANCE
>>>>> Tel : (+33) 4 72 43 87 86
>>>>> Fax:  (+33) 4 72 43 85 26
>>>>> e-mail : adrien.marion at creatis.insa-lyon.fr
>>>>> http://www.creatis.insa-lyon.fr/~amarion
>> --
>> Adrien MARION, Docteur/PhD
>> Chercheur post-doctorant (ANR VIP)
>> Laboratoire CREATIS, INSA de Lyon
>> CNRS UMR 5220, INSERM U1044
>> Bâtiment Blaise Pascal, 4ème étage
>> 7, avenue Jean Capelle
>> 69621 Villeurbanne cedex FRANCE
>> Tel : (+33) 4 72 43 87 86
>> Fax:  (+33) 4 72 43 85 26
>> e-mail : adrien.marion at creatis.insa-lyon.fr
>> http://www.creatis.insa-lyon.fr/~amarion
>>
>>

-- 
Adrien MARION, Docteur/PhD
Chercheur post-doctorant (ANR VIP)
Laboratoire CREATIS, INSA de Lyon
CNRS UMR 5220, INSERM U1044
Bâtiment Blaise Pascal, 4ème étage
7, avenue Jean Capelle
69621 Villeurbanne cedex FRANCE
Tel : (+33) 4 72 43 87 86
Fax:  (+33) 4 72 43 85 26
e-mail : adrien.marion at creatis.insa-lyon.fr
http://www.creatis.insa-lyon.fr/~amarion




More information about the vtkusers mailing list