VTK图形处理之颜色映射

VTK:设置背景颜色的用法与编程实例 它提供了丰富的功能和工具,用于创建高质量的三维图形和可视化效果。在VTK中,我们可以使用特定的函数和方法来控制和修改可视化场景的外观和行为。在本文中,我们将重点介绍如何使用VTK来设置背景颜色,并提供相应的编程示例。通过上述示例代码,我们可以看到如何使用VTK来设置渲染器的背景颜色。无论是纯色背景还是图片背景,VTK提供了灵活的方法来满足不同的需求。你可以根据自己的实际情况和需求,选择合适的方法来设置渲染器的背景颜色。类提供了许多方法和属性,用于修改和定制渲染器的各个方面,包括背景颜色。 阅读详情

颜色映射

  颜色映射的操作对象是数据集中的标量属性。它是一种常用的 标量算法。它会根据数据集中各个部分不同的标量值,对各个部分上不同的颜色。与此相关的另一种上色方法是控制演员的颜色属性,但这样整个图形只有单一的颜色,这显然没有颜色映射方法灵活。
  创建多边形数据集程序运行 结果显示的彩色立方体就用到了颜色映射。由于对 立方体的6个顶点设置了不同的标量值(点id),所以这6个点的颜色不同。至于立方体其他部分的颜色,也是通过标量值映射来的,不过这些标量值并不是手动设置,而是根据邻近的顶点的标量值,运用某种内插算法计算出来的。

颜色映射过程

  假设有一个共256种颜色的查询表,且颜色的索引号范围为0~255,那么颜色映射就是将数据集的标量值映射到这些索引号的过程。在渲染时,与索引号对应的颜色将作为数据中相应部分的颜色显示出来。映射的方法如下图所示。
  
这里写图片描述

  上图中,scalar表示数据集中的标量值,index表示映射后的索引号。smin和smax表示的是标量值的映射范围(注意不是数据集中标量值的取值范围)。若一个标量值小于smin,则其映射的索引号为0;若一个标量值大于smax,其映射的索引号为255;若一个标量值在这个范围之间,则映射过程就是一个求一元一次函数值的过程,其对应的曲线是一条直线,不过需要对函数值取整。实际上,在范围外的标量值也可以被看作smin和smax,然后对其求函数值。
  在VTK中,颜色映射的过程是由映射器mapper完成的。可以通过调用映射器的方法SetScalarRange()来设置标量值的范围[smin, smax]。映射过程只是为每个标量值确定了一个索引号,最终该标量值映射为何种颜色,还需要看颜色查询表中颜色的分配情况。如果不手动创建一个查询表,则映射器会使用一个默认的映射表。

示例演示

CMakeLists.txt文件代码如下:

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
PROJECT(LookupTableExample)
FIND_PACKAGE(VTK REQUIRED)
INCLUDE(${VTK_USE_FILE})
ADD_EXECUTABLE(LookupTableExample lookuptable.cpp)
TARGET_LINK_LIBRARIES(LookupTableExample ${VTK_LIBRARIES})

C++代码:

#include "vtkActor.h"
#include "vtkCellArray.h"
#include "vtkFloatArray.h"
#include "vtkPointData.h"
#include "vtkPoints.h"
#include "vtkPolyData.h"
#include "vtkPolyDataMapper.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkRenderer.h"
#include <vtkLookupTable.h>
#include "vtkSmartPointer.h"

