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