我正在迭代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文件,我可以看到卷的每张幻灯片都没有问题。
有什么想法吗?
答案 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!