• matlab jet color mapping C / C++ / VC 实现


    在matlab中调用imagesc()将一幅灰阶图像以彩色显示时,默认使用的color mapping是Jet,其color bar 为:

    image

    Jet的color mapping图为:

    image

    Color mapping图的绘制(Matlab代码):

    function showRGBchannels(Fignr,Map); 
          x = linspace(0,1, size(Map, 1));
          figure(Fignr)
          lw = 4;
          plot( x, Map(:,1),'color',[1,0,0],'linewidth',lw,...
             x, Map(:,2),'color',[0,1,0],'linewidth',lw,... 
             x, Map(:,3),'color',[0,0,1],'linewidth',lw,...
             x, mean(Map,2),'color',[0.7,0.7,0.7],'o'); 
          xlabel 'fraction'
          ylabel 'intensity'
          end

    调用:showRGBchannels(1,jet(500))

    根据此color mapping图,我将C / C++代码实现如下:

    void mapJet(double v, double vmin, double vmax, BYTE& r, BYTE& g, BYTE& b)
    {
        r = 255;
        g = 255;
        b = 255;

        if (v < vmin) {
            v = vmin;
        }

        if (v > vmax) {
            v = vmax;
        }

        double dr, dg, db;

        if (v < 0.1242) {
            db = 0.504 + ((1.-0.504) / 0.1242)*v;
            dg = dr = 0.;
        } else if (v < 0.3747) {
            db = 1.;
            dr = 0.;
            dg = (v - 0.1242) * (1. / (0.3747-0.1242));
        } else if (v < 0.6253) {
            db = (0.6253 - v) * (1. / (0.6253-0.3747));
            dg = 1.;
            dr = (v - 0.3747) * (1. / (0.6253-0.3747));
        } else if (v < 0.8758) {
            db = 0.;
            dr = 1.;
            dg = (0.8758 - v) * (1. / (0.8758-0.6253));
        } else {
            db = 0.;
            dg = 0.;
            dr = 1. - (v - 0.8758) * ((1.-0.504) / (1.-0.8758));
        }

        r = (BYTE) (255 * dr);
        g = (BYTE) (255 * dg);
        b = (BYTE) (255 * db);
    }

    其中,v为归一化的图像像素值(0.-1.)。

    函数使用:

    BYTE red, green, blue;

    mapJet(image[i][j], 0., 1., red, green, blue);

  • 相关阅读:
    修改带!important的css样式
    解决Eclipse导入项目是提示错误:Some projects cannot be imported because they already exist in the workspace
    HTML5——canvas:使用画布绘制卡片
    vue:更改组件样式
    导入导出大量excel文件
    winfrom控件Treeview绑定数据库中的资料(节点控件)
    Winfrom将excel中的数据导入sqlserver数据库中的方法
    C# 将DataTable表中的数据批量插入到数据库表中的方法
    创建Sql数据表的sql代码
    Winfrom之SplitContainer控件
  • 原文地址:https://www.cnblogs.com/burellow/p/3421106.html
Copyright © 2020-2023  润新知