# HG changeset patch # User Carnë Draug # Date 1446061862 0 # Node ID a278de349250f1027211f07b2d61d557f319e387 # Parent a5ed88c9eb148a82165ca8b6dd78488de1c562b8 Add more tests for color space conversion functions (patch #8709) * scripts/image/hsv2rgb.m, scripts/image/ntsc2rgb.m, scripts/image/rgb2hsv.m, scripts/image/rgb2ntsc.m: most existing tests only checked conversion of colormaps (because those are easier to write). Add test for actual small images (MxNx3 arrays) converted. Also add tests for the output class. diff -r a5ed88c9eb14 -r a278de349250 scripts/image/hsv2rgb.m --- a/scripts/image/hsv2rgb.m Mon Oct 26 02:34:29 2015 +0000 +++ b/scripts/image/hsv2rgb.m Wed Oct 28 19:51:02 2015 +0000 @@ -143,3 +143,53 @@ %! rgb(:,:,:,i) = hsv2rgb (hsv(:,:,:,i)); %! endfor %! assert (hsv2rgb (hsv), rgb) + +## Test output class and size for input images. +## Most of the tests only test for colormap input. + +%!test +%! rgb = hsv2rgb (rand (10, 10, 3)); +%! assert (class (rgb), "double") +%! assert (size (rgb), [10 10 3]) + +%!test +%! rgb = hsv2rgb (rand (10, 10, 3, "single")); +%! assert (class (rgb), "single") +%! assert (size (rgb), [10 10 3]) + +%!test +%! rgb = (rand (10, 10, 3) * 3 ) - 0.5; # values outside range [0 1] +%! rgb = hsv2rgb (rgb); +%! assert (class (rgb), "double") +%! assert (size (rgb), [10 10 3]) + +%!test +%! rgb = (rand (10, 10, 3, "single") * 3 ) - 0.5; # values outside range [0 1] +%! rgb = hsv2rgb (rgb); +%! assert (class (rgb), "single") +%! assert (size (rgb), [10 10 3]) + +%!test +%! rgb = hsv2rgb (randi ([0 255], 10, 10, 3, "uint8")); +%! assert (class (rgb), "double") +%! assert (size (rgb), [10 10 3]) + +%!test +%! rgb = hsv2rgb (randi ([0 65535], 10, 10, 3, "uint16")); +%! assert (class (rgb), "double") +%! assert (size (rgb), [10 10 3]) + +%!test +%! rgb = hsv2rgb (randi ([-128 127], 10, 10, 3, "uint16")); +%! assert (class (rgb), "double") +%! assert (size (rgb), [10 10 3]) + +%!test +%! hsv_double = reshape ([2/3 1/3 1 0 1 1 1 0, 1 1 1 1], [2 2 3]); +%! hsv_uint8 = reshape (uint8 ([170 85 255 0 255 255 255 0 255 255 255 255]), +%! [2 2 3]); +%! expected = reshape ([0 0 1 1 0 1 0 1 1 0 0 1], [2 2 3]); +%! +%! assert (hsv2rgb (hsv_double), expected) +%! assert (hsv2rgb (hsv_uint8), expected) +%! assert (hsv2rgb (single (hsv_double)), single (expected), eps (single (2))) diff -r a5ed88c9eb14 -r a278de349250 scripts/image/ntsc2rgb.m --- a/scripts/image/ntsc2rgb.m Mon Oct 26 02:34:29 2015 +0000 +++ b/scripts/image/ntsc2rgb.m Wed Oct 28 19:51:02 2015 +0000 @@ -133,3 +133,51 @@ %! rgb(:,:,:,i) = ntsc2rgb (yiq(:,:,:,i)); %! endfor %! assert (ntsc2rgb (yiq), rgb) + +## Test output class and size for input images. +## Most of the tests only test for colormap input. + +%!test +%! rgb = ntsc2rgb (rand (10, 10, 3)); +%! assert (class (rgb), "double") +%! assert (size (rgb), [10 10 3]) + +%!test +%! rgb = ntsc2rgb (rand (10, 10, 3, "single")); +%! assert (class (rgb), "single") +%! assert (size (rgb), [10 10 3]) + +%!test +%! ntsc = (rand (10, 10, 3) * 3 ) - 0.5; # values outside range [0 1] +%! rgb = ntsc2rgb (ntsc); +%! assert (class (rgb), "double") +%! assert (size (rgb), [10 10 3]) + +%!test +%! ntsc = (rand (10, 10, 3, "single") * 3 ) - 0.5; # values outside range [0 1] +%! rgb = ntsc2rgb (ntsc); +%! assert (class (rgb), "single") +%! assert (size (rgb), [10 10 3]) + +%!test +%! rgb = ntsc2rgb (randi ([0 255], 10, 10, 3, "uint8")); +%! assert (class (rgb), "double") +%! assert (size (rgb), [10 10 3]) + +%!test +%! rgb = ntsc2rgb (randi ([0 65535], 10, 10, 3, "uint16")); +%! assert (class (rgb), "double") +%! assert (size (rgb), [10 10 3]) + +%!test +%! rgb = ntsc2rgb (randi ([-128 127], 10, 10, 3, "uint16")); +%! assert (class (rgb), "double") +%! assert (size (rgb), [10 10 3]) + +%!test +%! ntsc_double = reshape ([.299 .587 .114 0 .596 -.274 -.322 0 .211 -.523 .312 0], +%! [2 2 3]); +%! expected = reshape ([1 0 0 0 0 1 0 0 0 0 1 0], [2 2 3]); +%! +%! assert (ntsc2rgb (ntsc_double), expected, 1e-5) +%! assert (ntsc2rgb (single (ntsc_double)), single (expected), 1e-5) diff -r a5ed88c9eb14 -r a278de349250 scripts/image/rgb2hsv.m --- a/scripts/image/rgb2hsv.m Mon Oct 26 02:34:29 2015 +0000 +++ b/scripts/image/rgb2hsv.m Wed Oct 28 19:51:02 2015 +0000 @@ -121,3 +121,53 @@ %! hsv(:,:,:,i) = rgb2hsv (rgb(:,:,:,i)); %! endfor %! assert (rgb2hsv (rgb), hsv) + +## Test output class and size for input images. +## Most of the tests only test for colormap input. + +%!test +%! hsv = rgb2hsv (rand (10, 10, 3)); +%! assert (class (hsv), "double") +%! assert (size (hsv), [10 10 3]) + +%!test +%! hsv = rgb2hsv (rand (10, 10, 3, "single")); +%! assert (class (hsv), "single") +%! assert (size (hsv), [10 10 3]) + +%!test +%! rgb = (rand (10, 10, 3) * 3 ) - 0.5; # values outside range [0 1] +%! hsv = rgb2hsv (rgb); +%! assert (class (hsv), "double") +%! assert (size (hsv), [10 10 3]) + +%!test +%! rgb = (rand (10, 10, 3, "single") * 3 ) - 0.5; # values outside range [0 1] +%! hsv = rgb2hsv (rgb); +%! assert (class (hsv), "single") +%! assert (size (hsv), [10 10 3]) + +%!test +%! hsv = rgb2hsv (randi ([0 255], 10, 10, 3, "uint8")); +%! assert (class (hsv), "double") +%! assert (size (hsv), [10 10 3]) + +%!test +%! hsv = rgb2hsv (randi ([0 65535], 10, 10, 3, "uint16")); +%! assert (class (hsv), "double") +%! assert (size (hsv), [10 10 3]) + +%!test +%! hsv = rgb2hsv (randi ([-128 127], 10, 10, 3, "uint16")); +%! assert (class (hsv), "double") +%! assert (size (hsv), [10 10 3]) + +%!test +%! rgb_double = reshape ([1 0 1 .5 1 1 0 .5 0 1 1 .5], [2 2 3]); +%! rgb_uint8 = reshape (uint8 ([255 0 255 128 255 255 0 128 0 255 255 128]), +%! [2 2 3]); +%! expected = reshape ([1/6 1/2 5/6 0 1 1 1 0 1 1 1 .5], [2 2 3]); +%! +%! assert (rgb2hsv (rgb_double), expected) +%! assert (rgb2hsv (rgb_uint8), expected, 0.005) +%! assert (rgb2hsv (single (rgb_double)), single (expected)) diff -r a5ed88c9eb14 -r a278de349250 scripts/image/rgb2ntsc.m --- a/scripts/image/rgb2ntsc.m Mon Oct 26 02:34:29 2015 +0000 +++ b/scripts/image/rgb2ntsc.m Wed Oct 28 19:51:02 2015 +0000 @@ -99,3 +99,54 @@ %! yiq(:,:,:,i) = rgb2ntsc (rgb(:,:,:,i)); %! endfor %! assert (rgb2ntsc (rgb), yiq) + +## Test output class and size for input images. +## Most of the tests only test for colormap input. + +%!test +%! ntsc = rgb2ntsc (rand (10, 10, 3)); +%! assert (class (ntsc), "double") +%! assert (size (ntsc), [10 10 3]) + +%!test +%! ntsc = rgb2ntsc (rand (10, 10, 3, "single")); +%! assert (class (ntsc), "single") +%! assert (size (ntsc), [10 10 3]) + +%!test +%! rgb = (rand (10, 10, 3) * 3 ) - 0.5; # values outside range [0 1] +%! ntsc = rgb2ntsc (rgb); +%! assert (class (ntsc), "double") +%! assert (size (ntsc), [10 10 3]) + +%!test +%! rgb = (rand (10, 10, 3, "single") * 3 ) - 0.5; # values outside range [0 1] +%! ntsc = rgb2ntsc (rgb); +%! assert (class (ntsc), "single") +%! assert (size (ntsc), [10 10 3]) + +%!test +%! ntsc = rgb2ntsc (randi ([0 255], 10, 10, 3, "uint8")); +%! assert (class (ntsc), "double") +%! assert (size (ntsc), [10 10 3]) + +%!test +%! ntsc = rgb2ntsc (randi ([0 65535], 10, 10, 3, "uint16")); +%! assert (class (ntsc), "double") +%! assert (size (ntsc), [10 10 3]) + +%!test +%! ntsc = rgb2ntsc (randi ([-128 127], 10, 10, 3, "uint16")); +%! assert (class (ntsc), "double") +%! assert (size (ntsc), [10 10 3]) + +%!test +%! rgb_double = reshape ([1 0 0 0 0 1 0 0 0 0 1 0], [2 2 3]); +%! rgb_uint8 = reshape (uint8 ([255 0 0 0 0 255 0 0 0 0 255 0]), +%! [2 2 3]); +%! expected = reshape ([.299 .587 .114 0 .596 -.274 -.322 0 .211 -.523 .312 0], +%! [2 2 3]); +%! +%! assert (rgb2ntsc (rgb_double), expected) +%! assert (rgb2ntsc (rgb_uint8), expected) +%! assert (rgb2ntsc (single (rgb_double)), single (expected))