Quiet
  • 主页
  • 归档
  • 分类
  • 标签
  • 链接
  • 关于我

bajiu

  • 主页
  • 归档
  • 分类
  • 标签
  • 链接
  • 关于我
Quiet主题
  • C#
  • VTK

使用 ActiViZ 对图像使用mask处理(三)

bajiu
.Net客户端

2024-02-29 11:36:00

掩膜(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);
    }
}

maskImage_1

再创建个掩模图:

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);
    }
}

maskImage_2

最后用vtkImageMask来Mask一下:

 var imageMask = vtkImageMask.New();
 imageMask.SetInputData(0, inputImage); // 设置输入图像
 imageMask.SetInputData(1, maskImage);  // 设置掩模图像
 imageMask.SetMaskedOutputValue(0);  // 被掩蔽的像素将被设置为0
 imageMask.Update();
 var maskedImage = imageMask.GetOutput();

maskImage_3

就行了

上一篇

Anaconda 常用命令

下一篇

ActiViZ之vtkMath类(四)

©2024 By bajiu.