掩膜(mask)的定义
用选定的图像,图形或物体,对处理的图像(全部或局部)进行遮挡,来控制图像处理的区域或处理过程。用于覆盖的特定图像或物体称为掩模或模板。光学图像处理中,掩模可以足胶片,滤光片等。
掩模是由0和1组成的一个二进制图像。当在某一功能中应用掩模时,1值区域被处理,被屏蔽的0值区域不被包括在计算中。通过指定的数据值,数据范围,有限或无限值,感兴趣区和注释文件来定义图像掩模,也可以应用上述选项的任意组合作为输入来建立掩模。
主要功能
vtkImageMask
是Visualization Toolkit (VTK)
中用于图像处理的类,它允许你根据一个掩模图像(mask image)
来选择性地保留或忽略输入图像(input image)
中的像素。这是通过将输入图像与掩模图像进行逐像素的逻辑AND
操作实现的:只有当掩模图像中相应的像素值非零时,输入图像的相应像素才会被保留;否则,该像素会被设置为指定的背景值或简单地忽略。
- 图像掩蔽(Masking):
vtkImageMask
通过掩模图像定义了输入图像中哪些区域应该被保留,哪些应该被忽略或设置为背景值。 - 背景值设置:你可以指定一个背景值,该值将被用来填充那些在掩模图像中对应于零值的输入图像像素。
- 灵活的数据类型支持:与其他VTK图像处理类似,
vtkImageMask
支持多种数据类型的输入,使其能够轻松集成到复杂的图像处理管线中。
使用方法
在使用vtkImageMask
时,你需要提供两个主要的输入:
- 输入图像(Input Image):这是你想要进行掩蔽操作的原始图像。
- 掩模图像(Mask Image):这是一个与输入图像尺寸相同的二值或布尔图像,用于指示哪些像素应该被保留。
此外,你可以设置一个背景值,用于替换那些被掩模图像排除的像素。
示例
先创建个底图:
var inputImage = vtkImageData.New();
inputImage.SetDimensions(512, 512, 1);
inputImage.SetSpacing(1.0, 1.0, 1.0);
inputImage.SetOrigin(0.0, 0.0, 0.0);
inputImage.AllocateScalars(3, 1); // 单通道灰度图
// 填充输入图像的灰度值
for (int y = 0; y < 512; y++)
{
for (int x = 0; x < 512; x++)
{
var index = y * 512 + x;
var pixelValue = (x + y) % 256; // 创建一个简单的灰度渐变
inputImage.GetPointData().GetScalars().SetTuple1(index, pixelValue);
}
}
再创建个掩模图:
var maskImage = vtkImageData.New();
maskImage.SetDimensions(512, 512, 1);
maskImage.SetSpacing(1.0, 1.0, 1.0);
maskImage.SetOrigin(0.0, 0.0, 0.0);
maskImage.AllocateScalars(3, 1);
// 填充掩模图像,我们将左半部分设为0(黑色),右半部分设为255(白色),只有白色部分会显示输入图像
for (int y = 0; y < 512; y++)
{
for (int x = 0; x < 512; x++)
{
var index = y * 512 + x;
var maskValue = x < 256 ? 0 : 255;
maskImage.GetPointData().GetScalars().SetTuple1(index, maskValue);
}
}
最后用vtkImageMask来Mask一下:
var imageMask = vtkImageMask.New();
imageMask.SetInputData(0, inputImage); // 设置输入图像
imageMask.SetInputData(1, maskImage); // 设置掩模图像
imageMask.SetMaskedOutputValue(0); // 被掩蔽的像素将被设置为0
imageMask.Update();
var maskedImage = imageMask.GetOutput();
就行了