0.试验效果




1. 函数映射

要构造二维渐变图,我们首先需要一个将[0,1]之间数值映射到相对应RGB数值的函数,这个函数可以用以下生成器生成:

function colorFunc=colorFuncFactory(colorList)
x=(0:size(colorList,1)-1)./(size(colorList,1)-1);
y1=colorList(:,1);y2=colorList(:,2);y3=colorList(:,3);
colorFunc=@(X)[interp1(x,y1,X,'linear')',interp1(x,y2,X,'linear')',interp1(x,y3,X,'linear')'];
end

用法:

c=[195 53 93
211 102 141
231 179 192
229 182 172
227 178 137
238 191 147
236 195 113];
colorFunc=colorFuncFactory( c);
newC=colorFunc(0:0.001:1);

其中c是RGB数值,colorFunc为由c构造的映射函数,newC是新生成 1000个RGB数值

1.1 沿某方向的渐变

效果:
随着方向向量不同,得到的结果不同:

vector=[1,12];

vector=[3,4];


使用方法:

matSize=[800,600];
vector=[3,4];
colorList=[195 53 93
211 102 141
231 179 192
229 182 172
227 178 137
238 191 147
236 195 113];
colorMat=vColorMat(matSize,vector,colorList);
imshow(colorMat)

函数代码:

function colorMat=vColorMat(matSize,vector,colorList)
% matSize=[800,600];
% vector=[1,12];
% colorList=[195    53    93
%    211   102   141
%    231   179   192
%    229   182   172
%    227   178   137
%    238   191   147
%    236   195   113];
% colorMat=vColorMat(matSize,vector,colorList)
% imshow(colorMat)vector=vector./norm(vector);
[xMesh,yMesh]=meshgrid(0:matSize(2)-1,0:matSize(1)-1);
zMesh=xMesh.*vector(2)+yMesh.*vector(1);
zMesh=(zMesh-min(min(zMesh)))./(max(max(zMesh))-min(min(zMesh)));colorFunc=colorFuncFactory(colorList);
colorMesh=colorFunc(zMesh);colorMat(:,:,1)=colorMesh(end:-1:1,1:matSize(1));
colorMat(:,:,2)=colorMesh(end:-1:1,matSize(1)+1:2*matSize(1));
colorMat(:,:,3)=colorMesh(end:-1:1,2*matSize(1)+1:3*matSize(1));colorMat=uint8(colorMat);end

1.2 以某点为圆心的渐变

效果:


使用方法:

matSize=[800,600];
point=[400,100];
colorList=[195 53 93
211 102 141
231 179 192
229 182 172
227 178 137
238 191 147
236 195 113];
colorMat=cColorMat(matSize,point,colorList);
imshow(colorMat)

函数代码:

function colorMat=cColorMat(matSize,point,colorList)
% matSize=[800,600];
% point=[400,100];
% colorList=[195    53    93
%    211   102   141
%    231   179   192
%    229   182   172
%    227   178   137
%    238   191   147
%    236   195   113];
% colorMat=cColorMat(matSize,point,colorList);
% imshow(colorMat)[xMesh,yMesh]=meshgrid(1:matSize(2),1:matSize(1));
zMesh=sqrt((xMesh-point(2)).^2+(yMesh-point(1)).^2);
zMesh=(zMesh-min(min(zMesh)))./(max(max(zMesh))-min(min(zMesh)));colorFunc=colorFuncFactory(colorList);
colorMesh=colorFunc(zMesh);colorMat(:,:,1)=colorMesh(end:-1:1,1:matSize(1));
colorMat(:,:,2)=colorMesh(end:-1:1,matSize(1)+1:2*matSize(1));
colorMat(:,:,3)=colorMesh(end:-1:1,2*matSize(1)+1:3*matSize(1));colorMat=uint8(colorMat);end

1.3 方形渐变

效果:

使用方法:

matSize=[800,600];
point=[400,100];
colorList=[195 53 93
211 102 141
231 179 192
229 182 172
227 178 137
238 191 147
236 195 113];
colorMat=sColorMat(matSize,point,colorList);
imshow(colorMat)

函数代码:

function colorMat=sColorMat(matSize,point,colorList)
% matSize=[800,600];
% point=[400,100];
% colorList=[195    53    93
%    211   102   141
%    231   179   192
%    229   182   172
%    227   178   137
%    238   191   147
%    236   195   113];
% colorMat=sColorMat(matSize,point,colorList);
% imshow(colorMat)[xMesh,yMesh]=meshgrid(1:matSize(2),1:matSize(1));
zMesh=abs(xMesh-point(2))+abs(yMesh-point(1));
zMesh=(zMesh-min(min(zMesh)))./(max(max(zMesh))-min(min(zMesh)));colorFunc=colorFuncFactory(colorList);
colorMesh=colorFunc(zMesh);colorMat(:,:,1)=colorMesh(end:-1:1,1:matSize(1));
colorMat(:,:,2)=colorMesh(end:-1:1,matSize(1)+1:2*matSize(1));
colorMat(:,:,3)=colorMesh(end:-1:1,2*matSize(1)+1:3*matSize(1));colorMat=uint8(colorMat);end

1.4 特殊点集

效果:

使用方法:

x=-2:0.01:2;
y1=sqrt(2sqrt(x.2)-x.2);
y2=-2.14
sqrt(sqrt(2)-sqrt(abs(x)));
x=x.*100+250;
y1=y1.*100+300;
y2=y2.*100+300;
pointList=[[x’,y1’];[x’,y2’]];
matSize=[600,500];
colorList=[195 53 93
211 102 141
231 179 192
229 182 172
227 178 137
238 191 147
236 195 113];
colorMat=lColorMat(matSize,pointList,colorList);
imshow(colorMat)

函数代码:

function colorMat=lColorMat(matSize,pointList,colorList)
% x=-2:0.01:2;
% y1=sqrt(2*sqrt(x.^2)-x.^2);
% y2=-2.14*sqrt(sqrt(2)-sqrt(abs(x)));
%
% x=x.*100+250;
% y1=y1.*100+300;
% y2=y2.*100+300;
% pointList=[[x',y1'];[x',y2']];
%
% matSize=[600,500];
% colorList=[195    53    93
%    211   102   141
%    231   179   192
%    229   182   172
%    227   178   137
%    238   191   147
%    236   195   113];
% colorMat=lColorMat(matSize,pointList,colorList);
% imshow(colorMat)[xMesh,yMesh]=meshgrid(1:matSize(2),1:matSize(1));
zMesh=sqrt((xMesh-pointList(1,2)).^2+(yMesh-pointList(1,1)).^2);for i=2:size(pointList,1)tempMesh=sqrt((xMesh-pointList(i,2)).^2+(yMesh-pointList(i,1)).^2);zMesh(zMesh-tempMesh>0)=tempMesh(zMesh-tempMesh>0);
end
zMesh=(zMesh-min(min(zMesh)))./(max(max(zMesh))-min(min(zMesh)));
colorFunc=colorFuncFactory(colorList);
colorMesh=colorFunc(zMesh);colorMat(:,:,1)=colorMesh(end:-1:1,1:matSize(1));
colorMat(:,:,2)=colorMesh(end:-1:1,matSize(1)+1:2*matSize(1));
colorMat(:,:,3)=colorMesh(end:-1:1,2*matSize(1)+1:3*matSize(1));colorMat=uint8(colorMat);end

2. 由图片构造

效果:


使用方法:

img=imread(‘test.jpg’);
newImg=imgColorMat(img);
imshow(newImg)

函数代码:

function newImg=imgColorMat(img)size(img)
[rows,cols,~]=size(img);xList=[1:10:rows-10,rows];
yList=[1:10:cols-10,cols];simplePoints=img(xList,yList,:);
simplePoints=imgaussfilt(simplePoints,4);
Rchannel=simplePoints(:,:,1);
Gchannel=simplePoints(:,:,2);
Bchannel=simplePoints(:,:,3);[xMesh,yMesh]=meshgrid(yList,xList);
[newXMesh,newYMesh]=meshgrid(1:cols,1:rows);newR=interp2(xMesh,yMesh,double(Rchannel),newXMesh,newYMesh,'spline');
newG=interp2(xMesh,yMesh,double(Gchannel),newXMesh,newYMesh,'spline');
newB=interp2(xMesh,yMesh,double(Bchannel),newXMesh,newYMesh,'spline');newImg(:,:,1)=newR;
newImg(:,:,2)=newG;
newImg(:,:,3)=newB;newImg=uint8(newImg);
end

注:
各颜色数据可以由我之前博客发布的各类RGB颜色提取器提取:



MATLAB 各类二维渐变图相关推荐

  1. MATLAB的二维线图绘图函数plot()实例积累

    目录 1 plot(Y) 2 plot(X,Y) 3 plot(___,Name,Value) 4 坐标轴标注和图形标题 5图例标注 6 目前MATLAB的文本已支持Latex公式输入 7 控制坐标轴 ...

  2. Matlab 二维网格图pcolor和imagesc区别

    Matlab 二维网格图pcolor和imagesc区别 在速度或者衰减层析成像反演之后会得到地下介质每个网格点的速度/衰减值,在进行呈现的时候可以使用maltab的pcolor和imagesc进行二 ...

  3. Matlab二维线图对数坐标及与hold on结合的问题

    半对数坐标与双对数坐标 在Matlab中绘制对数坐标的二维线图主要有以下几个函数: 函数名 语法 含义 loglog loglog(X,Y) x, y坐标轴双对数线图 semilogy semilog ...

  4. Matlab创建二维图,三维图基本操作

    要创建二维线图,请使用 plot 函数.例如,绘制从 0 到 2π 之间的正弦函数值: x = 0:pi/100:2*pi; y = sin(x); plot(x,y) 图如下: 可以标记轴并添加标题 ...

  5. matlab画二维图彩图,matlab二维图形绘制.pdf

    MATLAB 绘二维图 数据可视化的目的在于:通过图形,从一堆杂乱的离散数据中观察数 据间的内在关系,感受由图形所传递的内在本质. MATLAB 一向注重数据的图形表示,并不断地采用新技术改进和完备其 ...

  6. MATLAB编程(4)——MATLAB绘制二维高斯函数的三维图

    本篇博文记录使用MATLAB绘制二维高斯函数的三维图. 用到的MATLAB函数--mesh()(绘制三维线框图)和surf()(绘制三维表面图). MATLAB命令窗口输入>> doc 函 ...

  7. matlab生成二维服从高斯分布的数据

    matlab生成二维服从高斯分布的数据 2015-12-30 21:31 1263人阅读 评论(0) 收藏 举报  分类: matlab(8)  由于实验需要,需要生成两类模式的数据,同时这两类数据要 ...

  8. 密度图的密度估计_不同类型的二维密度图小教程

    R相关小教程链接: 用R构建气泡图案例小教程 [小教程]散点图.饼图怎么在我的文章中完美展示小教程 热图在论文发表中完美呈现小教程 R与密度.函数.变量的微妙关系 北京市计算中心医用数据库建设解决方案 ...

  9. 机器人系统设计与制作:Python语言实现2.4 用LibreCAD生成机器人的二维CAD图

    2.4 用LibreCAD生成机器人的二维CAD图 我们来看看LibreCAD的主界面,如图2-3的屏幕截图所示. 图2-3 LibreCAD主界面图 左边的CAD工具栏是绘制模型必不可少的组件,图2 ...

最新文章

  1. 收到2013年51cto限量版精美台历
  2. FMDB使用Cached Statement功能
  3. Synchronized同步的考虑
  4. V4L2框架分析学习
  5. 【SAP】自定义权限对象
  6. Unity3D学习笔记(七):叉乘和四元素
  7. Fiori Elements里General Information的设计原理
  8. WebAssembly,开发者赢了
  9. 记一次ElasticSearch 更改 mapping 字段类型的过程
  10. 【Docker】Docker 安装node-exporter prometheus pushgateway 页面显示Down
  11. Linux Telnet用法详解
  12. Druid Monitor监控Java Web和Java SE项目
  13. 锐起无盘服务器优化,锐起无盘系统制作系统优化教程.docx
  14. 全志V3s 荔枝派WiFi RTL8723BS 连接
  15. N卡怎么修改录屏文件保存位置
  16. ie首页被篡改解决方法 ie浏览器 ie浏览器首页设置 iexplore.exe触犯注册表防护规则
  17. mysql workbench 安全模式_MySQL Workbench的安全模式解决
  18. 安卓性能优化——布局性能优化
  19. vscode替换全局搜索快捷键
  20. 【Spring MVC】Json 前后端合并

热门文章

  1. [TravelNotes] WC 2017 THUWC 2017 游记
  2. ffmpeg 转换flv压缩大小_视频压缩工具ffmpeg的使用
  3. 内嵌模式搭建Hive
  4. 整理了500万+微信红包封面,速抢!
  5. 解决4K屏电脑显示问题
  6. 40个常见的HTML5 面试问题及答案
  7. micropython入门指南电子版_MicroPython入门指南
  8. 最全iPhone启动图尺寸(包含 XS Max XR)
  9. java 1 9随机数_Java-随机数详解
  10. golang: 密码中允许出现数字、大写字母、小写字母、特殊字符,但至少包含其中2种且长度在8-16之间(四种符号任意满足三种即可)