From 5faf10d43f1e65a760b309c0d0356faf618d09a7 Mon Sep 17 00:00:00 2001 From: Larry Gritz Date: Sat, 26 Aug 2023 14:18:11 -0700 Subject: [PATCH] fix: normalize cleanup * Add documentation for oiiotool --normalize * Add tests for oiiotool --normalize * Revamp existing normalize tests in testsuite/python-imagebofalgo: Get rid of old test images and refs, because their values were already normalized, so was probably not testing the math. Make new tests that are much smaller, 3x3 images that contain specific (non-normalized) values to verify they all get normalized corectly. They'll run a lot faster, too. Signed-off-by: Larry Gritz --- Makefile | 2 +- src/doc/oiiotool.rst | 32 ++++++++++++++ src/include/OpenImageIO/imagebufalgo.h | 4 ++ testsuite/common/vectorschart_raw.tif | Bin 37280 -> 0 bytes testsuite/common/vectorschart_raw_xyza.exr | Bin 24143 -> 0 bytes testsuite/oiiotool/ref/normalize.exr | Bin 0 -> 405 bytes testsuite/oiiotool/ref/normalize_in.exr | Bin 0 -> 412 bytes testsuite/oiiotool/ref/normalize_offsetin.exr | Bin 0 -> 408 bytes .../oiiotool/ref/normalize_offsetscale.exr | Bin 0 -> 408 bytes .../oiiotool/ref/normalize_offsetscaleout.exr | Bin 0 -> 408 bytes testsuite/oiiotool/ref/normalize_scale.exr | Bin 0 -> 405 bytes testsuite/oiiotool/ref/out.txt | 10 +++++ testsuite/oiiotool/run.py | 10 +++++ testsuite/oiiotool/src/norm.exr | Bin 0 -> 412 bytes testsuite/oiiotool/src/normoffset.exr | Bin 0 -> 412 bytes testsuite/python-imagebufalgo/ref/norm.exr | Bin 0 -> 412 bytes .../python-imagebufalgo/ref/normalize.exr | Bin 0 -> 405 bytes .../ref/normalize_flfl.exr | Bin 31894 -> 0 bytes .../ref/normalize_flui.tif | Bin 10027 -> 0 bytes .../ref/normalize_flui_na.tif | Bin 10027 -> 0 bytes .../python-imagebufalgo/ref/normalize_in.exr | Bin 0 -> 412 bytes .../ref/normalize_offsetin.exr | Bin 0 -> 408 bytes .../ref/normalize_offsetscale.exr | Bin 0 -> 408 bytes .../ref/normalize_offsetscaleout.exr | Bin 0 -> 408 bytes .../ref/normalize_scale.exr | Bin 0 -> 405 bytes .../ref/normalize_uifl.exr | Bin 10895 -> 0 bytes .../ref/normalize_uiui.tif | Bin 22614 -> 0 bytes .../python-imagebufalgo/ref/normoffset.exr | Bin 0 -> 412 bytes .../out-freetype2.4.11-py2.7-pybind2.3.txt | 18 +++++--- .../ref/out-freetype2.4.11.txt | 18 +++++--- .../ref/out-python2-alt.txt | 18 +++++--- .../ref/out-python3-freetype2.4.11.txt | 18 +++++--- .../python-imagebufalgo/ref/out-python3.txt | 18 +++++--- testsuite/python-imagebufalgo/ref/out.txt | 18 +++++--- testsuite/python-imagebufalgo/run.py | 8 ++-- .../src/test_imagebufalgo.py | 41 +++++++++++------- 36 files changed, 153 insertions(+), 62 deletions(-) delete mode 100644 testsuite/common/vectorschart_raw.tif delete mode 100644 testsuite/common/vectorschart_raw_xyza.exr create mode 100644 testsuite/oiiotool/ref/normalize.exr create mode 100644 testsuite/oiiotool/ref/normalize_in.exr create mode 100644 testsuite/oiiotool/ref/normalize_offsetin.exr create mode 100644 testsuite/oiiotool/ref/normalize_offsetscale.exr create mode 100644 testsuite/oiiotool/ref/normalize_offsetscaleout.exr create mode 100644 testsuite/oiiotool/ref/normalize_scale.exr create mode 100644 testsuite/oiiotool/src/norm.exr create mode 100644 testsuite/oiiotool/src/normoffset.exr create mode 100644 testsuite/python-imagebufalgo/ref/norm.exr create mode 100644 testsuite/python-imagebufalgo/ref/normalize.exr delete mode 100644 testsuite/python-imagebufalgo/ref/normalize_flfl.exr delete mode 100644 testsuite/python-imagebufalgo/ref/normalize_flui.tif delete mode 100644 testsuite/python-imagebufalgo/ref/normalize_flui_na.tif create mode 100644 testsuite/python-imagebufalgo/ref/normalize_in.exr create mode 100644 testsuite/python-imagebufalgo/ref/normalize_offsetin.exr create mode 100644 testsuite/python-imagebufalgo/ref/normalize_offsetscale.exr create mode 100644 testsuite/python-imagebufalgo/ref/normalize_offsetscaleout.exr create mode 100644 testsuite/python-imagebufalgo/ref/normalize_scale.exr delete mode 100644 testsuite/python-imagebufalgo/ref/normalize_uifl.exr delete mode 100644 testsuite/python-imagebufalgo/ref/normalize_uiui.tif create mode 100644 testsuite/python-imagebufalgo/ref/normoffset.exr diff --git a/Makefile b/Makefile index f9ecb17d2e..d6ba974a48 100644 --- a/Makefile +++ b/Makefile @@ -299,7 +299,7 @@ clang-format: config # DEPRECATED: 'make dist' is just a synonym for 'make install' dist : install -TEST_FLAGS += --force-new-ctest-process --output-on-failure --progress +TEST_FLAGS += --force-new-ctest-process --output-on-failure # 'make test' does a full build and then runs all tests test: build diff --git a/src/doc/oiiotool.rst b/src/doc/oiiotool.rst index d719f19dc8..e32eaa0dc9 100644 --- a/src/doc/oiiotool.rst +++ b/src/doc/oiiotool.rst @@ -2557,6 +2557,38 @@ current top image. Include/exclude subimages (see :ref:`sec-oiiotool-subimage-modifier`). +.. option:: --normalize + + Normalize the top image. Assuming the first three channels represent a 3D + vector, divide each pixel by its length to make it unit length. This + function assumes a 3-channel image that represents a 3-vector, or a + 4-channel image that represents a 3-vector plus an alpha value. If an + alpha channel is present, its value is merely copied, and is not part of + the normalization computation. + + Optional appended modifiers include: + + `:incenter=` *float* + The pixel value that corresponds to a 0.0 vector value for the input. + (default: 0.0) + + `:outcenter=` *float* + The pixel value that corresponds to a 0.0 vector value for the output. + (default: 0.0) + + `:scale=` *float* + The desired length of the output vectors. (default: 1.0) + + Example:: + + # Normalize a floating point image containing vector values: + oiiotool xyzvectors.exr --normalize -o normalized.exr + + # Normalize an unsigned integer image where [-1,1] vector values + # are encoded on [0,1] for both input and output: + oiiotool xyzvectors.tif --normalize:incenter=0.5:outcenter=0.5:scale=0.5 -o normalized.tif + + .. option:: --noise Alter the top image to introduce noise, with the option `:type=` diff --git a/src/include/OpenImageIO/imagebufalgo.h b/src/include/OpenImageIO/imagebufalgo.h index 8805d74426..bbefc8187b 100644 --- a/src/include/OpenImageIO/imagebufalgo.h +++ b/src/include/OpenImageIO/imagebufalgo.h @@ -1047,6 +1047,10 @@ bool OIIO_API pow (ImageBuf &dst, const ImageBuf &A, cspan B, /// `outCenter=0.5` and `scale=0.5`, but if you want them to be in the range /// [-1,1], use `outCenter=0.0` and `scale=1.0` (this probably will only work /// if you intend to write the results in `float` or `half` format). +/// +/// Expressed another way, the computation is conceptually: +/// +/// out = outCenter + scale * (in - inCenter) / length(in - inCenter) /// bool OIIO_API normalize(ImageBuf& dst, const ImageBuf& A, float inCenter=0.0f, float outCenter=0.0f, float scale=1.0f, diff --git a/testsuite/common/vectorschart_raw.tif b/testsuite/common/vectorschart_raw.tif deleted file mode 100644 index 59713d04f641e2e6093242a8b561f8816b0e747a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37280 zcmeFZc|4Te|35wqNisuO5)~qCvSk}HV{C;Q#$Lt}W-QspzKfe;ri`(Ngb;VhQc8%F z6iTFQSxXYa*q5<f><;C{+$2q^`a zlp+YO>`Sn+am0HHTI1~;ToA$&6_14l9dHO?6Irw*nxKZachK~A#~b+T7~1$d+9=|L zm66-vzA#^Bf-~OJO3>HY$;AWaix9S=mktAHI$J_ma9zdI5h467tTSkgpqi^YUQqFv zl(>zgq?Dk%;xQ`)+;MqXnWKXA&?F>fB&21;fdFOYU^4Q8-!Eb0Hh_Y=<7{F2>Lm$`CH~0> zXR~2L@N#!r4-ID{fp@|?<6S&G06VFFv;#0jqc=?du{dYvf3)=Q)bIvs@EwtVwDd6a zBj6?U@gA;T?lyQ0Zy=KW{}jB3r#}8CxSMbVsQ;rQ!jFdd&v9*t|1FH34z~X$5W3{w zn&EvN{*4)3^380$O?`XRZ~%3fnmgXg)79P3)zu04FWpGynDozX1ef@`{?AtP(-mIb z$`g+STD7#eq_nuSw4sz7Oj;f$BYi|t5hf}5i<57ffAfI`x)9FF)9Qy8dan?dmNNX& zZGZLh7u~=6am6{<`fbX~Pt9L^;A~*FuI|oOo=690D?7Xd9e23IPwp?O>undN<>KLK zQoUQ%4a`nbHfg1oh?xIA87MiysnYa=IbvyKNE z{j2%ExK?+y@uGJh!1cGG2Ip!6xZh|-FiD)1w5>G`FK(l#XeDl~a2zjgeOv}Ft|+Z& zV4(me}!OGnOPw&wP z;U8UkV~pDv!ss^ZBLmFJhCbLKZRpJ$kAqA6h5IwC4a@Il4*&W%HwVEt|G$|3`!am& z@h<-WsJ5%n9szo`E|tQHRM?(pAfkH18@fr#M$f2;RD?rfWzzkYYNpL56h$oba^ z?8m(OuM-}9%>>N+>fc)733@l754`{N{02->z{(T$%N+A##j)Ap@o(mT>2u$`18a;Q zi;n-^8sJ-SznK4%ch~>vO5j$%H2BZulbWlOt2^2iheradq<>=n z;*&mV!GHx0FxgtIFD#_s>ubZm@cyoUhQ3g7@>eSUY2@PIiIo0c+TYl}SkYe+VC!HQ0B^>4q@1j*j4WK@@9e)@U>tn$PG{5|fF-I2 zeW@iS2UKj`=4c7(~n<0L~wHcH)bbiCN0mWvB-*9aPr460m zaBV=b8R9own?Y$q=Qms%P;7?y4cBH++R*t8*9H`uA%4TP8I(43e#5l^#b$`#aBT*q z4V~X`Z9uUZ;x}BIL1{zhH(VP~Y=-y^*Je=K(D@D51{9kie#5mHls0sJ!?gj$W{BT# zZ3d+co!@Y6K(QI(H(Z-RX+!5XTpLhqhWHKFW>DJD`3=_w6q_M_!?hWdHgtZ&wE@Lu zh~IE+2Bi(1-*9a}u^HkwT$@2@L+3YK8&GV9_zl-)P}

