ITK setPixel 遇到堆损坏

ITK setPixel meets heap corruption

本文关键字:损坏 遇到 setPixel ITK      更新时间:2023-10-16

我对ITK有一些疑问。我首先创建一个图像。然后我使用"for"来设置每个像素的值。之后,当程序步骤为"图像>设置间距"时,问题会显示出来。VS2010 起诉这可能是由于堆损坏造成的。当我不使用"for"循环时,没有问题。

谁能帮我? 我在VS2010和ITK 4.4.2中运行该程序

#include "iostream"
#include "itkImage.h"
using namespace std;
int main()
{
    typedef itk::Image<unsigned char,2> ImageType;
    ImageType::IndexType start;
    ImageType::SizeType size;
    start[0] = 0;
    start[1] = 0;
    size[0] = 100;
    size[1] = 150;
    ImageType::RegionType region;
    region.SetIndex(start);
    region.SetSize(size);
    ImageType::Pointer image = ImageType::New();
    image->SetLargestPossibleRegion(region);
    image->Allocate();
    image->FillBuffer( 0 );
    for(int j=0; j<150; j++)
    {
        for (int i=0;i<100;i++)
        {
            ImageType::PixelType pixelVal;
            pixelVal = i+j;
            ImageType::IndexType index = {{i,j}};
            image->SetPixel(index,pixelVal);
        }
    }
    ImageType::SpacingType spacing;
    spacing[0] = 0.1;
    spacing[1] = 0.4;
    image->SetSpacing(spacing);
    ImageType::SpacingType sp =image->GetSpacing();
    cout<<sp[0]<<' '<<sp[1]<<endl;
}

问题是您没有使用 image->SetBufferedRegion(region) 方法来设置位于内存中的图像区域。

您应该替换以下行

image->SetLargestPossibleRegion(region);

image->SetRegions(region);

SetRegions()方法将同时调用SetLargestPossibleRegion()SetRequestedRegion()SetBufferedRegion()方法以及您提供给它的区域。

手动创建映像时,应始终使用 SetRegions()


老实说,我不了解此错误的全部范围。从运行时给出的错误中出了什么问题根本不明显......只是在销毁image对象时会发生某种错误。它与SetSpacing()方法或分配给index对象的方式无关。