2011-11-16 2 views
0

Mon but est de calculer le calcul dans chaque ligne d'une image 2D (dans la direction x) Après avoir suivi le conseil de Cory, j'essaie d'utiliser le 'ConvolutionImageFilter', et faire un noyau avec les valeurs gaussiennes que je calcule avant. J'ai jeté un coup d'oeil à cet exemple (http://www.itk.org/Wiki/ITK/Examples/ImageProcessing/ConvolutionImageFilter) et ma question est de savoir comment inclure les valeurs du filtre gaussien au noyau, j'ai essayé code ci-dessous et il compile, mais il semble que l'exécution n'a pas de fin quand je mets à jour le convolutionFilter ... A cause de cela, je pense que je fais quelque chose de mal. Mon code est ci-dessous et n'est pas tellement, si certains peuvent donner de l'aide j'apprécierais vraiment beaucoup !!!!1D Convolution avec noyau gaussien en utilisant

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[0] = width; 
size[1] = 1; 

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

Répondre

Questions connexes