Mercurial > octave
changeset 20664:a278de349250
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.
author | Carnë Draug <carandraug@octave.org> |
---|---|
date | Wed, 28 Oct 2015 19:51:02 +0000 |
parents | a5ed88c9eb14 |
children | 67e6343cd29a |
files | scripts/image/hsv2rgb.m scripts/image/ntsc2rgb.m scripts/image/rgb2hsv.m scripts/image/rgb2ntsc.m |
diffstat | 4 files changed, 199 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- 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)))
--- 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)
--- 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))
--- 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))