changeset 15717:3d2357969627

NTSC images can only be of class double. * ntsc2rgb.m: Validate input is only of class double. Remove code for conversion of integer input. Remove FIXME note. * rgb2ntsc.m: Document that NTSC output is always of class double. Convert inputs of class single to double. Remove FIXME note.
author Rik <rik@octave.org>
date Sun, 02 Dec 2012 22:36:07 -0800
parents e8a4b99f8bd8
children d1285ebe60ca
files scripts/image/ntsc2rgb.m scripts/image/rgb2ntsc.m
diffstat 2 files changed, 7 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/scripts/image/ntsc2rgb.m	Sun Dec 02 13:59:00 2012 -0800
+++ b/scripts/image/ntsc2rgb.m	Sun Dec 02 22:36:07 2012 -0800
@@ -45,9 +45,8 @@
     print_usage ();
   endif
 
-  cls = class (yiq);
-  if (! any (strcmp (cls, {"uint8", "uint16", "single", "double"})))
-    error ("ntsc2rgb: invalid data type '%s'", cls);
+  if (! isa (yiq, "double"))
+    error ("ntsc2rgb: YIQ must be of type double");
   endif
 
   ## If we have an image convert it into a color map.
@@ -55,12 +54,6 @@
     is_image = true;
     sz = size (yiq);
     yiq = [yiq(:,:,1)(:), yiq(:,:,2)(:), yiq(:,:,3)(:)];
-    ## Convert to a double image.
-    if (isinteger (yiq))
-      low = double (intmin (cls));
-      high = double (intmax (cls));
-      yiq = (double (yiq) - low) / (high - low);
-    endif
   else
     is_image = false;
   endif
@@ -80,8 +73,6 @@
 
   rgb = yiq * trans;
 
-  ## FIXME: ntsc2rgb does not preserve class of image.
-  ##        Should it also convert back to uint8, uint16 for integer images?
   ## If input was an image, convert it back into one.
   if (is_image)
     rgb = reshape (rgb, sz);
@@ -106,6 +97,6 @@
 %% Test input validation
 %!error ntsc2rgb ()
 %!error ntsc2rgb (1,2)
-%!error <invalid data type 'cell'> ntsc2rgb ({1})
+%!error <YIQ must be of type double> ntsc2rgb (uint8 (1))
 %!error <must be a matrix of size Nx3 or NxMx3> ntsc2rgb (ones (2,2))
 
--- a/scripts/image/rgb2ntsc.m	Sun Dec 02 13:59:00 2012 -0800
+++ b/scripts/image/rgb2ntsc.m	Sun Dec 02 22:36:07 2012 -0800
@@ -20,7 +20,8 @@
 ## @deftypefn  {Function File} {@var{yiq_map} =} rgb2ntsc (@var{rgb_map})
 ## @deftypefnx {Function File} {@var{yiq_img} =} rgb2ntsc (@var{rgb_img})
 ## Transform a colormap or image from red-green-blue (RGB) color space to
-## luminance-chrominance (NTSC) space.
+## luminance-chrominance (NTSC) space.  The input may be of class uint8,
+## uint16, single, or double.  The output is of class double.
 ##
 ## Implementation Note:
 ## The reference matrix for the transformation is
@@ -67,6 +68,8 @@
       low = double (intmin (cls));
       high = double (intmax (cls));
       rgb = (double (rgb) - low) / (high - low);
+    elseif (isa (rgb, "single"))
+      rgb = double (rgb);
     endif
   else
     is_image = false;
@@ -86,8 +89,6 @@
   ## Convert data. 
   yiq = rgb * trans;
 
-  ## FIXME: rgb2ntsc does not preserve class of image.
-  ##        Should it also convert back to uint8, uint16 for integer images?
   ## If input was an image, convert it back into one.
   if (is_image)
     yiq = reshape (yiq, sz);