[vtkusers] Problem interfacing VTK with ITK filter output
Madhusudhanan Balasubramanian
madhu_lsu at yahoo.com
Wed Nov 3 10:53:54 EST 2004
Hi all,
I wrote a small routine that applied median filter (ITK) on an input buffer (unsigned char *) and imports the filter output to VTK. Initially, when I returned the vtkImageData * output from 'ImageToVTKImageFilter', I had problem accessing the data (memory exception). So I decided to copy the data into a separate buffer before returning from the routine. However the result is just some noisy image (nowhere close to the input image). I am herewith attaching the routine that I wrote. I appreciate if anyone has any inputs on this.
Thanks,
Madhu.
//Apply median filter to the input buffer
void medianOnBuffer(unsigned char *userBuffer, int imgWidth, int imgHeight, vtkImageData* medianImage, unsigned char *outputImageUSC){
int *dimensions;
dimensions = new int[2];
dimensions[0] = imgWidth;
dimensions[1] = imgHeight;
typedef unsigned char pixelType;
typedef itk::Image<pixelType, 2> imageType;
typedef itk::ImportImageFilter<pixelType, 2> importFilterType;
importFilterType::Pointer importFilter = importFilterType::New();
importFilterType::SizeType size;
size[0] = imgWidth; //x-axis
size[1] = imgHeight; //y-axis
importFilterType::IndexType start;
start.Fill(0);
importFilterType::RegionType region;
region.SetIndex(start);
region.SetSize(size);
importFilter->SetRegion(region);
double origin[2];
origin[0] = 0.0;
origin[1] = 0.0;
importFilter->SetOrigin(origin);
double spacing[2];
spacing[0] = 1.0;
spacing[1] = 1.0;
importFilter->SetSpacing(spacing);
//
const bool importImageFilterWillOwnTheBuffer = false;
importFilter->SetImportPointer(userBuffer, imgWidth*imgHeight, importImageFilterWillOwnTheBuffer);
importFilter->Update();
//Apply median filter to the image
typedef itk::Image<pixelType, 2> InputImageType;
typedef itk::Image<pixelType, 2> OutputImageType;
typedef itk::MedianImageFilter<InputImageType, OutputImageType> filterType;
filterType::Pointer filter = filterType::New();
//Define filter boundaries
InputImageType::SizeType indexRadius;
indexRadius[0] = 1;
indexRadius[1] = 1;
filter->SetRadius(indexRadius);
filter->SetInput(importFilter->GetOutput());
filter->Update();
//Import the filtered image to VTK
typedef itk::ImageToVTKImageFilter<OutputImageType> connectorType;
connectorType::Pointer connector = connectorType::New();
connector->SetInput(filter->GetOutput());
connector->Update();
//Copy the output
medianImage->ShallowCopy(connector->GetOutput());
medianImage->Update();
//Validate the imported image
unsigned char *testBuffer = (unsigned char *)medianImage->GetScalarPointer();
//copy result to outputImageUSC
int i, j;
for (i = 0; i < dimensions[1]; i++)
for (j = 0; j < dimensions[0]; j++)
outputImageUSC[i * dimensions[0] + j] = testBuffer[i * dimensions[0] + j];
}
---------------------------------
Do you Yahoo!?
Check out the new Yahoo! Front Page. www.yahoo.com/a
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20041103/fdde6441/attachment.htm>
More information about the vtkusers
mailing list