int main()
{
    int i;
    //定义立方体的顶点坐标
    static float x[8][3] = { { 0, 0, 0 }, { 1, 0, 0 }, { 1, 1, 0 }, { 0, 1, 0 },
    { 0, 0, 1 }, { 1, 0, 1 }, { 1, 1, 1 }, { 0, 1, 1 } };
    //定义单元,每4个顶点建立一个四边形单元,共计6个单元
    static vtkIdType pts[6][4] = { { 0, 1, 2, 3 }, { 4, 5, 6, 7 }, { 0, 1, 5, 4 },
    { 1, 2, 6, 5 }, { 2, 3, 7, 6 }, { 3, 0, 4, 7 } };
    //创建对象
    vtkSmartPointer<vtkPolyData> cube = vtkSmartPointer<vtkPolyData>::New();
    vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();
    vtkSmartPointer<vtkCellArray> polys = vtkSmartPointer<vtkCellArray>::New();
    //存储顶点
    for (i = 0; i < 8; i++)
        points->InsertPoint(i, x[i]);
    //设定单元
    for (i = 0; i < 6; i++)
        polys->InsertNextCell(4, pts[i]);

    //存储标量值
    vtkSmartPointer<vtkFloatArray> scalars = vtkSmartPointer<vtkFloatArray>::New();
    //设定每个顶点的标量值
    for (i = 0; i < 8; i++)
        scalars->InsertTuple1(i,  i*4);
    //创建多边形数据
    cube->SetPoints(points);
    //设定单元类型为多边形
    cube->SetPolys(polys);
    //设定每个顶点的标量值
    cube->GetPointData()->SetScalars(scalars);
    //定义颜色映射表
    vtkSmartPointer<vtkLookupTable> pColorTable = vtkSmartPointer<vtkLookupTable>::New();
    //设置颜色表中的颜色
    pColorTable->SetNumberOfColors(256);
    pColorTable->SetHueRange(0.67, 0.0);        //色调范围从红色到蓝色
    pColorTable->Build();
    //数据映射
    vtkSmartPointer<vtkPolyDataMapper> cubeMapper = vtkSmartPointer<vtkPolyDataMapper>::New();
    cubeMapper->SetInputData(cube);
    cubeMapper->SetScalarRange(0, 7);
    cubeMapper->SetLookupTable(pColorTable);
    vtkSmartPointer<vtkActor> cubeActor = vtkSmartPointer<vtkActor>::New();
    cubeActor->SetMapper(cubeMapper);

    vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
    vtkSmartPointer<vtkRenderWindow> renWin = vtkSmartPointer<vtkRenderWindow>::New();
    renWin->AddRenderer(renderer);
    vtkSmartPointer<vtkRenderWindowInteractor> iren = vtkSmartPointer<vtkRenderWindowInteractor>::New();
    iren->SetRenderWindow(renWin);
    renderer->AddActor(cubeActor);
    renderer->SetBackground(1, 1, 1);
    renWin->SetSize(500, 500);
    renWin->Render();
    iren->Start();
    return 0;
}

运行结果:

这里写图片描述

分析

有时候,标量数据就是颜色值,并不需要通过查询表进行映射。对此,映射器提供了以下一些方法来进行控制。
● SetColorModeToDefault()该方法执行默认的映射器行为,即把unsigned char类型的标量属性数据当作颜色值,不执行隐式。对于其他类型的标量数据,将通过查询表映射。
● SetColorModeToMapScalars()无论变量数据是何种类型,该方法都通过查询表对标量数据进行映射。如果标量数据的每个元组有多个分量,则对第0个分量进行映射。 

注意事项:
1. 如果没有标量数据,则映射器将不能使用查询表控制对象的颜色。这时可以使用演员对象来控制颜色。
2. 如果想阻止颜色映射,可调用映射器的ScalarVisibilityOff()方法。

调用ScalarVisibilityOn()方法后,可以控制映射器的颜色映射行为:
● SetScalarModeToDefault()执行默认的映射行为:如果有点标量属性数据,则用其进行映射,如果没有点标量属性数据但有单元标量属性数据,则用单元标量属性数据进行映射,否则不映射。
● SetScalarModeToUsePointData()总是使用点标量属性数据进行映射的。如果没有嗲按标量属性数据,就不进行映射。
● SetScalarModeToUseCellData()总是使用单元标量属性数据进行映射的。如果没有单元标量属性数据,就不进行映射。
● SetScalarModeToUsePointFieldData()不使用点或单元标量属性数据,而是使用点属性数据中的一般属性数据来进行映射的。该方法应该与ColorByArrayComponent()结合使用,以用来指定用于颜色映射的数据。
● SetScalarModeToUseCellFieldData()不使用点或单元标量属性数据,而是使用单元属性数据中的一般属性数据来进行映射的。该方法应该与ColorByArrayComponent()结合使用,以用来指定用于颜色映射的数据。

