news 2026/6/25 16:43:41

ImageWeightedSum 将两个不同的 2D 图像以指定权重进行线性加权求和

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ImageWeightedSum 将两个不同的 2D 图像以指定权重进行线性加权求和

一:主要的知识点

1、说明

本文只是教程内容的一小段,因博客字数限制,故进行拆分。主教程链接:vtk教程——逐行解析官网所有Python示例-CSDN博客

2、知识点纪要

本段代码主要涉及的有①2D图像的的边界确定,②图像数据的类型转换,②图像的权重加减


二:代码及注释

from vtkmodules.vtkCommonColor import vtkNamedColors from vtkmodules.vtkImagingSources import vtkImageMandelbrotSource, vtkImageSinusoidSource from vtkmodules.vtkImagingCore import vtkImageCast from vtkmodules.vtkImagingMath import vtkImageWeightedSum from vtkmodules.vtkRenderingCore import vtkImageActor, vtkRenderWindow, vtkRenderWindowInteractor, vtkRenderer def main(): colors = vtkNamedColors() # 创建第一幅图像 source1 = vtkImageMandelbrotSource() """ SetWholeExtent 用来定义任何图像或 3D 结构化数据集的边界 Xmin=0 在X轴上的起始像素的索引 Xmax=255 在x轴上的结束像素索引 后面的以此类推 """ source1.SetWholeExtent(0, 255, 0, 255, 0, 0) source1.Update() """ vtkImageCast 专门用于将 2D 或 3D 图像数据中每个像素的标量类型(如 int, float, unsigned char)转换为另一种类型 保证了数据的兼容性和精度 如果在整数计算中进行四舍五入或截断,每次乘法和加法都会损失精度,导致混合图像失真或出现明显的“阶梯”伪影 """ source1Double = vtkImageCast() source1Double.SetInputConnection(source1.GetOutputPort()) source1Double.SetOutputScalarTypeToDouble() # 创建第二幅图像 source2 = vtkImageSinusoidSource() source2.SetWholeExtent(0, 255, 0, 255, 0, 0) source2.Update() """ vtkImageWeightedSum 将多个输入图像(至少两个)根据用户指定的权重进行线性组合(加权求和),从而生成一个新的输出图像 """ sumFilter = vtkImageWeightedSum() sumFilter.SetWeight(0, 0.8) # 第0幅图像的权重 sumFilter.SetWeight(1, 0.2) # 第1幅图像的权重 sumFilter.AddInputConnection(source1Double.GetOutputPort()) sumFilter.AddInputConnection(source2.GetOutputPort()) sumFilter.Update() """ 在图像混合(加权求和)之后将数据类型转换为UnsignedChar,意味着每个像素都可以表示0到255之间的256中灰度级别 是为了可视化和渲染的需要 """ source1CastFilter = vtkImageCast() source1CastFilter.SetInputConnection(source1.GetOutputPort()) source1CastFilter.SetOutputScalarTypeToUnsignedChar() source1CastFilter.Update() source2CastFilter = vtkImageCast() source2CastFilter.SetInputConnection(source2.GetOutputPort()) source2CastFilter.SetOutputScalarTypeToUnsignedChar() source2CastFilter.Update() summedCastFilter = vtkImageCast() summedCastFilter.SetInputConnection(sumFilter.GetOutputPort()) summedCastFilter.SetOutputScalarTypeToUnsignedChar() summedCastFilter.Update() source1Actor = vtkImageActor() source1Actor.GetMapper().SetInputConnection(source1CastFilter.GetOutputPort()) source2Actor = vtkImageActor() source2Actor.GetMapper().SetInputConnection(source2CastFilter.GetOutputPort()) summedActor = vtkImageActor() summedActor.GetMapper().SetInputConnection(summedCastFilter.GetOutputPort()) renderWindow = vtkRenderWindow() renderWindow.SetSize(600, 300) # And one interactor interactor = vtkRenderWindowInteractor() interactor.SetRenderWindow(renderWindow) # ViewPort=[Xmin, Ymin, Xmax, Ymax] leftViewport = [0.0, 0.0, 0.33, 1.0] centerViewport = [0.33, 0.0, .66, 1.0] rightViewport = [0.66, 0.0, 1.0, 1.0] # Setup renderers leftRenderer = vtkRenderer() renderWindow.AddRenderer(leftRenderer) leftRenderer.SetViewport(leftViewport) leftRenderer.SetBackground(colors.GetColor3d('Peru')) centerRenderer = vtkRenderer() renderWindow.AddRenderer(centerRenderer) centerRenderer.SetViewport(centerViewport) centerRenderer.SetBackground(colors.GetColor3d('DarkTurquoise')) rightRenderer = vtkRenderer() renderWindow.AddRenderer(rightRenderer) rightRenderer.SetViewport(rightViewport) rightRenderer.SetBackground(colors.GetColor3d('SteelBlue')) leftRenderer.AddActor(source1Actor) centerRenderer.AddActor(source2Actor) rightRenderer.AddActor(summedActor) leftRenderer.ResetCamera() centerRenderer.ResetCamera() rightRenderer.ResetCamera() renderWindow.SetWindowName('ImageWeightedSum') renderWindow.Render() interactor.Start() if __name__ == '__main__': main()
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/18 9:51:05

KLayout终极指南:5步掌握专业版图设计工具

KLayout终极指南:5步掌握专业版图设计工具 【免费下载链接】klayout KLayout Main Sources 项目地址: https://gitcode.com/gh_mirrors/kl/klayout KLayout是一款功能强大的开源版图设计工具,为半导体工程师提供完整的集成电路设计解决方案。无论…

作者头像 李华
网站建设 2026/6/13 21:28:41

为什么顶尖团队都在用Open-AutoGLM?(深度解析其5大技术优势)

第一章:Open-AutoGLM 核心架构概述Open-AutoGLM 是一个面向通用语言建模与自动化任务执行的开源框架,旨在通过模块化设计实现自然语言理解、生成与外部工具协同的无缝集成。其核心架构围绕“感知-规划-执行-反馈”闭环构建,支持动态任务解析与…

作者头像 李华
网站建设 2026/6/20 22:43:33

如何快速获取高质量中文字体?Source Han Sans TTF 完整安装指南

如何快速获取高质量中文字体?Source Han Sans TTF 完整安装指南 【免费下载链接】source-han-sans-ttf A (hinted!) version of Source Han Sans 项目地址: https://gitcode.com/gh_mirrors/so/source-han-sans-ttf 在数字设计和开发中,中文字体的…

作者头像 李华
网站建设 2026/6/16 13:28:25

家政服务平台|基于springboot + vue家政服务平台系统(源码+数据库+文档)

家政服务平台 目录 基于springboot vue家政服务平台系统 一、前言 二、系统功能演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取: 基于springboot vue家政服务平台系统 一、前言 博主介绍&…

作者头像 李华
网站建设 2026/6/16 12:09:39

电力行业规程查询系统建设——基于anything-llm的实践案例

电力行业规程查询系统建设——基于anything-llm的实践案例 在电力系统的日常运维中,一个值班员面对突发告警时最怕什么?不是设备故障本身,而是“我记得哪条规程提过处理方法,但翻了半天没找到”。这种场景几乎每天都在变电站、调度…

作者头像 李华