4c7(~n<0L~wHcH)bbiCN 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 diff --git a/testsuite/common/vectorschart_raw_xyza.exr b/testsuite/common/vectorschart_raw_xyza.exr deleted file mode 100644 index 210d19bc162ff2fa3e87a461967f1d646a7613e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24143 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 AZ~y=R literal 0 HcmV?d00001 diff --git a/testsuite/oiiotool/ref/normalize_in.exr b/testsuite/oiiotool/ref/normalize_in.exr new file mode 100644 index 0000000000000000000000000000000000000000..27f10471ee473c8982a6046062fc9a5382d1f826 GIT binary patch literal 412 zcmXTZH)LdDU|>j2EO1FINo6Q5Day=CXAlMo85tNETNzkb8JQ^3Fak*s0MQ`qjv*3+A;OTHpIcCrT3no&pNGN*8Ni&9Sdti? znU|7Z&XAN}VU)=r02GA*kaIyeC9}97C$W;Cx}40sRR5xs)FK813+&{A%!t`#0i==bTa7R{-;Uu?I FBLIVPSzQ1C literal 0 HcmV?d00001 diff --git a/testsuite/oiiotool/ref/normalize_offsetin.exr b/testsuite/oiiotool/ref/normalize_offsetin.exr new file mode 100644 index 0000000000000000000000000000000000000000..1199caa4de31b2761ace03ffc97b67268688712e GIT binary patch literal 408 zcmXTZH)LdDU|>j2EO1FINo6Q5Day=CXAlMo85tNETNzkb8JQ^<8d@0}S{WE8XC&t3 zrREefBxmGg7MC!X1C=>3Fak*s0MQ`qjv*3+A;OTHpIcCrT3no&pNGN*8Ni&9Sdti? znU|7Z&XAN}VU)=r02GA*kaIyeC9}97C$W;Cx}40sRR5xs)FK813+&{A%!t`#0i=j2EO1FINo6Q5Day=CXAlMo85tNETNzkb8JQ^<8d@0}S{WE8XC&t3 zrREefBxmGg7MC!X1C=>3Fak*s0MQ`qjv*3+A;OTHpIcCrT3no&pNGN*8Ni&9Sdti? znU|7Z&XAN}VU)=r02GA*kaIyeC9}97C$W;Cx}40sRR5xs)FK813+&{A%!t`#0i=j2EO1FINo6Q5Day=CXAlMo85tNETNzkb8JQ^<8d@0}S{WE8XC&t3 zrREefBxmGg7MC!X1C=>3Fak*s0MQ`qjv*3+A;OTHpIcCrT3no&pNGN*8Ni&9Sdti? znU|7Z&XAN}VU)=r02GA*kaIyeC9}97C$W;Cx}40sRR5xs)FK813+&{A%!t`#0i=@Bw+ZCbo==|R>bpKpX*zZi1uVhB6K`}5K} E0iU2@+5i9m literal 0 HcmV?d00001 diff --git a/testsuite/oiiotool/ref/normalize_scale.exr b/testsuite/oiiotool/ref/normalize_scale.exr new file mode 100644 index 0000000000000000000000000000000000000000..559b535fa6e0fd99d8897d6e9450941cbf836452 GIT binary patch literal 405 zcmXTZH)LdDU|>j2EO1FINo6Q5Day=CXAlMo85tNETNzkb8JQ^<8d@0}S{WE8XC&t3 zrREefBxmGg7MC!X1C=>3Fak*s0MQ`qjv*3+A;OTHpIcCrT3no&pNGN*8Ni&9Sdti? znU|7Z&XAN}VU)=r02GA*kaIyeC9}97C$W;Cx}40sRR5xs)FK813+&{A%!t`#0i=j2EO1FINo6Q5Day=CXAlMo85tNETNzkb8JQ^<8d@0}S{WE8XC&t3 zrREefBxmGg7MC!X1C=>3Fak*s0MQ`qjv*3+A;OTHpIcCrT3no&pNGN*8Ni&9Sdti? znU|7Z&XAN}VU)=r02GA*kaIyeC9}97C$W;Cx}40sRR5xs)FK813+&{A%!t`#0i==bTa7R{-;Uu?I FBLHKjSw{c> literal 0 HcmV?d00001 diff --git a/testsuite/oiiotool/src/normoffset.exr b/testsuite/oiiotool/src/normoffset.exr new file mode 100644 index 0000000000000000000000000000000000000000..dc62c97ab29cbde16dff950a0f8c58c35e363d13 GIT binary patch literal 412 zcmXTZH)LdDU|>j2EO1FINo6Q5Day=CXAlMo85tNETNzkb8JQ^<8d@0}S{WE8XC&t3 zrREefBxmGg7MC!X1C=>3Fak*s0MQ`qjv*3+A;OTHpIcCrT3no&pNGN*8Ni&9Sdti? znU|7Z&XAN}VU)=r02GA*kaIyeC9}97C$W;Cx}40sRR5xs)FK813+&{A%!t`#0i=j2EO1FINo6Q5Day=CXAlMo85tNETNzkb8JQ^<8d@0}S{WE8XC&t3 zrREefBxmGg7MC!X1C=>3Fak*s0MQ`qjv*3+A;OTHpIcCrT3no&pNGN*8Ni&9Sdti? znU|7Z&XAN}VU)=r02GA*kaIyeC9}97C$W;Cx}40sRR5xs)FK813+&{A%!t`#0i==bTa7R{-;Uu?I FBLHKjSw{c> literal 0 HcmV?d00001 diff --git a/testsuite/python-imagebufalgo/ref/normalize.exr b/testsuite/python-imagebufalgo/ref/normalize.exr new file mode 100644 index 0000000000000000000000000000000000000000..b4e29d05cd52b81f6977b5a259e7c944b1afdb80 GIT binary patch literal 405 zcmXTZH)LdDU|>j2EO1FINo6Q5Day=CXAlMo85tNETNzkb8JQ^<8d@0}S{WE8XC&t3 zrREefBxmGg7MC!X1C=>3Fak*s0MQ`qjv*3+A;OTHpIcCrT3no&pNGN*8Ni&9Sdti? znU|7Z&XAN}VU)=r02GA*kaIyeC9}97C$W;Cx}40sRR5xs)FK813+&{A%!t`#0i=`MQN#ZDqpTdm$p)!L06!&M AZ~y=R literal 0 HcmV?d00001 diff --git a/testsuite/python-imagebufalgo/ref/normalize_flfl.exr b/testsuite/python-imagebufalgo/ref/normalize_flfl.exr deleted file mode 100644 index b39bb81ab9a976df8872bcb68e7b62f17e4682ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31894 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 nv;SG(^FjOnF7ToA#@TYofGLYE{7r+ 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 diff --git a/testsuite/python-imagebufalgo/ref/normalize_flui_na.tif b/testsuite/python-imagebufalgo/ref/normalize_flui_na.tif deleted file mode 100644 index c646fb5b225f816d8736b3b27c7189ca3fbfb3d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10027 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 diff --git a/testsuite/python-imagebufalgo/ref/normalize_in.exr b/testsuite/python-imagebufalgo/ref/normalize_in.exr new file mode 100644 index 0000000000000000000000000000000000000000..27f10471ee473c8982a6046062fc9a5382d1f826 GIT binary patch literal 412 zcmXTZH)LdDU|>j2EO1FINo6Q5Day=CXAlMo85tNETNzkb8JQ^3Fak*s0MQ`qjv*3+A;OTHpIcCrT3no&pNGN*8Ni&9Sdti? znU|7Z&XAN}VU)=r02GA*kaIyeC9}97C$W;Cx}40sRR5xs)FK813+&{A%!t`#0i==bTa7R{-;Uu?I FBLIVPSzQ1C literal 0 HcmV?d00001 diff --git a/testsuite/python-imagebufalgo/ref/normalize_offsetin.exr b/testsuite/python-imagebufalgo/ref/normalize_offsetin.exr new file mode 100644 index 0000000000000000000000000000000000000000..1199caa4de31b2761ace03ffc97b67268688712e GIT binary patch literal 408 zcmXTZH)LdDU|>j2EO1FINo6Q5Day=CXAlMo85tNETNzkb8JQ^<8d@0}S{WE8XC&t3 zrREefBxmGg7MC!X1C=>3Fak*s0MQ`qjv*3+A;OTHpIcCrT3no&pNGN*8Ni&9Sdti? znU|7Z&XAN}VU)=r02GA*kaIyeC9}97C$W;Cx}40sRR5xs)FK813+&{A%!t`#0i=j2EO1FINo6Q5Day=CXAlMo85tNETNzkb8JQ^<8d@0}S{WE8XC&t3 zrREefBxmGg7MC!X1C=>3Fak*s0MQ`qjv*3+A;OTHpIcCrT3no&pNGN*8Ni&9Sdti? znU|7Z&XAN}VU)=r02GA*kaIyeC9}97C$W;Cx}40sRR5xs)FK813+&{A%!t`#0i=j2EO1FINo6Q5Day=CXAlMo85tNETNzkb8JQ^<8d@0}S{WE8XC&t3 zrREefBxmGg7MC!X1C=>3Fak*s0MQ`qjv*3+A;OTHpIcCrT3no&pNGN*8Ni&9Sdti? znU|7Z&XAN}VU)=r02GA*kaIyeC9}97C$W;Cx}40sRR5xs)FK813+&{A%!t`#0i=@Bw+ZCbo==|R>bpKpX*zZi1uVhB6K`}5K} E0iU2@+5i9m literal 0 HcmV?d00001 diff --git a/testsuite/python-imagebufalgo/ref/normalize_scale.exr b/testsuite/python-imagebufalgo/ref/normalize_scale.exr new file mode 100644 index 0000000000000000000000000000000000000000..559b535fa6e0fd99d8897d6e9450941cbf836452 GIT binary patch literal 405 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�Xxcl#eg2^9fXF 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 IPszCd0$!Xl00000 diff --git a/testsuite/python-imagebufalgo/ref/normoffset.exr b/testsuite/python-imagebufalgo/ref/normoffset.exr new file mode 100644 index 0000000000000000000000000000000000000000..dc62c97ab29cbde16dff950a0f8c58c35e363d13 GIT binary patch literal 412 zcmXTZH)LdDU|>j2EO1FINo6Q5Day=CXAlMo85tNETNzkb8JQ^<8d@0}S{WE8XC&t3 zrREefBxmGg7MC!X1C=>3Fak*s0MQ`qjv*3+A;OTHpIcCrT3no&pNGN*8Ni&9Sdti? znU|7Z&XAN}VU)=r02GA*kaIyeC9}97C$W;Cx}40sRR5xs)FK813+&{A%!t`#0i=