[Insight-users] Receiving the output of deconvolution filter, pls help!
Pratik Talole
pratiktalole at gmail.com
Sun May 20 07:39:14 EDT 2012
Hi.
I am new to ITK.
I need to do Wiener Deconvolution of a vector. The vector is generated
internally within the application, hence, I do not need to load it from a
file. I want ITK to give me an output vector which is a result of wiener
deconvolution of input vector.
The matlab equivalent would be : output = deconvwnr(input, kernel, SNR);
I wrote a piece of code to attempt the above using the
itk::WienerDeconvolutionImageFilter class. However, I am not able to
understand how am I to receive the output of the deconvolution.
There is a GetOutput() method. But it does not seem to return output in any
form.
Here is my code.
#include "itkImage.h"
#include <iostream>
#include "itkConstantBoundaryCondition.h"
#include "itkWienerDeconvolutionImageFilter.h"
#include "itkTestingMacros.h"
#include <vector>
using namespace std;
typedef itk::Image<double, 1> ImageType;
void InitInputVec(vector<double> &myVec);
void InitKernelVec(vector<double> &myVec);
void CreateImage(ImageType* const image, int len)
{
ImageType::IndexType start;
start.Fill(0);
ImageType::SizeType size;
size[0] =len;
ImageType::RegionType region(start,size);
image->SetRegions(region);
image->Allocate();
ImageType::PixelType initialValue = 0;
image->FillBuffer( initialValue );
}
void LoadDatainImage(vector<double> myVec, ImageType* image)
{
ImageType::IndexType pixelIndex;
for (int i = 0; i <myVec.size(); i++)
{
pixelIndex[0] = i;
image->SetPixel(pixelIndex, myVec[i]);
}
}
int main()
{
int ch_in;
int inputlen = 20;
int kernellen = 5;
int outputlen = 20;
ImageType::Pointer inputImage = ImageType::New();
CreateImage(inputImage, inputlen);
ImageType::Pointer kernelImage = ImageType::New();
CreateImage(kernelImage, kernellen);
ImageType::Pointer outputImage = ImageType::New();
CreateImage(outputImage, outputlen);
ImageType::IndexType pixelIndex;
vector<double> myInputVec, myKernelVec;
InitInputVec(myInputVec);
InitKernelVec(myKernelVec);
LoadDatainImage(myInputVec,inputImage);
LoadDatainImage(myKernelVec,kernelImage);
cout << endl << "Here is the input Image" << endl;
for (int i = 0; i <inputlen; i++)
{
pixelIndex[0] = i;
cout << inputImage->GetPixel(pixelIndex) << " ";
}
cout << endl << "Here is the Kernel Image" << endl;
for (int i = 0; i <kernellen; i++)
{
pixelIndex[0] = i;
cout << kernelImage->GetPixel(pixelIndex) << " ";
}
///////////////////////////////////////////////////////////////////////////////////////////////////////
typedef itk::WienerDeconvolutionImageFilter< ImageType , ImageType ,
ImageType> DeconvolutionFilterType;
DeconvolutionFilterType::Pointer deconvolutionFilter =
DeconvolutionFilterType::New();
bool normalize = false;
itk::ConstantBoundaryCondition< ImageType > cbc;
cbc.SetConstant( 0.0 );
deconvolutionFilter->SetInput( inputImage );
deconvolutionFilter->SetKernelImage( kernelImage );
deconvolutionFilter->SetNormalize( normalize );
deconvolutionFilter->SetBoundaryCondition( &cbc );
double noiseVariance = 1.0;
deconvolutionFilter->SetNoiseVariance( noiseVariance );
// outputImage = deconvolutionFilter->GetOutput();
deconvolutionFilter->Print( cout );
cout << endl << endl << "this is the output image" << endl;
for (int i = 0; i <outputlen; i++)
{
pixelIndex[0] = i;
cout << outputImage->GetPixel(pixelIndex) << " ";
}
//////////////////////////////////////////////////////////////
cin >> ch_in;
return 0;
}
void InitInputVec(vector<double> &myVec)
{
myVec.push_back(1);
myVec.push_back(2);
myVec.push_back(3);
myVec.push_back(4);
myVec.push_back(5);
myVec.push_back(6);
myVec.push_back(7);
myVec.push_back(8);
myVec.push_back(9);
myVec.push_back(10);
myVec.push_back(11);
myVec.push_back(12);
myVec.push_back(13);
myVec.push_back(14);
myVec.push_back(15);
myVec.push_back(16);
myVec.push_back(17);
myVec.push_back(18);
myVec.push_back(19);
myVec.push_back(20);
}
void InitKernelVec(vector<double> &myVec)
{
myVec.push_back(1);
myVec.push_back(2);
myVec.push_back(3);
myVec.push_back(4);
myVec.push_back(5);
}
--
View this message in context: http://itk-insight-users.2283740.n2.nabble.com/Receiving-the-output-of-deconvolution-filter-pls-help-tp7567771.html
Sent from the ITK Insight Users mailing list archive at Nabble.com.
More information about the Insight-users
mailing list