5.10 图像运算
5.10.1 数学运算
vtkImageMathematics提供了基本的一元和二元数学操作。根据不同的操作,需要一个或者两个输入图像。二元数字操作要求两个输入图像具有相同的像素数据类型,颜色分量。当两个图像大小不同时,输出图像的范围为两个输入图像范围的并集,并且原点和像素间隔与第一个输入图像保持一致。
1: vtkSmartPointer<vtkImageCanvasSource2D>imageSource =
2: vtkSmartPointer<vtkImageCanvasSource2D>::New();
3: imageSource->SetNumberOfScalarComponents(3);
4: imageSource->SetScalarTypeToUnsignedChar();
5: imageSource->SetExtent(0,4, 0, 4, 0, 0);
6: imageSource->SetDrawColor(100.0, 0, 0);
7: imageSource->FillBox(0, 4,0, 4);
8: imageSource->Update();
9:
10: vtkSmartPointer<vtkImageMathematics>imageMath =
11: vtkSmartPointer<vtkImageMathematics>::New();
12: imageMath->SetOperationToMultiplyByK();
13: imageMath->SetConstantK(2.0);
14: imageMath->SetInputConnection(imageSource->GetOutputPort());
15: imageMath->Update();
上例中生成了一副图像,图像中绘制了一个暗红色矩形;然后定义vtkImageMathematics对象,并调用SetOperationToMultiplyByK()函数来将图像中所有的像素值乘以一个常数K,这里常数值为2.0,下图为输出结果。
图5.23 图像数学运算
vtkImageMathematics中支持的二元数学操作有:
SetOperationToAdd:两个图像对应像素加法运算
SetOperationToSubtract:两个图像对应像素减法运算
SetOperationToMultiply:两个图像对应像素相乘运算
SetOperationToDivide:两个图像对应像素相除运算
SetOperationToConjugate:将两个标量图像对应像素组合为共轭复数
SetOpe