返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >Matlab实现四种HSV色轮图绘制的示例代码
  • 293
分享到

Matlab实现四种HSV色轮图绘制的示例代码

2024-04-02 19:04:59 293人浏览 独家记忆
摘要

前言 有粉丝问我图(d)上的色盘图咋画: 明度(V)渐变版 注意,此处是为了还原论文中图片所以X加了。 % 生成网格 tList=linspace(0,2.*pi,300

前言

有粉丝问我图(d)上的色盘图咋画:

明度(V)渐变版

注意,此处是为了还原论文中图片所以X加了。

% 生成网格
tList=linspace(0,2.*pi,300);
rList=linspace(0,1,100);
[theta,R]=meshgrid(tList,rList);

% 角度及半径转换为坐标
X=cos(theta+pi).*R;
Y=sin(theta).*R;
Z=zeros(size(X));

% 构造hsv网格并转换为rgb网格
hsvMesh=cat(3,theta./2./pi,ones(size(R)),R);
rgbMesh=hsv2rgb(hsvMesh);

% surf绘图
surf(X,Y,Z,'EdgeColor','none','CData',rgbMesh)
axis equal;axis([-1,1,-1,1]);
view(0,90);

饱和度(S)渐变版

% 生成网格
tList=linspace(0,2.*pi,300);
rList=linspace(0,1,100);
[theta,R]=meshgrid(tList,rList);

% 角度及半径转换为坐标
X=cos(theta).*R;
Y=sin(theta).*R;
Z=zeros(size(X));

% 构造hsv网格并转换为rgb网格
hsvMesh=cat(3,theta./2./pi,R,ones(size(R)));
rgbMesh=hsv2rgb(hsvMesh);

% surf绘图
surf(X,Y,Z,'EdgeColor','none','CData',rgbMesh)
axis equal;axis([-1,1,-1,1]);
view(0,90);

明度饱和度不变花瓣版

% 构造花瓣形状
t=(0:.1:(2.01/3*pi))+pi;
CX=cos(t)+1;
CY=sin(t);
[NCX,NCY]=rotateData(CX,CY,pi/6);
NCX=[NCX,NCX(end:-1:1)];
NCY=[NCY,-NCY(end:-1:1)];

% 循环绘图
hold on;
tt=linspace(0,2*pi,33);tt(end)=[];
for i=tt
    [tNCX,tNCY]=rotateData(NCX,NCY,i);
    fill(tNCX,tNCY,hsv2rgb([i/2/pi,1,1]),'FaceAlpha',0.2,...
        'LineWidth',1.5,'EdgeColor',[1,1,1],'EdgeAlpha',0.5)
end
axis equal;axis([-1.8,1.8,-1.8,1.8]);

% 数据旋转角度
function [X,Y]=rotateData(X,Y,theta)
    rotateMat=[cos(theta),-sin(theta);sin(theta),cos(theta)];
    XY=rotateMat*[X;Y];
    X=XY(1,:);Y=XY(2,:);
end

图片

HSV全空间

% 线性划分
h=linspace(0,2*pi,31);h=h(1:26);
s=linspace(0,1,9);
v=linspace(0,1,11);

% 绘制上面
hold on;
[H,S]=meshgrid(h,s);
surf(S.*cos(H),S.*sin(H),H-H+1,hsv2rgb(cat(3,H/2/pi,S,H-H+1)));
% 绘制侧面
[H,V]=meshgrid(h,v);
surf(V.*cos(H),V.*sin(H),V,hsv2rgb(cat(3,H/2/pi,H-H+1,V)));
% 绘制两个截面
[S,V]=meshgrid(s,v);
surf(S.*V.*cos(h(1)),S.*V.*sin(h(1)),V,hsv2rgb(cat(3,S-S+h(1)/2/pi,S,V)));
surf(S.*V.*cos(h(end)),S.*V.*sin(h(end)),V,hsv2rgb(cat(3,S-S+h(end)/2/pi,S,V)));

shading flat;view(60,45);axis off;
ax=GCa;ax.Position=[-1/6,-2/6,1+2/6,1+2/6];

到此这篇关于Matlab实现四种HSV色轮图绘制的示例代码的文章就介绍到这了,更多相关Matlab HSV色轮图内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Matlab实现四种HSV色轮图绘制的示例代码

本文链接: https://lsjlt.com/news/153593.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作