Mercurial > hg > octave-image
changeset 18:c22cf492a1f1 Octave-Forge-2002.04.20
function added to octave long ago
author | pkienzle |
---|---|
date | Sat, 20 Apr 2002 18:33:26 +0000 |
parents | 23cd9ea61d62 |
children | 3e8ff3763b52 |
files | hsv2rgb.m rgb2hsv.m |
diffstat | 2 files changed, 0 insertions(+), 131 deletions(-) [+] |
line wrap: on
line diff
deleted file mode 100644 --- a/hsv2rgb.m +++ /dev/null @@ -1,63 +0,0 @@ -## Copyright (C) 1999,2000 Kai Habel -## -## This program is free software; you can redistribute it and/or modify -## it under the terms of the GNU General Public License as published by -## the Free Software Foundation; either version 2 of the License, or -## (at your option) any later version. -## -## This program is distributed in the hope that it will be useful, -## but WITHOUT ANY WARRANTY; without even the implied warranty of -## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -## GNU General Public License for more details. -## -## You should have received a copy of the GNU General Public License -## along with this program; if not, write to the Free Software -## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -## -*- texinfo -*- -## @deftypefn {Function File} {} @var{rgb_map} = hsv2rgb (@var{hsv_map}) -## transform a colormap from the hsv space to the rgb space -## @end deftypefn -## @seealso{rgb2hsv} - -## -## Author: Kai Habel <kai.habel@gmx.de> - -function rgb_map=hsv2rgb(hsv_map) - -## each color value x=(r,g,b) is calculated with -## x = (1-s)*v+s*v*f_x(hue) -## where fx(hue) is a piecewise defined function for -## each color with f_r(h-2/3)=f_g(h)=f_b(h-1/3) - - if (is_matrix (hsv_map)) - nc = size (hsv_map, 2); - if (nc == 3) - #set values <0 to 0 and >1 to 1 - hsv_map = (hsv_map >= 0 & hsv_map <= 1) .* hsv_map\ - + (hsv_map < 0) .* 0 + (hsv_map > 1); - - #fill rgb map with v*(1-s) - rgb_map = kron ([1, 1, 1], hsv_map(:, 3) .* (1 - hsv_map(:,2))); - - #red(hue-2/3)=green(hue)=blue(hue-1/3) - #apply modulo 1 for red and blue - hue = [ (hsv_map(:, 1)' - 2/3) - floor(hsv_map(:, 1) - 2/3)'; - hsv_map(:, 1)'; - (hsv_map(:, 1)' - 1/3) - floor(hsv_map(:, 1) - 1/3)' - ]'; - #factor s*v -> f - f = kron ([1, 1, 1], hsv_map(:, 2))\ - .* kron ([1, 1, 1], hsv_map(:, 3)); - - #add s*v* hue-function to rgb map - rgb_map = rgb_map + f .* (6 * (hue < 1/6) .* hue\ - + (hue >= 1/6 & hue < 1/2)\ - + (hue >= 1/2 & hue < 2/3) .* (4 - 6 * hue)); - else - usage ("hsv2rgb(hsv_map): hsv_map must be a matrix of size nx3"); - endif - else - usage ("hsv2rgb(hsv_map): hsv_map must be a matrix of size nx3"); - endif -endfunction
deleted file mode 100644 --- a/rgb2hsv.m +++ /dev/null @@ -1,68 +0,0 @@ -## Copyright (C) 1999,2000 Kai Habel -## -## This program is free software; you can redistribute it and/or modify -## it under the terms of the GNU General Public License as published by -## the Free Software Foundation; either version 2 of the License, or -## (at your option) any later version. -## -## This program is distributed in the hope that it will be useful, -## but WITHOUT ANY WARRANTY; without even the implied warranty of -## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -## GNU General Public License for more details. -## -## You should have received a copy of the GNU General Public License -## along with this program; if not, write to the Free Software -## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -## -*- texinfo -*- -## @deftypefn {Function File} {} @var{hsv_map} = rgb2hsv (@var{rgb_map}) -## transform a colormap from the rgb space to the hsv space -## @end deftypefn -## @seealso{hsv2rgb} - -## Author: Kai Habel <kai.habel@gmx.de> - -function hsval = rgb2hsv (rgb) - if (columns(rgb) == 3) - - ## get the max and min - s = min (rgb')'; - v = max (rgb')'; - h = zeros(size(v)); - - ## no hue - notgray = (s != v); - s(!notgray) = 0; - - ## blue hue - idx = (v == rgb(:,3) & notgray); - if any(idx) - h(idx) = 2/3 + 1/6 * (rgb(idx,1)-rgb(idx,2)) ./ (v(idx) - s(idx)); - endif - - ## green hue - idx = (v == rgb(:,2) & notgray); - if any(idx) - h(idx) = 1/3 + 1/6 * (rgb(idx,3)-rgb(idx,1)) ./ (v(idx) - s(idx)); - endif - - ## red hue - idx = (v == rgb(:,1) & notgray); - if any(idx) - h(idx) = 1/6 * (rgb(idx,2)-rgb(idx,3)) ./ (v(idx) - s(idx)); - endif - - ## correct for negative red - idx = (h < 0); - h(idx) = 1+h(idx); - - ## set the saturation - s(notgray) = 1 - s(notgray) ./ v(notgray); - - hsval = [h, s, v]; - - else - usage ("rgb2hsv(rgb_map): rgb_map must be a matrix of size nx3"); - endif - -endfunction