VTK实战:绘制带颜色的单元格 VTK是一个开源的三维可视化工具库,可以用来创建、渲染和处理复杂的3D模型。其中,绘制单元格的颜色是常见的需求,在VTK中也有相应的实现方法。本文将介绍如何使用VTK绘制带颜色的单元格,并提供对应的源代码。以上代码会读取名为"example.stl"的文件,并在窗口中显示其3D模型。接下来,我们将在此基础上绘制单元格的颜色。在使用VTK绘制单元格颜色之前,我们需要知道目标单元格的索引,然后设置该单元格的颜色属性。cellId = 10 # 要绘制的目标单元格索引。VTK实战:绘制带颜色的单元格。 阅读详情

相关推荐

VTK编程指南<十四>:VTK图像颜色映射

VTK编程指南<十四>:VTK图像颜色映射

欧特GO 1322

VTK入门(二)--颜色映射

在vtk中颜色映射是可视化技术中最常用的,是根据属性值来对物体进行着色,将颜色查找表中的颜色映射到点或单元的属性值上,绘制时就可以用这些颜色值来绘制点和单元了。 接下来编写一个梯形实例来体现颜色映射算法,写代码前我们需要做如下准备: 属性数据 首先要介绍的是vtkDataSet这个类,vtkDataSet是所以数据集的父类,这里谈的可视化也都是对vtkDataSet数据对象进行的可视

schao501917的博客 1万+

使用VTK绘制彩色线条的学习方法

在上面的代码中,我们首先创建了一组点,然后创建了一个带有颜色的线条。接下来,我们将点集和线条添加到PolyData数据集中,并创建了一个颜色映射器和一个PolyDataMapper。最后,我们创建了一个演员并将其添加到渲染器中,然后将渲染器添加到渲染窗口中,并启动交互器来显示彩色线条。无论是绘制科学数据的路径,还是在计算机图形应用程序中创建动态效果,VTK都提供了丰富的功能和灵活性。希望本文能够帮助你学习如何使用VTK绘制彩色线条,并为你在可视化和图形处理方面的开发工作提供一些启示。

FdmPatch的博客 222

VTK 的可视化方法:颜色映射

VTK 的可视化方法:颜色映射

ProgramNovice的博客 2370

绘制VTK维网格的Python实现

它提供了丰富的功能和工具,可以用于创建、操作和渲染各种类型的数据。你可以根据自己的需求修改节点坐标、添加更多节点以及定义不同类型的单元来创建更复杂的维网格。VTK库还提供了许多其他功能和工具,例如颜色映射、渲染效果和交互操作等,可以帮助你创建更丰富和交互性强的可视化效果。如果你对VTK库的更多功能和用法感兴趣,可以查阅VTK官方文档以获取更详细的信息。通过以上代码,我们可以使用VTK库绘制维网格,并在图形窗口中显示出来。这个维网格示例是一个简单的二维网格,包含四个节点,形成一个正方形。

VipeNvml的博客 332

第四部分:VTK常用类详解(第111章 vtkGlyph3D符号化类)

vtkGlyph3D是VTK中用于3D数据符号化的核心类,能够将几何符号复制到输入数据的每个点上,并根据标量或向量数据进行缩放、定向和着色。主要特性包括:多种缩放模式(按标量、向量或分量)、定向模式(使用向量、法向量或相机方向)和颜色映射模式。通过灵活的算法实现,它支持高效的符号生成流程,包括缩放计算、定向矩阵计算和颜色值计算。该技术广泛应用于科学可视化、向量场显示等领域,提供强大的3D数据表达能力。

仰望星空的博客 276

VTK图形处理之颜色映射 ,vtkpolydata 数据合并

颜色可以直接作为一种标量属性数据,设置到相应的点或者单元数据中,这是最直接的一种图形着色方式。 颜色映射   颜色映射的操作对象是数据集中的标量属性。它是一种常用的 标量算法。它会根据数据集中各个部分不同的标量值,对各个部分上不同的颜色。与此相关的另一种上色方法是控制演员的颜色属性,但这样整个图形只有单一的颜色,这显然没有颜色映射方法灵活。   创建多边形数据集程序运行 结果显示的彩色立方体就用到了颜色映射。由于对 立方体的6个顶点设置了不同的标量值(点id),所以这6个点的颜色不同。至于立方体其他部分

