1、itk::ImageRegionIterator可在图像的指定区域内读取和修改像素值。
#include "itkImage.h"
#include "itkImageRegionIterator.h"
// 定义图像类型
constexpr unsigned int Dimension = 2;
using PixelType = float;
using ImageType = itk::Image<PixelType, Dimension>;
int main()
{
// 创建图像
ImageType::SizeType imageSize = { { 100, 100 } };
ImageType::Pointer image = ImageType::New();
image->SetRegions({imageSize});
image->Allocate();
// 设置图像像素值
itk::ImageRegionIterator<ImageType> it(image, image->GetLargestPossibleRegion());
for (; !it.IsAtEnd(); ++it)
{
it.Set(1.0); // 将图像所有像素设置为1.0
}
// 指定区域进行迭代
ImageType::RegionType region;
ImageType::SizeType regionSize = { { 50, 50 } }; // 指定区域的大小
ImageType::IndexType regionIndex = { { 25, 25 } }; // 指定区域的起始索引
region.SetSize(regionSize);
region.SetIndex(regionIndex);
itk::ImageRegionIterator<ImageType> regionIt(image, region);
for (; !regionIt.IsAtEnd(); ++regionIt)
{
// 在指定区域进行迭代,可以在这里执行你的操作
// 例如,将指定区域的像素值设置为2.0
regionIt.Set(2.0);
}
return 0;
}
2、itk::ImageRegionConstIterator只可在图像的指定区域内读取像素值。
#include "itkImage.h"
#include "itkImageRegionIterator.h"
#include "itkImageRegionConstIterator.h"
// 定义图像类型
constexpr unsigned int Dimension = 2;
using PixelType = float;
using ImageType = itk::Image<PixelType, Dimension>;
int main()
{
// 创建图像
ImageType::SizeType imageSize = { { 100, 100 } };
ImageType::Pointer image = ImageType::New();
image->SetRegions({imageSize});
image->Allocate();
// 设置图像像素值
itk::ImageRegionIterator<ImageType> it(image, image->GetLargestPossibleRegion());
for (; !it.IsAtEnd(); ++it)
{
it.Set(1.0); // 将图像所有像素设置为1.0
}
// 指定区域进行迭代(只读)
ImageType::RegionType region;
ImageType::SizeType regionSize = { { 50, 50 } }; // 指定区域的大小
ImageType::IndexType regionIndex = { { 25, 25 } }; // 指定区域的起始索引
region.SetSize(regionSize);
region.SetIndex(regionIndex);
itk::ImageRegionConstIterator<ImageType> regionIt(image, region);
for (; !regionIt.IsAtEnd(); ++regionIt)
{
// 在指定区域进行迭代,可以在这里读取像素值,但不能修改它们
PixelType pixelValue = regionIt.Get();
std::cout << "Pixel Value: " << pixelValue << std::endl;
}
return 0;
}