在ITK获得区域最小坐标

时间:2015-10-09 07:04:24

标签: image-processing itk

我是ITK的新手,想要获得模糊2D图像的区域最小值(强度)的位置。应用itk::RegionalMinimaImageFilter后,我想将这些点存储在矢量中。我对该特定部分的代码如下所示:

// find regional minima
typedef itk::RegionalMinimaImageFilter <FloatImageType, ImageType > RegionalMinimaImageFilterType;
RegionalMinimaImageFilterType::Pointer regionalMinimaImageFilter = RegionalMinimaImageFilterType::New ();
regionalMinimaImageFilter->SetInput(gaussianFilter->GetOutput());
regionalMinimaImageFilter->Update();

在此之后,我想我需要拨打regionalMinimaImageFilter->GetIndexedOutputs();,但我不太确定。我怎样才能轻松获得区域最小值的位置?

1 个答案:

答案 0 :(得分:2)

您可以做的就是使用索引迭代器完成输出,使用SetForegroundValue方法&gt;存储所有像素的坐标,其值等于您在RegionalMinimaImageFilter中设置的前景值。它可以或多或少地像这样做(避免测试代码):

//Declare an iterator of a given type to iterate in all the image
//See how to declare the iterator type in the example given
IteratorType outputIt( outputImage, filter->GetOutput()->GetRequestedRegion());

//Go to the begin of the image
outputIt.GoToBegin();

//Iterate over the image
while( !outputIt.IsAtEnd() )
{
    if ( outputIt.Get() == filter->GetForegroundValue () ) {
        ImageType::IndexType idx = outputIt.GetIndex();
        //Print the coordinates of the pixel 
        //This are array coordinates, to get 'world' coordinates
        //multiply by spacing and add origin
        std::cout << "Coordinates : " << idx[0] << "," << idx[1] << std::endl;
    }
    ++outputIt; //Go to the next pixel
}

这是通过ITK图像的标准方式,无论尺寸如何。它将首先通过第一维,然后是第二维,依此类推。

可以在此处找到使用索引迭代器的完整示例:http://www.itk.org/Doxygen45/html/Iterators_2ImageRegionIteratorWithIndex_8cxx-example.html

您也可以阅读ITK手册(http://www.itk.org/ItkSoftwareGuide.pdf)第6.3节中的迭代器。