VTK里提供了许多对一个或多个图像的像素进行计算的类
数学计算
通过 vtkImageMathematics 类来对图像进行一元或二元计算
一元计算
auto imageMath = vtkSmartPointer<vtkImageMathematics>::New();
imageMath->SetInputConnection(reader->GetOutputPort());
imageMath->SetOperationToCos();
更多
SetOperationToInvert()
图像像素值取倒数运算SetOperationToSin()
图像像素值正弦运算SetOperationToCos()
图像像素值余弦运算SetOperationToExp()
图像像素值自然指数运算SetOperationToLog()
图像像素值自然对数运算SetOperationToAbsoluteValue()
图像像素值取绝对值SetOperationToSquare()
图像像素值平方运算SetOperationToSquareRoot()
图像像素值平方根运算SetOperationToATAN()
图像像素值反正切运算SetOperationToATAN2()
图像像素值二元反正切运算SetOperationToMultiplyByK()
图像像素值乘以常数K,需要先调用SetConstantK()设置K值SetOperationToAddConstant()
图像像素值加上常数K,需要先调用SetConstantK()设置K值SetOperationToReplaceCByK()
将图像中像素为C的像素值替换为K,需要先调用 SetConstantK() 和 SetConstantC() 设置K和C值
二元计算
二元数学计算要求两个输入图像具有相同的像素数据类型和颜色组分。当两个图像大小不同时,输出图像的范围为两个输入图像范围的并集,并且原点和像素间隔与第一个输入图像保持一致
auto imageMath = vtkSmartPointer<vtkImageMathematics>::New();
imageMath->SetInputConnection(0, reader1->GetOutputPort());
imageMath->SetInputConnection(1, reader2->GetOutputPort());
imageMath->SetOperationToAdd();
更多
SetOperationToAdd()
两个图像对应像素加法运算SetOperationToSubtract()
两个图像对应像素减法运算SetOperationToMultiply()
两个图像对应像素相乘运算SetOperationToDivide()
两个图像对应像素相除运算SetOperationToConjugate()
将两个标量图像对应像素组合为共辄复数SetOperationToComplexMultiply()
两个图像对应像素复数乘法运算SetOperationToMin()
取两个图像对应像素中的较小值SetOperationToMax()
取两个图像对应像素中的较大值
逻辑运算
与数学运算差不多
auto imageLogic = vtkSmartPointer<vtkImageLogic>::New();
imageLogic->SetInputConnection(0, imageSource1->GetOutputPort());
imageLogic->SetInputConnection(1, imageSource2->GetOutputPort());
// 异或运算
imageLogic->SetOperationToXor();
// 设置结果为True的像素值
imageLogic->SetOutputTrueValue(200);
更多
SetOperationToAnd()
逻辑与SetOperationToOr()
逻辑或SetOperationToXor()
逻辑异或SetOperationToNand()
逻辑与非SetOperationToNor()
逻辑或非SetOperationToNot()
逻辑非
图像二值化
二值图像的每个像素只有两个可能的取值,即 0 和 255。而二值化就是设置一个灰度阀值,将阀值以上的像素值设置为 255,其余设置为 0.具体再在VTK中可以通过 vtkImageThreshold 类实现
auto threshold = vtkSmartPointer<vtkImageThreshold>::New();
threshold->SetInputConnection(reader->GetOutputPort());
// 方法一:大于此阀值为 in value
threshold->ThresholdByUpper(128);
// 方法二:小于此阀值为 in value
threshold->ThresholdByLower(128);
// 方法三:在区间内为 in value
threshold->ThresholdBetween(10, 200);
threshold->SetInValue(255);
threshold->SetOutValue(0);
文档信息
- 本文作者:wzx
- 本文链接:https://masterwangzx.com/2018/11/07/vtk-image-math/
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)