1、通过 itk::Image 类来创建新的图像
首先定义了图像的大小(256x256)。然后,使用 itk::Image 类创建了一个二维图像。我们设置了图像的区域(SetRegions)和分配内存(Allocate),然后使用 itk::ImageRegionIterator 遍历了整个图像,将所有像素值设置为0。
#include "itkImage.h"
constexpr unsigned int Dimension = 2;
using PixelType = unsigned char;
using ImageType = itk::Image<PixelType, Dimension>;
int main()
{
// 定义图像大小
ImageType::IndexType imageStart = { {0,0} };
ImageType::SizeType imageSize = { { 256, 256 } };
// 创建图像
ImageType::Pointer image = ImageType::New();
image->SetRegions({imageStart}, {imageSize});
image->Allocate();
// 设置图像像素值(这里是示例,实际使用时可以根据需求设置图像数据)
itk::ImageRegionIterator<ImageType> it(image, image->GetLargestPossibleRegion());
for (; !it.IsAtEnd(); ++it)
{
it.Set(0); // 设置所有像素值为0
}
// 在此可以执行其他操作,如图像处理、分析等
return 0;
}
2、通过itk::ImageDuplicator复制图像
itk::ImageDuplicator 实际上是通过调用 itk::ImageRegionIterator 来遍历源图像并复制像素值。这个类提供了更便捷的接口,使得图像复制更加容易。
#include "itkImage.h"
#include "itkImageDuplicator.h"
constexpr unsigned int Dimension = 2;
using PixelType = unsigned char;
using ImageType = itk::Image<PixelType, Dimension>;
int main()
{
// 创建源图像
ImageType::IndexType imageStart = { {0,0} };
ImageType::SizeType imageSize = { { 256, 256 } };
ImageType::Pointer sourceImage = ImageType::New();
sourceImage->SetRegions({imageStart}, {imageSize});
sourceImage->Allocate();
// 设置源图像像素值(这里是示例,实际使用时可以根据需求设置图像数据)
itk::ImageRegionIterator<ImageType> sourceIt(sourceImage, sourceImage->GetLargestPossibleRegion());
for (; !sourceIt.IsAtEnd(); ++sourceIt)
{
sourceIt.Set(rand() % 256);
}
// 使用 ImageDuplicator 复制源图像
using DuplicatorType = itk::ImageDuplicator<ImageType>;
DuplicatorType::Pointer duplicator = DuplicatorType::New();
duplicator->SetInputImage(sourceImage);
duplicator->Update();
// 获取复制后的图像
ImageType::Pointer targetImage = duplicator->GetOutput();
// 在此可以执行其他操作,如保存目标图像到文件等
return 0;
}