• VTK 图像基本操作_灰度图像映射成伪彩色图像(查表法)


    1.查表法伪彩图映射

    图像彩色映射的原理是首先生成一个颜色查找表,然后根据图像的一个标量值向颜色查找表中查找对应的颜色,并用新颜色值替代原来的像素值。VTK中vtkImageMapToColors负责图像彩色映射,vtkLookUpTable负责生成颜色查找表。

    下面代码说明了怎样进行彩色映射:

     1 #include <vtkAutoInit.h>
     2 VTK_MODULE_INIT(vtkRenderingOpenGL);
     3  
     4 #include <vtkSmartPointer.h>
     5 #include <vtkJPEGReader.h>
     6 #include <vtkLookupTable.h>
     7 #include <vtkImageMapToColors.h>
     8 #include <vtkImageActor.h>
     9 #include <vtkRenderer.h>
    10 #include <vtkRenderWindow.h>
    11 #include <vtkRenderWindowInteractor.h>
    12 #include <vtkInteractorStyleImage.h>
    13 int main()
    14 {
    15     vtkSmartPointer<vtkJPEGReader> reader =
    16         vtkSmartPointer<vtkJPEGReader>::New();
    17     reader->SetFileName("lena-gray.jpg");
    18     //建立颜色映射查找表
    19     vtkSmartPointer<vtkLookupTable> colorTable =
    20         vtkSmartPointer<vtkLookupTable>::New();
    21     colorTable->SetRange(0.0, 255.0);
    22     colorTable->SetHueRange(0.1, 0.5);
    23     colorTable->SetValueRange(0.6, 1.0);
    24     colorTable->Build();
    25     //建立颜色映射
    26     vtkSmartPointer<vtkImageMapToColors> colorMap =
    27         vtkSmartPointer<vtkImageMapToColors>::New();
    28     colorMap->SetInputConnection(reader->GetOutputPort());
    29     colorMap->SetLookupTable(colorTable);
    30     colorMap->Update();
    31     //建立演员
    32     vtkSmartPointer<vtkImageActor> origActor =
    33         vtkSmartPointer<vtkImageActor>::New();
    34     origActor->SetInputData(reader->GetOutput());
    35  
    36     vtkSmartPointer<vtkImageActor> colorActor =
    37         vtkSmartPointer<vtkImageActor>::New();
    38     colorActor->SetInputData(colorMap->GetOutput());
    39     //化妆
    40     double origView[4] = { 0.0, 0.0, 0.5, 1.0 };
    41     double colorView[4] = { 0.5, 0.0, 1.0, 1.0 };
    42     vtkSmartPointer<vtkRenderer> origRender =
    43         vtkSmartPointer<vtkRenderer>::New();
    44     origRender->SetViewport(origView);
    45     origRender->AddActor(origActor);
    46     origRender->ResetCamera();
    47     origRender->SetBackground(1.0, 0.0, 0.0);
    48  
    49     vtkSmartPointer<vtkRenderer> colorRender =
    50         vtkSmartPointer<vtkRenderer>::New();
    51     colorRender->SetViewport(colorView);
    52     colorRender->AddActor(colorActor);
    53     colorRender->ResetCamera();
    54     colorRender->SetBackground(0.0, 0.0, 0.0);
    55     //舞台
    56     vtkSmartPointer<vtkRenderWindow> renderwindow =
    57         vtkSmartPointer<vtkRenderWindow>::New();
    58     renderwindow->AddRenderer(origRender);
    59     renderwindow->AddRenderer(colorRender);
    60     renderwindow->SetSize(640, 320);
    61     renderwindow->SetWindowName("GrayToColor");
    62     //设置交互
    63     vtkSmartPointer<vtkRenderWindowInteractor> rwi =
    64         vtkSmartPointer<vtkRenderWindowInteractor>::New();
    65     vtkSmartPointer<vtkInteractorStyleImage> style =
    66         vtkSmartPointer<vtkInteractorStyleImage>::New();
    67     rwi->SetInteractorStyle(style);
    68     rwi->SetRenderWindow(renderwindow);
    69     rwi->Initialize();
    70  
    71     rwi->Start();
    72     return 0;
    73 }

    输出图像:

  • 相关阅读:
    随机数生成
    C#根据流下载文件
    C# 改变Windows中服务的登录身份 (账户名和密码)
    SqlServer查看数据库信息及服务器级、数据库级、数据库独立 用户权限
    C# 两个List<T>(T是类)使用Contains比较元素的方法
    你真正了解public、internal、protected、private吗?不妨幽默一些
    【WCF Restful】Post传参示范
    VMware虚拟机可与Win10物理机互ping并可访问互联网的设置方法
    服务器Oracle数据库配置与客户端访问数据库的一系列必要设置
    Winform ListBox输出信息并自动滚动至底部
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/14241303.html
Copyright © 2020-2023  润新知