ContourTriangulator从一个PNG图像中提取2D等值线(isoline)

一:主要的知识点

1、说明

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

2、知识点纪要

本段代码主要涉及的有①等值面提取,②多重采样的含义

二:代码及注释

python 复制代码
import vtkmodules.vtkRenderingOpenGL2
from vtkmodules.vtkCommonColor import vtkNamedColors
from vtkmodules.vtkFiltersCore import vtkMarchingSquares
from vtkmodules.vtkFiltersGeneral import vtkContourTriangulator
from vtkmodules.vtkIOImage import vtkPNGReader
from vtkmodules.vtkRenderingCore import vtkActor, vtkDataSetMapper, vtkRenderWindow, vtkRenderWindowInteractor, \
    vtkRenderer
 
def main():
    file_name = 'Data/fullhead15.png'
    iso_value = 500
    colors = vtkNamedColors()
 
    reader = vtkPNGReader()
    reader.SetFileName(file_name)
    reader.Update()
 
    iso = vtkMarchingSquares()
    iso.SetInputConnection(reader.GetOutputPort())
    """
    0表示等值线的索引,vtkMarchingSquares 可以同时提取多条不同数值的等值线
    iso_value 就是图像里像素值 = 500 的位置所形成的等值线
    """
    iso.SetValue(0, iso_value)
 
    iso_mapper = vtkDataSetMapper()
    iso_mapper.SetInputConnection(iso.GetOutputPort())
    iso_mapper.ScalarVisibilityOff()
 
    iso_actor = vtkActor()
    iso_actor.SetMapper(iso_mapper)
    iso_actor.GetProperty().SetColor(colors.GetColor3d("MediumOrchid"))
 
    poly = vtkContourTriangulator()
    poly.SetInputConnection(iso.GetOutputPort())
 
    poly_mapper = vtkDataSetMapper()
    poly_mapper.SetInputConnection(poly.GetOutputPort())
    poly_mapper.ScalarVisibilityOff()
 
    poly_actor = vtkActor()
    poly_actor.SetMapper(poly_mapper)
    poly_actor.GetProperty().SetColor(colors.GetColor3d("Gray"))
 
 
    renderer = vtkRenderer()
    ren_win = vtkRenderWindow()
    """
    SetMultiSamples  关闭多重采样
    在 OpenGL 渲染里,多重采样抗锯齿 (MSAA) 会让边缘更平滑,看起来不那么锯齿化。
    默认情况下,vtkRenderWindow 可能会打开多重采样(比如 8x)。
    这会增加计算量,有时候也会导致绘制一些特殊几何体(比如透明对象、点云、线框)时出现问题
    SetMultiSamples(0) 的含义
    0 = 关闭多重采样 → 没有抗锯齿(速度快,但可能有锯齿)。
    >0 = 设置多重采样的采样数,比如 4 表示 4x MSAA。
    """
    ren_win.SetMultiSamples(0)
 
    ren_win.AddRenderer(renderer)
    ren_win.SetWindowName('ContourTriangulator')
 
    iren = vtkRenderWindowInteractor()
    iren.SetRenderWindow(ren_win)
 
    renderer.AddActor(poly_actor)
    renderer.AddActor(iso_actor)
    renderer.SetBackground(colors.GetColor3d('DarkSlateGray'))
    ren_win.SetSize(300, 300)
 
    camera = renderer.GetActiveCamera()
    renderer.ResetCamera()
    camera.Azimuth(180)
 
    ren_win.Render()
    iren.Initialize()
    iren.Start()
 
 
if __name__ == '__main__':
    main()
相关推荐
AI_56781 天前
Selenium+Python可通过 元素定位→操作模拟→断言验证 三步实现Web自动化测试
服务器·人工智能·python
蒜香拿铁1 天前
【第三章】python算数运算符
python
52Hz1181 天前
力扣73.矩阵置零、54.螺旋矩阵、48.旋转图像
python·算法·leetcode·矩阵
weixin_462446231 天前
Python 使用 openpyxl 从 URL 读取 Excel 并获取 Sheet 及单元格样式信息
python·excel·openpyxl
毕设源码-钟学长1 天前
【开题答辩全过程】以 基于Python的健康食谱规划系统的设计与实现为例,包含答辩的问题和答案
开发语言·python
百***78751 天前
Grok-4.1技术深度解析:双版本架构突破与Python API快速集成指南
大数据·python·架构
2501_942191771 天前
基于YOLO11-HSFPN的数字检测与识别模型实现详解
python
忧郁的橙子.1 天前
26期_01_Pyhton基本语法
python
sunfove1 天前
实战篇:用 Python 徒手实现模拟退火算法解决 TSP 问题
开发语言·python·模拟退火算法
我是菜鸟0713号1 天前
Qt + Python 算法集成的一种低耦合实践:FastAPI 服务化方案
python·qt·fastapi