Matlab實現四種HSV色輪圖繪制的示例代碼

 更新時間:2022年07月06日 09:33:22   作者:slandarer  
色輪圖就是色彩相位圖,它完整表現了色相環360度的全部顏色。本文將利用Matlab語言繪制四種不同的HSV色輪圖,感興趣的可以動手嘗試一下

前言

有粉絲問我圖(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色輪圖內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C++的STL中accumulate函數的使用方法

    C++的STL中accumulate函數的使用方法

    這篇文章主要介紹了C++的STL中accumulate的使用方法,accumulate作用是累加求和即自定義類型數據處理,下文具體的操作方法需要的小伙伴可以參考一下
    2022-03-03
  • 完全掌握C++編程中構造函數使用的超級學習教程

    完全掌握C++編程中構造函數使用的超級學習教程

    這篇文章主要介紹了C++中的構造函數,包括C++11標準中的新特性的介紹,十分推薦!需要的朋友可以參考下
    2016-01-01
  • C++實現基于靜態數組的順序表

    C++實現基于靜態數組的順序表

    這篇文章主要介紹了C++實現基于靜態數組的順序表,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • C++簡明圖解this指針的使用

    C++簡明圖解this指針的使用

    this 指針在C++類和對象中是個很方便實用的關鍵字,可以簡化對象成員屬性的調用,使代碼表達的含義更加準確;在之前的學習中我們都可以判斷變量所占內存空間大小,那么我們創建的類對象所占的內存空間怎么計算呢?想知道this的妙用和類對象占用的內存空間就來跟我學習吧
    2022-06-06
  • C語言雙向鏈表的表示與實現實例詳解

    C語言雙向鏈表的表示與實現實例詳解

    這篇文章主要介紹了C語言雙向鏈表的表示與實現,對于研究數據結構域算法的朋友有一定的參考借鑒價值,需要的朋友可以參考下
    2014-07-07
  • C語言中用于產生隨機數的函數使用方法總結

    C語言中用于產生隨機數的函數使用方法總結

    這篇文章主要介紹了C語言中用于產生隨機數的函數使用方法總結,分別介紹了rand()函數和srand()函數以及封裝出的arc4random()函數,需要的朋友可以參考下
    2016-05-05
  • C語言詳解鏈式隊列與循環隊列的實現

    C語言詳解鏈式隊列與循環隊列的實現

    隊列(Queue)與棧一樣,是一種線性存儲結構,它具有如下特點:隊列中的數據元素遵循“先進先出”(First In First Out)的原則,簡稱FIFO結構。在隊尾添加元素,在隊頭刪除元素,本篇來講解鏈式隊列與循環隊列的實現
    2022-04-04
  • 總結了24個C++的大坑,你能躲過幾個

    總結了24個C++的大坑,你能躲過幾個

    這篇文章主要介紹了總結了24個C++的大坑,你能躲過幾個,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2021-05-05
  • C語言算法金手指摩爾投票法手撕絕大多數問題

    C語言算法金手指摩爾投票法手撕絕大多數問題

    這篇文章主要為大家介紹了C語言算法之金手指摩爾投票法手撕絕大多數問題的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2022-02-02
  • C++讀取到回車換行符問題處理

    C++讀取到回車換行符問題處理

    有一個程序只需對輸入的一行字符一個個進行獨立判斷,C的話用getchar()就好了,但是用C++的時候發現CIN似乎不接受回車符……搜索解決方法的時候很多人都建議將getline,然后處理數組或者定義一個流什么的,但是這樣一行可能很長,要占用很多空間。有沒有別的辦法?
    2015-08-08

最新評論

美丽人妻被按摩中出中文字幕