Mercurial > octave-antonio
annotate scripts/image/colorcube.m @ 17118:c97a26408ee0
Implement PixelRegion option for imread().
* imread.m: document new option.
* private/__imread__.m: parse new option and set defaults.
* __magick_read__.cc (calculate region): new option to calculate the region
to be read, shifts in memory required, and output image size.
(read_indexed_images, read_images): implement reading of only specific
regions of an image.
(__magick_read__): get octave_scalar_map at start for simplicity.
author | Carnë Draug <carandraug@octave.org> |
---|---|
date | Wed, 31 Jul 2013 21:28:48 +0100 |
parents | 1a800034d443 |
children | b81b9d079515 |
rev | line source |
---|---|
14274
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
1 ## Copyright (C) 2012 Rik Wehbring |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
2 ## |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
3 ## This file is part of Octave. |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
4 ## |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
5 ## Octave is free software; you can redistribute it and/or modify it |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
6 ## under the terms of the GNU General Public License as published by |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
7 ## the Free Software Foundation; either version 3 of the License, or (at |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
8 ## your option) any later version. |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
9 ## |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
10 ## Octave is distributed in the hope that it will be useful, but |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
11 ## WITHOUT ANY WARRANTY; without even the implied warranty of |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
12 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
13 ## General Public License for more details. |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
14 ## |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
15 ## You should have received a copy of the GNU General Public License |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
16 ## along with Octave; see the file COPYING. If not, see |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
17 ## <http://www.gnu.org/licenses/>. |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
18 |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
19 ## -*- texinfo -*- |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
20 ## @deftypefn {Function File} {@var{map} =} colorcube () |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
21 ## @deftypefnx {Function File} {@var{map} =} colorcube (@var{n}) |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
22 ## Create color colormap. This colormap is composed of as many equally |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
23 ## spaced colors (not grays) in the RGB color space as possible. If there |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
24 ## are not a perfect number @var{n} of regularly spaced colors then the |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
25 ## remaining entries in the colormap are gradients of pure red, green, blue, |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
26 ## and gray. |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
27 ## The argument @var{n} must be a scalar. |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
28 ## If unspecified, the length of the current colormap, or 64, is used. |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
29 ## @seealso{colormap} |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
30 ## @end deftypefn |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
31 |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
32 function map = colorcube (n) |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
33 |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
34 if (nargin == 0) |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
35 n = rows (colormap); |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
36 elseif (nargin == 1) |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
37 if (! isscalar (n)) |
15720
1a800034d443
Colormap error() calls now report the input variable which is a problem.
Rik <rik@octave.org>
parents:
14274
diff
changeset
|
38 error ("colorcube: N must be a scalar"); |
14274
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
39 endif |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
40 else |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
41 print_usage (); |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
42 endif |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
43 |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
44 if (n < 9) |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
45 map = gray (n); |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
46 return; |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
47 endif |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
48 |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
49 # Create colorcube of evenly spaced points with side length of n^1/3 |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
50 cubelen = fix (cbrt (n)); |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
51 reserve = n - cubelen^3; |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
52 |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
53 if (reserve == 0) |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
54 # Steal space from blue to put the gray gradient |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
55 [r, g, b] = meshgrid (linspace (0,1,cubelen), |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
56 linspace (0,1,cubelen), |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
57 linspace (0,1,cubelen-1)); |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
58 else |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
59 [r, g, b] = meshgrid (linspace (0,1,cubelen), |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
60 linspace (0,1,cubelen), |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
61 linspace (0,1,cubelen)); |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
62 endif |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
63 |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
64 # Create map and weed out grays |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
65 map = [r(:), g(:), b(:)]; |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
66 idx = any (bsxfun (@ne, map(:, 1), map(:, 2:3)), 2); |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
67 map = map(idx, :); |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
68 |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
69 # Weed out pure colors |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
70 idx = sum (map == 0, 2); |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
71 map = map(idx != 2, :); |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
72 |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
73 # Put in remaining gradients of pure red, green, blue, and gray |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
74 reserve = n - rows (map) - 1; |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
75 csteps = fix (reserve/4); |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
76 cstepsz = 1 / csteps; |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
77 cgrad = (cstepsz:cstepsz:1)'; |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
78 gsteps = reserve - 3*csteps; |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
79 gstepsz = 1 / gsteps; |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
80 ggrad = (gstepsz:gstepsz:1)'; |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
81 map = [map |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
82 cgrad, zeros(csteps, 1), zeros(csteps, 1) |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
83 zeros(csteps, 1), cgrad, zeros(csteps, 1) |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
84 zeros(csteps, 1), zeros(csteps, 1), cgrad |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
85 0, 0, 0 |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
86 ggrad, ggrad, ggrad]; |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
87 |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
88 endfunction |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
89 |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
90 |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
91 %!demo |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
92 %! ## Show the 'colorcube' colormap as an image |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
93 %! image (1:64, linspace (0, 1, 64), repmat ((1:64)', 1, 64)); |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
94 %! axis ([1, 64, 0, 1], "ticy", "xy"); |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
95 %! colormap (colorcube (64)); |
727b74f512af
colorcube.m: Add new colormap which maximizes equally spaced colors.
Rik <octave@nomad.inbox5.com>
parents:
diff
changeset
|
96 |