gpt4 book ai didi

c++ - Itk: ImageRegionIterator GetIndex() 调用使程序出现段错误

转载 作者:行者123 更新时间:2023-11-30 05:25:10 24 4
gpt4 key购买 nike

我正在遍历 Ikt::Image 的一个区域。根据程序的输入,此图像可能会有所不同。总结程序的主要部分:

//inputMask is an input and contains a label image

typedef typename itk::ImageRegionIterator<TInputImage> InputIteratorType;
std::auto_ptr<InputIteratorType> pIit;
if(someBool)
{
// here I remove some labeled areas, based on some characteristics
// ...
// relabeledMask = result of the evaluations

InputIteratorType iit(relabeledMask, relabeledMask->GetLargestPossibleRegion());
pIit.reset(&iit);
}
else
{
InputIteratorType iit(inputMask, inputMask->GetLargestPossibleRegion());
pIit.reset(&iit);
}

for (pIit->GoToBegin(); !pIit->IsAtEnd(); ++(*pIit))
{
if (pIit->Value() > 0)
{
typename TInputMask::IndexType seed = pIit->GetIndex();

// remaining part of the program
// ...
//
}
}

现在...最后一个 for 只有在 someBool 为 false 时才有效。如果为真,程序将在 typename TInputMask::IndexType seed = pIit->GetIndex(); 行崩溃并出现 Segmentation fault (core dumped)

此外,如果我将此 for 放在 if(someBool) 中(就在 pIit.reset(&iit); 之后),程序不会'崩溃。

最后要注意的是,如果我将 relabeledImage 保存为 Nifty 文件,我可以毫无问题地查看该卷的每张幻灯片。

有什么想法吗?

最佳答案

itk::ImageRegionIterator 等,保存一个指向图像的弱指针

https://itk.org/Doxygen410/html/classitk_1_1WeakPointer.html

因此您的 relabeledImage 可能已被破坏。另一种方法是有条件地引用图像:

TInputImage::Pointer imageToIterate;
if ( /* something */ )
{
// do stuff
theFilter->Update();
imageToIterate = theFilter->GetOutput();
}else
{
// do other stuff
}
typedef typename itk::ImageRegionIterator<TInputImage> InputIteratorType;
InputIteratorType iit(imageToIterate,imageToIterate->GetLargestPossibleRegion());
// iterate!

关于c++ - Itk: ImageRegionIterator GetIndex() 调用使程序出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38433252/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com