q610098308的专栏 2229

图像的彩色映射——学习VTK颜色映射算法

这里我们以VTK中的ColorTransferFunction类为例,它可以定义一个颜色映射函数,该函数根据传入的数值,返回相应的颜色。在各种科学、医学、工程和娱乐应用中,对于图像的显示和分析,都必须要经过相应的图形处理和渲染,其中彩色映射是其中重要的一步。我们可以在颜色映射函数中添加一些颜色映射点,以定义不同数值对应的颜色值,通过SetRange函数来设置映射的数值范围,SetClamping函数来控制是否限定映射范围。至此,我们已经完成了一个基于VTK的图像彩色映射算法,并成功显示出彩色映射的结果。

pytorchCode的博客 350

ColoredElevationMap 根据标量进行颜色映射

本文只是教程内容的一小段,因博客字数限制,故进行拆分。本段代码主要涉及的有①标量的颜色映射。

BoBoZz19的博客 227

掌握VTK实现三维重建的经典程序

VTK(Visualization Toolkit)是一个开源的、跨平台的工具包,用于三维计算机图形学、图像处理和可视化。VTK以其强大的可视化能力在科学可视化领域中占据着举足轻重的地位,它支持多种编程语言,包括C++、Python和Java等。在实际应用中,我们可能需要根据特定的需求来自定义事件处理逻辑。这通常涉及到对回调函数中的逻辑进行扩展,以完成特定的任务。例如,我们可能希望在用户点击场景中的一个对象时执行某些操作,比如弹出一个菜单,或者修改对象的属性。

weixin_42234168的博客 1166

腾讯、飞书等在线表格自动化编辑--python

在线文档自动化处理数据

qq_32828053的博客 2万+

ScalarBarWidget 标量颜色映射

本文只是教程内容的一小段,因博客字数限制,故进行拆分。本段代码主要涉及的有①标量与颜色的映射并构建映射表。

BoBoZz19的博客 76

CST 2023安装避坑指南:从下载到破解的完整流程(附常见报错解决方案)

本文提供CST 2023三维全波电磁场仿真软件的完整安装指南,涵盖从下载到破解的全流程,并附常见报错解决方案。详细解析安装步骤、许可证配置优化及高频问题诊断,帮助用户快速部署并优化软件性能,适用于射频电路设计、天线优化等场景。

7z8x2c4v6b9的博客 657

PlatonicSolids柏拉图多面体的生成

本文只是教程内容的一小段,因博客字数限制,故进行拆分。本段代码主要涉及的有①颜色映射表的使用。

BoBoZz19的博客 333

Cyclone MAX独立编程实战:从硬件接口到SAP镜像的嵌入式烧录指南

在嵌入式系统开发与量产中,固件烧录是连接软件与硬件的关键环节。其核心原理是通过特定的调试接口(如JTAG、BDM)和编程算法,将编译后的机器码写入目标处理器的非易失性存储器。这项技术的价值在于确保软件在硬件上的可靠部署,是产品功能实现和质量保证的基础,广泛应用于汽车电子、工业控制等对一致性与可靠性要求极高的领域。独立编程器(Stand-Alone Programmer)在此基础上,通过集成存储、交互界面和任务逻辑,实现了脱离PC的自动化操作,极大提升了产线效率和现场维护的便捷性。本文以Cyclone MAX

weixin_34038293的博客 467

欧姆龙SYSMAC STUDIO如何与基恩士SR-1000进行EIP通信

简要介绍一下扫码枪和欧姆龙sysmac的配置

weixin_42031602的博客 4785

Curvatures 曲率的计算、边缘曲率的调整以及曲率、颜色的映射

本段代码主要涉及的有①如何根据顶点索引找到邻接顶点的索引,②特征边缘,③曲率的计算。本文只是教程内容的一小段,因博客字数限制,故进行拆分。

BoBoZz19的博客 366

开源PACS系统Orthanc(DICOM服务器)配置

