Itk: ImageRegionIterator GetIndex() 调用使程序出现段错误
Itk: ImageRegionIterator GetIndex() call makes the program segfault
我正在遍历 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
为假时有效。如果为真,程序将在 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!
我正在遍历 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
为假时有效。如果为真,程序将在 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!