python中使用VTK中图像融合方法-VTKImageBlend 的用法

介绍

VTK中图像融合方法-VTKImageBlend 的用法:
在一些场景中,我们需要将二张图像进行融合,在VTK中,有这种方法,就是 VTKImageBlend。

用法说明:

官网的说明

使用alpha或opacity混合图像

vtkImageBlend将L、LA、RGB或RGBA图像作为输入,并根据每个输入的alpha值和/或不透明度设置混合它们。

输出结果的 spacing, origin, extent, 以及像素通道与第一个输入的相同。如果输入有alpha值,那么这个alpha值将被原封不动地复制到输出中。此外,如果第一个输入有一个或两个分量,即如果它是L(灰度)或LA(灰度+α),则所有其他输入也必须是L或LA。

提供不同的混合模式:

正常(默认):这是OpenGL和其他图形包使用的标准混合模式。输出始终具有与第一个输入相同数量的通道和相同的范围。第一个输入的alpha值不用于混合计算,而是直接复制到输出。

output <- input[0]
foreach input i {
  foreach pixel px {
    r <- input[i](px)(alpha) * opacity[i]
    f <- (255 - r)
    output(px) <- output(px) * f + input(px) * r
  }
}

复合:图像被复合在一起,每个组件都按alpha/不透明度值的总和进行缩放。使用CompoundThreshold方法设置在复合模式下指定阈值。不透明度*α小于或等于此阈值的像素将被忽略。第一个输入的alpha值(如果存在)不会复制到输出的alpha值。输出始终具有与第一个输入相同数量的组件和相同的范围。如果设置了CompoundAlpha,则还将使用alpha加权混合计算来计算输出的alpha值。

output <- 0
foreach pixel px {
  sum <- 0
  foreach input i {
    r <- input[i](px)(alpha) * opacity(i)
    sum <- sum + r
    if r > threshold {
      output(px) <- output(px) + input(px) * r
    }
  }
  output(px) <- output(px) / sum
}
example
#!/usr/bin/env python
# encoding: utf-8

import vtk

if __name__ == '__main__':

    image_jpeg_reader_vol = vtk.vtkJPEGReader()
    image_jpeg_reader_vol.SetFileName(r'D:/result_1.jpg')
    image_jpeg_reader_vol.Update()
    print( image_jpeg_reader_vol.GetNumberOfScalarComponents())

    image_jpeg_reader_mask = vtk.vtkJPEGReader()
    image_jpeg_reader_mask.SetFileName(r'D:/result_2.jpg')
    image_jpeg_reader_mask.Update()
    print(image_jpeg_reader_mask.GetNumberOfScalarComponents())

    image_blender = vtk.vtkImageBlend()
    image_blender.AddInputConnection(image_jpeg_reader_vol.GetOutputPort())
    image_blender.AddInputConnection(image_jpeg_reader_mask.GetOutputPort())
    image_blender.SetOpacity(0, 0.5)
    image_blender.SetOpacity(1, 0.5)
    image_blender.Update()

    # setup actor
    image_actor = vtk.vtkImageActor()
    image_actor.SetInputData(image_blender.GetOutput())

    # setup render
    renderer = vtk.vtkRenderer()
    renderer.AddActor(image_actor)
    renderer.ResetCamera()
    renderer.SetBackground(0,0,0)

    # setup window
    ren_win = vtk.vtkRenderWindow()
    ren_win.AddRenderer(renderer)
    ren_win.SetWindowName("read and show jpg test")
    ren_win.SetSize(512,512)
    ren_win.Render()

    style = vtk.vtkInteractorStyleImage()
    rwi = vtk.vtkRenderWindowInteractor()
    rwi.SetInteractorStyle(style)
    rwi.SetRenderWindow(ren_win)

    rwi.Initialize()
    rwi.Start()
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值