annotate graphics/colour/hsvx.m @ 61:eff6bddf82e3
tip
Finally implemented perceptual brightness thing.
author |
samer |
date |
Sun, 11 Oct 2015 10:20:42 +0100 |
parents |
82075c94eed1 |
children |
|
rev |
line source |
samer@47
|
1 % hsvx - HSV colour map with extended functionality
|
samer@47
|
2 %
|
samer@47
|
3 % hsvx :: N:natural -> [[N,3]] ~'same as hsv'.
|
samer@47
|
4 %
|
samer@47
|
5 % hsvx ::
|
samer@47
|
6 % N:natural ~'size of colormap to return',
|
samer@47
|
7 % 0--1 ~'inital hue',
|
samer@47
|
8 % 0--1 ~'saturation',
|
samer@47
|
9 % 0--1 ~'value'
|
samer@47
|
10 % options {
|
samer@61
|
11 % brightness :: real/0 ~'try to get even perceptual brightness: 0 not, 1 full'
|
samer@47
|
12 % }
|
samer@47
|
13 % -> [[N,3]].
|
samer@47
|
14
|
samer@47
|
15 function M=hsvx(N,H0,S,V,varargin)
|
samer@47
|
16
|
samer@47
|
17 if nargin<2, H0=0; end
|
samer@47
|
18 if nargin<3, S=1; end
|
samer@47
|
19 if nargin<4, V=1; end
|
samer@61
|
20 opts=options('brightness',0,varargin{:});
|
samer@47
|
21
|
samer@47
|
22 H=linspace(H0,H0+1,N+1);
|
samer@47
|
23 M=hsv2rgb([mod(H(1:end-1),1)',repmat([S,V],N,1)]);
|
samer@61
|
24 if opts.brightness >0
|
samer@61
|
25 L=luminocity(M).^opts.brightness;
|
samer@61
|
26 M=M./repmat(L,1,3);
|
samer@61
|
27 M=V*M./max(max(M));
|
samer@61
|
28 end
|
samer@47
|
29 end
|
samer@47
|
30
|