VTK图像处理之vtkImageMapToColors

图像彩色映射

  图像彩色映射的原理是:先生成一个颜色查询表,然后根据图像像素的一个标量值在颜色查询表中查找对应的颜色,并用新颜色值替代原来的像素值。VTK中以vtkImageMapToColors实现图像彩色映射,以vtkLookupTable生成颜色查找表。vtkLookupTable是一个用来将标量值映射为RGBA (red-green-blue-alpha transparency)或者将RGBA映射为标量值的类。

CMakeLists.txt文件代码如下:

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

ImageCanvasSource2D.cpp文件代码如下:

#include <vtkSmartPointer.h>
#include <vtkImageData.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkInteractorStyleImage.h>
#include <vtkRenderer.h>
#include <vtkImageActor.h>
#include <vtkJPEGReader.h>
#include <vtkImageLuminance.h>
#include <vtkLookupTable.h>
#include <vtkImageMapToColors.h>

//测试图像:lena-gray.jpg
int main(int argc, char* argv[])
{
    vtkSmartPointer<vtkJPEGReader> reader =
        vtkSmartPointer<vtkJPEGReader>::New();
    reader->SetFileName ( "E:\\TestData\\lena-gray.jpg" );

    vtkSmartPointer<vtkLookupTable> colorTable = 
        vtkSmartPointer<vtkLookupTable>::New(); 
    colorTable->SetRange( 0.0, 255.0 );
    colorTable->SetHueRange( 0.1, 0.5 );
    colorTable->SetValueRange( 0.6, 1.0 );
    colorTable->Build();

    vtkSmartPointer<vtkImageMapToColors> colorMap = 
        vtkSmartPointer<vtkImageMapToColors>::New();
    colorMap->SetInputConnection( reader->GetOutputPort() );
    colorMap->SetLookupTable( colorTable );
    colorMap->Update();

    vtkSmartPointer<vtkImageActor> originalActor =
        vtkSmartPointer<vtkImageActor>::New();
    originalActor->SetInputData(reader->GetOutput());

    vtkSmartPointer<vtkImageActor> shiftscaleActor =
        vtkSmartPointer<vtkImageActor>::New();
    shiftscaleActor->SetInputData(colorMap->GetOutput());

    double originalViewport[4] = {0.0, 0.0, 0.5, 1.0};
    double shiftscaleViewport[4] = {0.5, 0.0, 1.0, 1.0};

    vtkSmartPointer<vtkRenderer> originalRenderer =
        vtkSmartPointer<vtkRenderer>::New();
    originalRenderer->SetViewport(originalViewport);
    originalRenderer->AddActor(originalActor);
    originalRenderer->ResetCamera();
    originalRenderer->SetBackground(1.0, 1.0, 1.0);

    vtkSmartPointer<vtkRenderer> shiftscaleRenderer =
        vtkSmartPointer<vtkRenderer>::New();
    shiftscaleRenderer->SetViewport(shiftscaleViewport);
    shiftscaleRenderer->AddActor(shiftscaleActor);
    shiftscaleRenderer->ResetCamera();
    shiftscaleRenderer->SetBackground(1.0, 1.0, 0.8);

    vtkSmartPointer<vtkRenderWindow> renderWindow =
        vtkSmartPointer<vtkRenderWindow>::New();
    renderWindow->AddRenderer(originalRenderer);
    renderWindow->AddRenderer(shiftscaleRenderer);
    renderWindow->SetSize(900, 300);
    renderWindow->Render();
    renderWindow->SetWindowName("Gray2ColorImageExample");

    vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
        vtkSmartPointer<vtkRenderWindowInteractor>::New();
    vtkSmartPointer<vtkInteractorStyleImage> style =
        vtkSmartPointer<vtkInteractorStyleImage>::New();

    renderWindowInteractor->SetInteractorStyle(style);
    renderWindowInteractor->SetRenderWindow(renderWindow);
    renderWindowInteractor->Initialize();
    renderWindowInteractor->Start();

    return EXIT_SUCCESS;
}

运行结果:

这里写图片描述

示例先读取了一幅灰度图像,然后生成vtkLookupTable颜色查找表。构造颜色查找表有两种方法:
一种是直接添加颜色;另一种是设置HSV颜色空间变化范围,然后自动生成颜色表。这里采用的是第二种方法。最后用vtkImageMapToColors实现图像彩色映射。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值