PACS(Picture Archiving and Communication System)是医学影像的数字化存储、检索和传输系统,用于管理和存储医学图像和相关信息,如放射学、核医学、超声、病理学等各种医学影像。PACS系统通过数字化技术取代了传统的胶片方式,使医疗机构能够更高效地存储、传输和查看医学图像,从而提高了医疗图像的管理和工作流程。

qq_42231043的博客 6251

MeshLabelImageColor 读取医学标签图像数据(MetaImage 格式)

本段代码主要涉及的有①vtkColorTransferFunction颜色映射,②vtkExtractVOI裁剪体素数据,③vtkLODActor的作用。本文只是教程内容的一小段,因博客字数限制,故进行拆分。

BoBoZz19的博客 286

【C语言】字符常量详解

字符常量是C语言中处理字符数据的重要工具。通过单引号括起一个字符,我们可以方便地使用字符常量进行字符判断、字符运算和字符串处理等操作。理解字符常量的表示方法、使用场景和ASCII码对应关系,对于编写高效的C语言程序至关重要。

LuckiBit 5019

【WRF-Urban】使用 NUDAPT 数据集与 BEP/BEP_BEM 方案的 WRF 配置指南

【WRF-Urban】使用 NUDAPT 数据集与 BEP/BEP_BEM 方案的 WRF 配置指南

WW、forever的博客 1964

AssignCellColorsFromLUT为每个单元格手动分配颜色的两种方法

本文只是教程内容的一小段,因博客字数限制,故进行拆分。本段代码主要涉及的有①两种方法实现对网格面分配不同颜色。

BoBoZz19的博客 754

爬取B站评论+AI情感分析:Python批量抓数据+BERT正负向分类(全流程)

B站作为年轻群体聚集的内容平台,评论区蕴含海量用户真实态度(如好评、吐槽、中立观点),是情感分析的优质数据源!本文分享完整流程:批量爬取B站视频评论→数据清洗去噪→BERT模型情感分类→可视化分析,基于预训练BERT模型实现高精度正负向判断,新手也能快速复刻情感分析系统! 前置配置(关键!获取B站API访问权限) B站评论通过官方API接口返回,无需复杂解析,只需配置用户Cookie即可正常请求: 2. 完整代码(直接复制运行) 三、使用步骤(5步搞定,新手友好) 步骤1:配置关键参数 打开,在类中修改

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1069

11.VTK图形处理_vtkPolyData

这个专栏是用于记录我在学习VTK过程中的一些心得体会。参考的资料主要有以下三个:1. 张晓东 罗火灵《VTK图形图像开发进阶》 2. https://examples.vtk.org/site/ 3. 沈子恒 《VTK 三维数据渲染进阶》遇到的一个大问题就是由于版本更新,这些资料中很多代码无法正常运行,需要进行一定的修改,所以这个专栏会记录下来我修改后的程序代码,以便于我之后温习。也希望能给和我有同样困扰的小伙伴们一些帮助。我使用的版本:VTK9 + VS2022图像数据的应用非常广泛,比如3D游戏中每个角

weixin_52194015的博客 572

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

VTK系列52_VTK对几何体进行曲率计算

实例52:曲率计算 #include "vtkAutoInit.h" //VTK_MODULE_INIT(vtkRenderingOpenGL2); //VTK_MODULE_INIT(vtkInteractionStyle); VTK_MODULE_INIT(vtkRenderingOpenGL2); VTK_MODULE_INIT...

qq_32809093的博客 1250

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【QT+VTK 学习笔记】13:VTK图形处理2 法向量、曲率计算、网格平滑

前言 “VTK图形图像开发进阶_张晓东_罗火灵”的学习笔记。 东灵工作室 教程系列导航:http://blog.youkuaiyun.com/www_doling_net/article/details/8763686 学习资料 VTK官网学习地址:https://vtk.org/doc/nightly/html/ 2.1法向量计算 法向量的定义 法向量,是空间解析几何的一个概念,垂直于平面的直线所表示的向量为该平面的法向量。法向量适用于解析几何。由于空间内有无数个直线垂直于已知平面,因此一个平面都存在无数个法向量(包

qq_37373742的博客 3371

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

上一篇: 设计模式之程序设计原则
下一篇: VTK图形处理之剪切
暮-成-雪
博客等级 码龄12年 5328粉丝 319原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值