Itk:ImageRegionIterator GetIndex()调用使程序段错误

时间:2016-07-18 09:33:49

标签: c++ itk

我正在迭代Ikt :: Image的一个区域。该图像可以根据程序的输入而不同。总结该计划的主要部分:

.content{
  width:100%;
  height:auto;
  border-radius:10px;
  background-color:gray;
}

table{
  width:100%;
  cursor:pointer;
}

tr:first-child td:first-child { border-top-left-radius: 10px; }
tr:first-child td:last-child { border-top-right-radius: 10px; }
tr:last-child td:first-child { border-bottom-left-radius: 10px; }
tr:last-child td:last-child { border-bottom-right-radius: 10px; }

table tr:hover{
  background-color:gold;
  border-radius:10px;
}

现在......仅当//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 // ... // } } 为false时,此最后for才有效。如果确实如此,程序会在someBool行与typename TInputMask::IndexType seed = pIit->GetIndex();崩溃。

此外,如果我将此Segmentation fault (core dumped)置于for(仅在if(someBool)之后),则程序不会崩溃。

作为最后一点,如果我将pIit.reset(&iit);保存为Nifty文件,我可以看到卷的每张幻灯片都没有问题。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

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!