zoukankan      html  css  js  c++  java
  • 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 }

    输出图像:

  • 相关阅读:
    如何用一句话激怒设计师
    Kubernetes1.3:POD生命周期管理
    从零学React Native之11 TextInput
    从零学React Native之10Text
    html+js 在页面同步服务器时间
    电信行业的容器化改造之道
    容器化ICT融合初体验
    Laravel 发送邮件(最简单的讲解!)
    jquery( 点击按钮出来文本框并限制文本框的个数)
    OpenStack宣布用Kubernetes重写底层编排引擎
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/14241303.html
Copyright © 2011-2022 走看看