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

Jet的color mapping图为:

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);
matlab jet color mapping C / C++ / VC 实现的更多相关文章
- VC 与Matlab混合编程之引擎操作详解
Visual C++ 是当前主流的应用程序开发环境之一,开发环境强大,开发的程序执行速度快.但在科学计算方面函数库显得不够丰富.读取.显示数据图形不方便. Matlab 是一款将数值分析.矩阵计算.信 ...
- VC 编译 MATLAB 的 mex 文件
VC 编译 MATLAB 的 mex 文件mex 文件是 MATLAB 调用其他程序设计语言程序或算法的接口.在 Windows 环境中,mex 文件是扩展文件名为 DLL 的动态链接库,可以在 m ...
- change grayscale to pseudo colouring using colormap in Matlab
change grayscale to pseudo colouring using colormap in Matlab In matlab you can view a grayscale ima ...
- MATLAB中文论坛帖子整理(GUI)
MATLAB中文论坛帖子整理(GUI) 目 录 1.GUI新手之——教你读懂GUI的M文件... 10 2.GUI程序中改变current directory引起的问题... 15 3.GUI中 ...
- VS2015调用matlab Plot函数
最近经常采用Matlab仿真,然后C语言实现,最后需要将计算结果使用Qt的qwt或者matlab中的plot函数绘图. 因此想借用matlab的plot函数接口,使用VS2015来编写信号处理代码,最 ...
- Visual Studio 与 Matlab实现混合编程
环境: Win10 vs2010 Matlab2015 里面有很多选做的内容,其中2.3必做 1.Matlab环境设置: (选做)我没有做这步,因为打mbuild -setup指令不识别,缺少SD ...
- Matlab: 作图
控制图的大小 figure('position',[x0,y0,dx,dy]); figure(fig number); 显示图例 legend('leg1','leg2') depend on ho ...
- Matlab绘图基础——用print函数保存图片(Print figure or save to file)
print(figure_handle,'formats','-rnumber','filename') %将图形保存为png格式,分辨率为number的(默认为72),最好指定的分辨率大一点,否则 ...
- Matlab绘图基础——用print函数批量保存图片到文件(Print figure or save to file)
一.用法解析 1.1. 分辨率-rnumber 1.2. 输出图片的“格式”formats 二.用法示例 2.1. 设置输出图片的“图像纵横比” 2.2. Batch Processing(图片保存 ...
随机推荐
- C#实现函数默认值和C#4.0实现默认值
static void Main(string[] args) { SayHello(); SayHello("侯志强"); Console.ReadKey(); } C#.0实现 ...
- EMD_MAINTENANCE.EXECUTE_EM_DBMS_JOB_PROCS的删除创建
在最近的一次优化过程中发现了ORACLE 10g中一个作业EMD_MAINTENANCE.EXECUTE_EM_DBMS_JOB_PROCS执行相当频繁,其实以前也看到过,只是没有做过多的了解和关注. ...
- SQL Server(七)——存储过程
一.概述 存储过程是一组编译在单个执行计划中的T-SQL语句 存储过程:就像函数一样的会保存在数据库中(可编程性) 存储过程的优点: 1.允许模块化程序设计 2.允许更快执行如果某操作需要大量T-SQ ...
- android PopupWindow使用实例
注:点空白或菜单外隐藏popupwindow菜单: 但是,若点击有点击事件的组件则要再写代码手动隐藏: @Override public boolean onTouchEvent(MotionEven ...
- 构建 ARM Linux 4.7.3 嵌入式开发环境 —— U-BOOT 引导 Kernel
经过若干天的反复测试,搜索.终于成功利用 Qemu 在 u-boot 下引导 ARM Linux 4.7.3 内核.如下详细解释整个构建过程. 准备环境 运行环境:Ubuntu 16.04 需要的虚拟 ...
- 在dreamweaver上面制作表格
开始有点犯二,准备一行一行敲,五六十行,人都得敲疯,还容易出错...... 直接从wps复制粘贴到设计里面,立马就出来了,费那事干嘛,哎,工具还是用的不熟
- position&containing block
一.包含块(Containing Block) 要讲position,首先就涉及到一个概念:包含块. 1.包含块介绍 包含块简单理解就是一个定位参考块,就是"大盒子里套小盒子"中那 ...
- 搭建PHP官方框架zend framework 2(LINUX)
在五花八门的语言里,PHP作为我第一个觉得欣赏的理由,就是它的简单和快捷,因为它封装了许多的常用函数.PHP作为网站中一种算作比较流行的语言,也产生各种优秀的框架.我所接触过的有zend framew ...
- [c] base64
/ * Program: * base64 encode & decode * Author: * brant-ruan * Date: * 2016-02-29 * Usage: * Enc ...
- 第六章、Struts2数据校验
一.三种实现方式 ① 用validate()方法实现数据校验 继承ActionSupport类,该类实现了Validateable接口,该接口中定义了一个validate()方法,在自定义的Actio ...