[Insight-users] 1D Convolution with Gaussian Kernel using
Nicholas Tustison
ntustison at gmail.com
Thu Nov 17 12:50:16 EST 2011
Hi Antonio,
Instead of using the ConvolutionImageFilter, you might want to explore
existing functionality in combining the GaussianOperator with the
NeighborhoodOperatorImageFilter.
typedef itk::NeighborhoodOperatorImageFilter<ImageType, ImageType> SmootherType;
typename SmootherType::Pointer smoother = SmootherType::New();
typedef GaussianOperator<PixelType, ImageDimension> GaussianType;
GaussianType gaussian;
gaussian.SetVariance( variance );
gaussian.SetDirection( 0 );
gaussian.SetMaximumError( 0.001 );
gaussian.SetMaximumKernelWidth( inputImage->GetRequestedRegion().GetSize()[0] );
gaussian.CreateDirectional();
smoother->SetOperator( gaussian );
smoother->SetInput( inputImage );
smoother->Update();
smoothImage = smoother->GetOutput();
However, in case you want to keep your image, you can use GaussianImageSource
to create 2-D image which has size Nx1 and then that image should plug right into
the ConvolutionImageFilter. I just did it right now with my code and it seemed
to work as expected.
Nick
On Nov 17, 2011, at 4:42 AM, Antonio Gómez Barquero wrote:
>
>
> Hi!
>
> You were right, now it compiles, but I only have some numbers in the first
> 20 positions, after that everything is 0, so is wrong, also it takes around
> 15 seconds to perform the calculation which is a crazy thing!.
>
> I prefer to generate the Gaussian myself and after that translate it into an
> image ( kernel in this case) because I am doing work also with Matlab, and I
> would like to use the same Gaussian.
>
> But I think I am missing something in the body of the iteration , something
> that performs the convolution itself or maybe the point of doing the
> convolution in x-axis in 1D....
>
> while(!imageIterator.IsAtEnd())
> {
> //imageIterator.Set??
>
> ++imageIterator; //operator++ increments the iterator one position in
> the positive direction
>
> }
>
>
> Also, the perfect final would be to have a Kernel of 25 pixels ( the same I
> have originally in my Matlab program), and then performing the convolution
> in each row of the x-direction of the image...I think that must be a
> way...so I follow reading the ITK manual and let's see I found something.
>
> Any Tip or idea or help will be highly appreciated!
>
> Antonio
>
> -----Mensaje original-----
> De: Cory Quammen [mailto:cquammen at cs.unc.edu]
> Enviado el: miércoles, 16 de noviembre de 2011 17:28
> Para: Antonio Gómez Barquero
> CC: insight-users at itk.org
> Asunto: Re: [Insight-users] 1D Convolution with Gaussian Kernel using
>
> Antonio,
>
> It looks like you are defining your kernel to be 256x256, not 256x1.
> You probably want to call
>
> size[0] = width;
> size[1] = 1;
>
> instead of
>
> size.Fill(width);
>
> You might want to consider using the GaussianImageSource
> (http://www.itk.org/Doxygen/html/classitk_1_1GaussianImageSource.html)
> to generate your Gaussian.
>
> Hope that helps,
> Cory
>
> 2011/11/16 Antonio Gómez Barquero <agb1 at alu.upct.es>:
>> SORRY, the last e-mail was icomplete, here is ok:
>>
>>
>>
>> My goal is to calculate the calculation in each row of a 2D-image ( in
>> the
>> x-direction)
>>
>> After following the tip from Cory I am trying to use the
>> ‘ConvolutionImageFilter’, and make a kernel with the Gaussian values I
>> calculate before.
>>
>> I took a look to this example
>> (http://www.itk.org/Wiki/ITK/Examples/ImageProcessing/ConvolutionImage
>> Filter) and my question is how to include the values of the Gaussian
>> filter to the kernel, I tried wit the code below and it compiles, but
>> it seems the execution has no end when I update the convolutionFilter…
>> Because of that I think that I am doing something wrong. My code is
>> below and is not so much, if some can give some help I would
>> appreciate that really a lot !!!!.
>>
>>
>>
>> typedef itk::ConvolutionImageFilter <ImageType> ConvFilterType;
>>
>>
>>
>> ImageType::Pointer kernel = ImageType::New();
>>
>> CreateKernel(kernel, Gaussian , 256);
>>
>>
>>
>> //Convolve image with kernel
>>
>> ConvFilterType::Pointer convolutionFilter =
>> ConvFilterType::New();
>>
>> convolutionFilter->SetInput(Li_itk);
>>
>> convolutionFilter->SetImageKernelInput(kernel);
>>
>> convolutionFilter->Update();
>>
>>
>>
>> void Reg_image_v2::CreateKernel(Reg_image_v2::ImageType::Pointer
>> kernel, double *Gaussian, unsigned int width) {
>>
>>
>>
>> ImageType::IndexType start;
>>
>> start.Fill(0);
>>
>> ImageType::SizeType size;
>>
>> size.Fill(width);
>>
>> ImageType::RegionType region;
>>
>> region.SetSize(size);
>>
>> region.SetIndex(start);
>>
>> kernel->SetRegions(region);
>>
>> kernel->Allocate();
>>
>>
>>
>> ImageType::IndexType pixelIndex;
>>
>> for (int i = 0 ; i < width ; i ++){
>>
>> pixelIndex[0] = i ;
>>
>> pixelIndex[1] = 0 ;
>>
>> kernel->SetPixel(pixelIndex,Gaussian[i]);
>>
>> }
>>
>> itk::ImageRegionIterator<ImageType> imageIterator(kernel,
>> region);
>>
>> while(!imageIterator.IsAtEnd())
>>
>> {
>>
>> //imageIterator.Set??
>>
>> ++imageIterator; //operator++ increments the iterator one
>> position in the positive direction
>>
>> }
>>
>>
>>
>>
>>
>> } // end createKernel
>>
>>
>>
>>
>>
>> Antonio Gómez Barquero
>>
>>
>>
>> Ingeniero de Telecomunicaciones -Becario Investigador asociado a
>> Actividades de I+D+I
>>
>> GTTS ( Grupo de Tratamiento y Teoría de la Señal)[
>> http://gtts.upct.es/]
>>
>> UPCT (Universidad Politécnica de Cartagena)[ http://www.upct.es/]
>>
>>
>>
>> _____________________________________
>> Powered by www.kitware.com
>>
>> Visit other Kitware open-source projects at
>> http://www.kitware.com/opensource/opensource.html
>>
>> Kitware offers ITK Training Courses, for more information visit:
>> http://www.kitware.com/products/protraining.html
>>
>> Please keep messages on-topic and check the ITK FAQ at:
>> http://www.itk.org/Wiki/ITK_FAQ
>>
>> Follow this link to subscribe/unsubscribe:
>> http://www.itk.org/mailman/listinfo/insight-users
>>
>>
>
>
>
> --
> Cory Quammen
> Research Associate
> Department of Computer Science
> The University of North Carolina at Chapel Hill
>
> _____________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Kitware offers ITK Training Courses, for more information visit:
> http://www.kitware.com/products/protraining.html
>
> Please keep messages on-topic and check the ITK FAQ at:
> http://www.itk.org/Wiki/ITK_FAQ
>
> Follow this link to subscribe/unsubscribe:
> http://www.itk.org/mailman/listinfo/insight-users
More information about the Insight-users
mailing list