+--------------------------------------------------------------------+
| LibTeoUtil$B%^%K%e%"%k(B   SourceForge$B8x3+HG(B   Ver 1.01     2004/10/22 |
|                                                         Y.Mukaigaw |
+--------------------------------------------------------------------+

######################################################################
  $B$O$8$a$K(B

LibTeoUtil($B$j$V$F$*$f!<$F$#$k(B)$B$O!$(BTEO$B$N4p44%i%$%V%i%j(BLibTeo$B$rJd40$9$k(B
$BL\E*$G:n$i$l$?%f!<%F%#%j%F%#=8$G$9!%$A$g$C$H$7$?JXMx$J5!G=$d!$$J$/$F$b(B
$B:$$i$J$$$1$I$"$C$F$b32$K$J$i$J$$$h$&$J5!G=$N4s$;=8$a$G$9!%(B

$B4p44%i%$%V%i%j$N(BLibTeo$B$O!$(B($B$$$$0UL#$G(B)$B8O$i$7$F$7$^$C$F!$?75!G=$ODI2C$7(B
$B$J$$$3$H$K$J$C$F$$$^$9!%$=$NBe$o$j$K!$?7$7$$5!G=$O$I$s$I$s(BLibTeoUtil$B$K(B
$B2C$($F$$$-$^$9!%JXMx$J4X?t$r:n$C$?;~$O!$CQ$:$+$7$,$i$:$K$<$R8~@n$K$*CN(B
$B$i$;2<$5$$!%%f!<%F%#%j%F%#$N$R$H$D$H$7$F!$IU$12C$($5$;$FD:$-$^$9!%(B
LibTeoUtil$B$r!$3'$5$s$N<j$GBg$-$/0i$F$F$$$C$F2<$5$$!%(B

######################################################################
  $BL\<!(B

  (1) libteo$B%i%C%Q!<(B
  (2) $B?'JQ49(B
  (3) $B2hA|%3%T!<(B
  (4) $B2hA|=hM}(B
  (5) $B?tCM7W;;(B
  (6) $BIA2h(B

----------------------------------------------------------------------
(1) libteo$B%i%C%Q!<(B

==========
TEO_FLOAT64 TeoUtilGetAnyPixel(TEOIMAGE *image, int x, int y, int p);

TEO$B2hA|$N2hAGCM$N7?$r5$$K$9$k$3$H$J$/;H$($k(B TeoGetPixel()$B$G$9!%(B
$B2hAGCM$O(B TEO_FLOAT64$B$K%-%c%9%H$5$l$FJV$5$l$^$9!%(B

$B%9%T!<%I$OCY$$$G$9$,!$A4$F$N7?$K6&DL$7$F;H$($kHFMQ%D!<%k$N:n@.$K8~$$$F(B
$B$$$^$9!%Nc$O!$2<5-$N(B TeoUtilPutAnyPixel()$B$r;2>H$7$F2<$5$$!%(B

==========
TEO_FLOAT64 TeoUtilPutAnyPixel(TEOIMAGE *image, int x, int y, int p, 
			       TEO_FLOAT64 val);

TEO$B2hA|$N2hAGCM$N7?$r5$$K$9$k$3$H$J$/;H$($k(B TeoPutPixel()$B$G$9!%(B

$B$?$@$7!$FbIt$G%-%c%9%H$7$F$$$^$9$N$G!$K\Mh3JG<$G$-$J$$2hAGCM$r(BPut$B$7$h(B
$B$&$H$7$?;~$O!$%(%i!<$K$J$i$:$K3JG<$5$l$kCM$,$*$+$7$/$J$k$@$1$G$9$N$G(B
$BCm0U$7$F2<$5$$!%<B:]$K(B Put$B$5$l$?CM$,(B TEO_FLOAT64$B$K%-%c%9%H$5$l$FJV$5$l(B
$B$^$9$,!$DL>o$OL5;k$7$F$$$$$G$7$g$&!%(B

$B%9%T!<%I$OCY$$$G$9$,!$A4$F$N7?$K6&DL$7$F;H$($kHFMQ%D!<%k$N:n@.$K8~$$$F(B
$B$$$^$9!%Nc$($P!$(B

for (y=TeoYstart(file); y<=TeoYend(file); y++)
    for (x=TeoXstart(file); x<=TeoXend(file); x++)
        TeoUtilPutAnyPixel(in,x,y,0,TeoUtilGetAnyPixel(out,x,y,0);

$B$H$9$k$@$1$G!$A4$F$N2hAGCM$KBP1~$7$?2hA|%3%T!<$,$G$-$^$9!%(B

==========
TEO_FLOAT64 TeoUtilLinearPixel(TEOIMAGE *img, float x, float y, int plane);

$B2hAGCM$N@~7AFbA^CM$rJV$7$^$9!%(B

$B:BI8(B(x,y)$B$r(Bfloat$B$GM?$($k$H!$2hAGCM$r(B2$B<!85$N@~7AFbA^$K$h$k%5%V%5%s%W%j(B
$B%s%0$K$h$j7W;;$7!$(BTEO_FLOAT64$B7?$H$7$FJV$7$^$9!%2hA|(Bimg$B$N7?$OG$0U$G$9$,!$(B
$BF0:n$OCY$$$G$9!%(B

==========
float TeoUtilLinearPixel_UINT8(TEOIMAGE *img, float x, float y, int plane);

$B2hAGCM$N@~7AFbA^CM$rJV$7$^$9!%(B

$B>e5-(B TeoUtilLinearPixel$B$N(B UINT8$B7?8BDjHG$G$9!%(Bimg$B$O(BUINT8$B7?$G$J$1$l$P$J(B
$B$j$^$;$s!%FbA^CM$O(B float$B$GJV$5$l$^$9!%(B

==========
TEOIMAGE *TeoUtilMallocReadFromImage(char *filename);

$B;XDj$5$l$?(BTEO$B%U%!%$%k$+$i#1%U%l!<%`$N2hA|$rFI$_9~$_$^$9!%(B

$B%U%!%$%kL>$r;XDj$9$k$H!$(B
  1.TeoOpenFile$B$G%*!<%W%s$9$k(B
  2.TeoAllocSimilarImage$B$G(BTEOIMAGE$B$N$?$a$KI,MW$J%a%b%j$r3NJ](B
  3.TeoReadFrame$B$G2hA|$rFI$_9~$`(B
  4.TeoCloseFile$B$G%U%!%$%k$rJD$8$k(B
$B$N0lO"$NF0:n$r$^$H$a$F9T$$$^$9!%(B

==========
void TeoUtilCreateFileFromImage(char *filename, TEOIMAGE *img);

$B;XDj$7$?(BTEO$B2hA|$r%U%!%$%k$K=q$-=P$7$^$9!%(B

$B%U%!%$%kL>$H(BTEOIMAGE$B$r;XDj$9$k$H(B
  1.TeoCreateFile$B$G(B TEOIMAGE$B$r3JG<$9$k$N$KI,MW$J(B TEOFILE$B$r:n@.(B
  2.TeoWriteFrame$B$G2hA|$r=q$-$@$7(B
  3.TeoCloseFile$B$G%U%!%$%k$rJD$8$k(B

$B$N0lO"$NF0:n$r$^$H$a$F9T$$$^$9!%(B

$B:n@.$5$l$k(B TEO$B2hA|%U%!%$%k$O#1%U%l!<%`$G$9!%(B

==========
void TeoUtilCheckImage(TEOIMAGE *img, int width, int height,
		      int xoffset, int yoffset, int type, int bit, int plane);

TEO$B2hA|(B img$B$N%5%$%:$d7?$r%A%'%C%/$7!$0[$J$C$F$$$l$P%(%i!<%a%C%;!<%8$r(B
$B=P$7$?8e!$6/@)=*N;$5$;$^$9!%%A%'%C%/$,ITMW$J9`L\$O(B -1 $B$rM?$($^$9!%(B

$BNc$($P!$$"$k%W%m%0%i%`$,(B UINT8$B7?$7$+BP1~$7$F$$$J$$>l9g$O!$(B
   TeoUtilCheckImage(img, -1,-1,-1,-1,TEO_UNSIGNED,8,-1);
$B$G4JC1$K%A%'%C%/$G$-$^$9!%(B

==========
void TeoUtilCheckFile(TEOFILE *file, int width, int height,
		      int xoffset, int yoffset, int type,
		      int bit, int plane, int frame);

TEO$B%U%!%$%k(B file$B$N%5%$%:$d7?$r%A%'%C%/$7!$0[$J$C$F$$$l$P%(%i!<%a%C%;!<(B
$B%8$r=P$7$?8e!$6/@)=*N;$5$;$^$9!%%A%'%C%/$,ITMW$J9`L\$O(B -1 $B$rM?$($^$9!%(B

$BNc$($P!$$"$k%W%m%0%i%`$,(B 320x240$B$N(BUINT8$B7?$G(B3$B%W%l!<%s(B,10$B%U%l!<%`$K$7$+(B
$BBP1~$7$F$$$J$$>l9g$O(B
  TeoUtilCheckFile(file,320,240,-1,-1,TEO_UNSIGNED,8,3,10);
$B$G4JC1$K%A%'%C%/$G$-$^$9!%(B

==========
int TeoUtilIsInner(TEOIMAGE img,  int x, int y);
int TeoUtilIsInner(TEOFILE  file, int x, int y);

(x,y)$B$,2hA|$NHO0OFb$KF~$C$F$$$l$P??(B(1)$B$r!$$=$&$G$J$1$l$P56(B(0)$B$rJV$7$^$9!%(B
$B%^%/%m$G=q$+$l$F$$$^$9$N$G!$(BTEOIMAGE, TEOFILE$B$K6&DL$G;H$($^$9!%(B

----------------------------------------------------------------------
(2) $B?'JQ49(B

==========
TEOIMAGE *TeoUtilGray2Binary(TEOIMAGE *img);

$B%0%l%$2hA|$r%G%#%62=$7!$#2CM2hA|$KJQ49$7$^$9!%(B

Unsigned 8bit 1plane $B$N%0%l%$2hA|$r0z?t$H$7$FEO$9$H!$8m:9J?6Q%G%#%62=(B
$B$7$F!$(B1bit 1plane$B$N#2CM2hA|$KJQ49$7$^$9!%JQ498e$N2hA|$KBP1~$9$k%a%b%j(B
$B$O<+F0E*$K3NJ]$5$l!$$=$N%]%$%s%?$,JV$5$l$^$9!%$J$*!$JQ49B.EY:GM%@h$N%P!<(B
$B%8%g%s$N$?$a!$2h<A$O$-$l$$$G$O$"$j$^$;$s!%(B

==========
TEOIMAGE *TeoUtilRGB2Gray(TEOIMAGE *img);

RGB$B%+%i!<2hA|$r%0%l%$2hA|$KJQ49$7$^$9!%(B

Unsigned 8bit 3plane $B$N%+%i!<2hA|$r0z?t$H$7$FEO$9$H!$(BUnsigned 8bit
1plane $B$N%0%l%$2hA|$KJQ49$7$^$9!%F~NO%W%l!<%s$O(B RGB$B$N=g$H$7!$(B
$B51EY(B  = 0.299*R + 0.587*G + 0.114*B
$B$H$$$&7W;;$K$h$j!$51EY$KJQ49$7$F$$$^$9!%JQ498e$N2hA|$KBP1~$9$k%a%b%j$O(B
$B<+F0E*$K3NJ]$5$l!$$=$N%]%$%s%?$,JV$5$l$^$9!%(B

==========
TEOIMAGE *TeoUtilBinary2Gray(TEOIMAGE *img);

$B#2CM2hA|$r%0%l%$2hA|$KJQ49$7$^$9!%(B

1bit 1plane$B$N#2CM2hA|$r0z?t$H$7$FEO$9$H!$(BUnsigned 8bit 1plane $B$N%0%l%$(B
$B2hA|$KJQ49$7$^$9!%(B
  0 ->   0
  1 -> 255
$B$H$$$&JQ49$r$7$F$$$^$9!%JQ498e$N2hA|$KBP1~$9$k%a%b%j$O<+F0E*$K3NJ]$5$l!$(B
$B$=$N%]%$%s%?$,JV$5$l$^$9!%(B

==========
TEOIMAGE *TeoUtilGray2RGB(TEOIMAGE *img);

$B%0%l%$2hA|$r%+%i!<2hA|$KJQ49$7$^$9!%(B

Unsigned 8bit 1plane $B$N%0%l%$2hA|$r0z?t$H$7$FEO$9$H!$(BUnsigned 8bit
3plane $B$N%+%i!<2hA|$KJQ49$7$^$9!%(B
  R = G = B = $B51EY(B 
$B$H$$$&JQ49$r$7$F$$$^$9!%JQ498e$N2hA|$KBP1~$9$k%a%b%j$O<+F0E*$K3NJ]$5$l!$(B
$B$=$N%]%$%s%?$,JV$5$l$^$9!%(B

==========
TEOIMAGE *TeoUtilRGB2HSV(TEOIMAGE *img);

RGB$B2hA|$r(B HSV$B2hA|$KJQ49$7$^$9!%(B

$B0z?t$GM?$($k(BRGB$B2hA|$O!$(BUINT8$B7?!$#3%W%l!<%s$G$J$1$l$P$J$j$^$;$s!%(B
$BFbIt$G(B FLOAT64$B7?!$#3%W%l!<%s$N(BTEOIMAGE$B$N%a%b%j$r3NJ]$7$F!$3F%W%l!<%s$K(B
H,S,V$B$N=gHV$G3JG<$7$FJV$7$^$9!%(B

V = 0.299*R+0.587*G+0.114*B
C1 = R-V, C2 = B-V
H = arctan(C1/C2)
S = sqrt(C1*C1+C2*C2)
$B$H$$$&7W;;$r$7$F$$$^$9!%(B

==========
TEOIMAGE *TeoUtilRGB2YCrCb(TEOIMAGE *img);

RGB$B2hA|$r(B YCrCb$B2hA|$KJQ49$7$^$9!%(B

$B0z?t$GM?$($k(BRGB$B2hA|$O!$(BUINT8$B7?!$#3%W%l!<%s$G$J$1$l$P$J$j$^$;$s!%(B
$BFbIt$G(B FLOAT64$B7?!$#3%W%l!<%s$N(BTEOIMAGE$B$N%a%b%j$r3NJ]$7$F!$3F%W%l!<%s$K(B
Y,Cr,Cb$B$N=gHV$G3JG<$7$FJV$7$^$9!%(B

Y = 0.299*R+0.587*G+0.114*B
Cr= R-Y
Cb= B-Y
$B$H$$$&7W;;$r$7$F$$$^$9!%(B

----------------------------------------------------------------------
(3) $B2hA|%3%T!<(B

==========
int TeoUtilCopyArea(TEOIMAGE *src, TEOIMAGE *dst,
		    int src_x, int src_y, int width, int height,
		    int dst_x, int dst_y);

$B2hA|(B src $B$N(B (src_x, src_y) $B$+$i$O$8$^$k(B width x height $B$NC;7ANN0h(B
$B$r(B, $B2hA|(B dst $B$N(B (dst_x,dst_y) $B$+$i$NNN0h$K9bB.$K%3%T!<$7$^$9(B.

src                                     dst                         
+------------------------------+	+--------------------------+
|                              |	|               width      |
|                width         |	|(dst_x,dst_y)+---------+  |
| (src_x,src_y)+---------+     |	|             |         |  |
|              |         |     | =====> |      height |         |  |
|       height |         |     |	|             |         |  |
|              |         |     |	|             |         |  |
|              |         |     |	|             +---------+  |
|              +---------+     |	+--------------------------+
|                              |
+------------------------------+

$B@5>o$K%3%T!<$5$l$?$H$-$O(B 1 $B$rJV$7$^$9(B.

$B0J2<$N>l9g$O%3%T!<$r9T$o$:(B 0 $B$rJV$7$^$9(B.

1) src $B$H(B dst $B$N2hAG$N7?(B(type, bit)$B$,0[$J$k>l9g(B
2) $B2hA|$N%W%l!<%s?t$,0[$J$k>l9g(B
3) $B%3%T!<85$NNN0h$d%3%T!<@h$NNN0h$,2hA|$r$O$_=P$k>l9g(B

$BJdB-(B:
  1bit $B2hA|$N%3%T!<$ODcB.$G$9(B.

  1bit $B0J30$N2hA|$N>l9g$O(B memcpy $B$r;H$C$F9bB.$K%3%T!<$7$^$9(B. $B$?$@$7(B, 
  $B%3%T!<$9$kNN0h$NI}(B(width) $B$,6KC<$K>.$5$$>l9g$OB?>/CY$/$J$j$^$9(B.

  $B%3%T!<85$H%3%T!<@h$N2hA|$,F1$82hA|$G(B, $B%3%T!<$9$kNN0h$,=E$J$C$F$$$k>l(B
  $B9g$NF0:n$OITDj$G$9(B.

==========
int TeoUtilCopyImageWithCast(TEOIMAGE *src,TEOIMAGE *dst);

src $B$+$i(B dst $B$X2hAG$N7?$r%-%c%9%H$7$J$,$i2hA|$r%3%T!<$7$^$9(B.
$B$D$^$j2hAGCM$N7?$,0[$J$k>l9g$G$b5$$K$;$:%3%T!<$G$-$^$9!%(B

$B2hAG$N7?$O(B type $B$H(B bit $B$r8+$FH=CG$7$^$9(B.
src $B$H(B dst $B$N2hAG$N7?$,F1$8>l9g$O(B, memcpy $B$rMQ$$$F9bB.$K%3%T!<$7$^$9(B.

$B@5>o$K%3%T!<$5$l$?>l9g$O(B, $B4X?t$O(B 1 $B$rJV$7$^$9(B.
src $B$H(B dst $B$G(B width, height, xoffset, yoffset, plane $B$N2?$l$+$NCM$,0[(B
$B$k>l9g(B, $B$b$7$/$OB8:_$7$J$$2hAG$N7?$N>l9g$O4X?t$O(B 0 $B$rJV$7$^$9(B.

----------------------------------------------------------------------
(4) $B2hA|=hM}(B

==========
void TeoUtilTextureMapping_UINT8(TEOIMAGE *in,TEOIMAGE *out,
                     int ix1, int iy1, int ix2, int iy2, int ix3, int iy3,
                     int ox1, int oy1, int ox2, int oy2, int ox3, int oy3);

TEO$B2hA|$G#33Q7A%Q%C%A$N%F%/%9%A%c%^%C%T%s%0$r9T$&4X?t$G$9!%2hA|$N7?$O!$(B
$BF~NO!?=PNO$H$b$K(B UINT8$B$N$_$G$9!%(B

$B%F%/%9%A%c$H$J$k2hA|(B in $B$G!"(Bix1,iy1,ix2,iy2,ix3,iy3 $B$G<($5$l(B
$B$k#33Q7ANN0h$N%F%/%9%A%c$r!"2hA|(B out $B>e$N:BI8(B 
ox1,oy1,ox2,oy2,ox3,oy3 $B$G<($5$l$k#33Q7ANN0h$K%^%C%T%s%0$7$^$9!#(B

     (ix1,iy1)          (ox1,oy1)
       $B!?!@(B                $B!?!@(B
     $B!?(B    $B!@(B     -->    $B!?(B    $B!@(B
     ^^^^^^^^            ^^^^^^^^
(ix2,iy2)(ix2,iy2)  (ix2,iy2)(ix2,iy2)

$B%^%k%A%W%l!<%sBP1~$G$9$N$G!$%0%l%$2hA|$J$i$P#1%W%l!<%s$G!$%+%i!<2hA|$J(B
$B$i$P#3%W%l!<%s$G<+F0E*$K%^%C%T%s%0$7$F$/$l$^$9!%2hAGCM$O!$(B
TeoUtilLinearPixel_UINT8()$B$r;H$C$F!$@~7AFbA^$7$F$$$^$9!%$^$?!$F~NO!?=P(B
$BNO2hA|$NHO0O30$r%"%/%;%9$9$k$3$H$N$J$$$h$&$K!$:BI8CM$r$$$A$$$A%A%'%C%/(B
$B$7$F$$$^$9$N$G!$0BA4$G$9$,DcB.$G$9!%(B

$B$J$*!$@8@.B&$N#33Q7A$,>.$5$$>l9g$K$O!$K\Mh$OI8K\2=DjM}$K$7$?$,$C$F9b<~(B
$BGH@.J,$r%+%C%H$7$J$1$l$P$J$j$^$;$s$,!$$=$&$$$&=hM}$O$7$F$$$^$;$s!%(B

==========
void TeoUtilTextureMappingWithAlpha_UINT8(
	TEOIMAGE *in,TEOIMAGE *out,float alpha,
	int ix1, int iy1, int ix2, int iy2, int ix3, int iy3,
	int ox1, int oy1, int ox2, int oy2, int ox3, int oy3);

$B4pK\E*$JF0:n$O(B TeoUtilTextureMapping_UINT8() $B$HF1$8$G$9!%0c$$$O!$%^%C(B
$B%T%s%0$9$k%F%/%9%A%c$N(B Alpha$BCM$r;XDj$G$-$k$3$H$G$9!%(B

$B$?$@$7!$2hA|(B in$BCf$N2hAGCM$r(B Alpha$BG\$7$?CM$r2hA|(B out$B$K=q$-9~$_$^$9$N$G!$(B
$B$b$H$+$i(B out$B$K$"$C$?CM$O>e=q$-$5$l$^$9!%$=$&$$$&0UL#$G$OK\Mh$N!VF)L@!W(B
$B$G$O$"$j$^$;$s$N$GCm0U$7$F2<$5$$!%$D$^$j!$(BAlpha$BCM$r(B 1.0$B$K$9$l$P!$(B
TeoUtilTextureMapping_UINT8()$B$HA4$/F1$8$K$J$j$^$9!%(B

Alpha$BCM$O(B float$B$G!$$I$N$h$&$JCM$r;XDj$7$F$b9=$$$^$;$s$,!$@8@.$9$k2hA|(B
$B>e$G2hAGCM$,(B255$B$rD6$($?>l9g$O(B 255$B$K!$Ii$K$J$C$?>l9g$O(B 0$B$KJQ49$5$l$^$9!%(B


----------------------------------------------------------------------
(5) $B?tCM7W;;(B

==========
double TeoUtilInnerProduct(TEOIMAGE *img1,TEOIMAGE *img2);
double TeoUtilInnerProduct_FLOAT64(TEOIMAGE *img1,TEOIMAGE *img2);

$B2hA|$NFb@Q$r7W;;$7$^$9!%(B

$B#2$D$N2hA|(B img1,img2$B$N(B $B$9$Y$F$N%W%l!<%s$r%i%9%?!<%9%-%c%s$7$F%Y%/%H%k(B
$B$H8+$J$7$FFb@Q$r7W;;$7$^$9!%%Y%/%H%k$N<!85$O!J2#%5%$%:!_=D%5%$%:!_%W%l!<(B
$B%s?t!K$H$J$j$^$9!%(Bimg1,img2$B$N%*%U%;%C%H$O0c$C$F$$$F$b9=$$$^$;$s$,!$%5(B
$B%$%:$OF1$8$G$J$1$l$P$J$j$^$;$s!%(B

TeoUtilInnerProduct$B$O!$2hA|$N7?$O2?$G$b9=$$$^$;$s!J(Bimg1$B$H(Bimg2$B$N7?$,0c$C(B
$B$F$$$F$b9=$$$^$;$s!K$,DcB.$G$9!%(B

TeoUtilInnerProduct_FLOAT64$B$O!$(Bimg1,img2$B$H$b$K(BFLOAT64$B7?$G$J$1$l$P$J$j(B
$B$^$;$s$,9bB.$G$9!%(B

==========
double TeoUtilCalcSum(TEOIMAGE *img, int plane);

$B;XDj$5$l$?%W%l!<%s$N$9$Y$F$N2hAGCM$NAmOB$r(B double$B7?$GJV$7$^$9!%(B
$B$9$Y$F$N7?$KBP1~$7$F$$$^$9!%(B

==========
double TeoUtilCalcVariance(TEOIMAGE *img, int plane);

$B;XDj$5$l$?%W%l!<%s$N$9$Y$F$N2hAGCM$NJ,;6$r(B double$B7?$GJV$7$^$9!%(B
$BJ,;6$r5a$a$k:]$NJ,Jl$O2hAG?t(B(n-1$B$G$O$J$/(Bn)$B$G$9!%$9$Y$F$N7?$KBP1~$7$F$$$^$9!%(B

==========
double TeoUtilCalcMax(TEOIMAGE *img, int plane);
double TeoUtilCalcMin(TEOIMAGE *img, int plane);

$B;XDj$5$l$?%W%l!<%s$N$9$Y$F$N2hAGCM$N$&$A!$:GBgCM!?:G>.CM$r(B double$B7?$G(B
$BJV$7$^$9!%$9$Y$F$N7?$KBP1~$7$F$$$^$9!%(B

==========
double TeoUtilCalcL2Norm(TEOIMAGE *img, int plane);

$B;XDj$5$l$?%W%l!<%s$N$9$Y$F$N2hAGCM$N(BL2$B%N%k%`$r(B double$B7?$GJV$7$^$9!%(B
$B$9$Y$F$N7?$KBP1~$7$F$$$^$9!%(B

==========
TEOIMAGE *TeoUtilNormalize(TEOIMAGE *src, int flag);
void TeoUtilNormalizeWithoutAlloc(TEOIMAGE *src, TEOIMAGE *dst,int flag);

$B2hA|$N@55,2=$r$7$^$9!%(B

flag==0 $B$N>l9g!$J?6Q$r#0$K$7$^$9!%(B
flag==1 $B$N>l9g!$J?6Q$r#0$K$7!$D9$5(B(L2$B%N%k%`(B)$B$r#1$K$7$^$9!%(B
flag==2 $B$N>l9g!$J?6Q$r#0$K$7!$J,;6$r#1$K$7$^$9!%(B

$BF~NO2hA|(B(src)$B$O$9$Y$F$N7?$KBP1~$7$F$$$^$9$,!$@55,2=2hA|$O>o$K(B
TEO_FLOAT64$B7?$K$J$j$^$9!%$9$Y$F$N%W%l!<%s$KBP$7$F!$FHN)$KF1$8=hM}$r$7(B
$B$^$9!%(B

TeoUtilNormalize$B$G$O!$@55,2=2hA|$N$?$a$N%a%b%j$O<+F0E*$K3NJ]$5$l$^$9!%(B

TeoUtilNormalizeWithoutAlloc$B$G$O!$@55,2=2hA|(B(dst)$B$N%a%b%j$O3NJ]$5$l$^(B
$B$;$s$N$G!$@h$KF1%5%$%:$G(BTEO_FLOAT64$B7?$N%a%b%j$r3NJ]$7$F$*$/I,MW$,$"$j(B
$B$^$9!%(Bsrc$B$H(Bdst$B$KF1$82hA|$r;XDj$7$?>l9g$K$O!$@55,2=$7$?CM$G>e=q$-$5$l$^(B
$B$9!%(B

----------------------------------------------------------------------
(6) $BIA2h(B

TEO$B2hA|$X$N?^7AIA2h4X?t$G$9!%IbF0>.?tE@$rA4$/MQ$$$J$$9bB.%"%k%4%j%:%`(B
$B$G<BAu$5$l$F$$$^$9!%8=;~E@$G$O(B UINT8$B7?$K8BDj$5$l$F$$$^$9$,!$%W%l!<%s?t(B
$B$OG$0U$G$9!J%0%l%$!?%+%i!<BP1~!K!%(B

$BIA2h?'$O(B UINT8$B7?$N%]%$%s%?$G;XDj$7$^$9!%(B
$BNc$($P(B (10,20)$B$N0LCV$K@V$$E@$rIA2h$9$k>l9g$O0J2<$N$h$&$K$7$^$9!%(B
  TEO_UINT8 c[3];
  c[0]=255; c[1]=0; c[2]=0;  /* Red=(255,0,0) */
  TeoUtilDrawPoint_UINT8(img,10,20,c);

$B%0%l%$(B(1$B%W%l!<%s!K$N2hA|$KGr$$E@$rIA2h$9$k>l9g$O0J2<$N$h$&$K$7$^$9!%(B
  TEO_UINT8 c;
  c = 255;
  TeoUtilDrawPoint_UINT8(img,10,20,&c);

$B4X?tL>$K(B`Clipping'$B$NJ8;z$,$D$/$b$N$H$D$+$J$$$b$N$N(B2$B<oN`$,MQ0U$5$l$F$$(B
$B$^$9!%(BClipping$B$J$7$N$[$&$O9bB.$G$9$,!$2hA|$NHO0O30$r;XDj$7$F$O$$$1$^$;(B
$B$s!%(B`Clipping'$B$"$j$N$[$&$O!$2hA|$NHO0O$r%A%'%C%/$7!$HO0OFb$N$_IA2h$9$k(B
$B$h$&$K%/%j%C%T%s%0$7$^$9$N$G!$0B?4$G$9$,DcB.$G$9!%MQES$K1~$8$F;H$$J,$1(B
$B$F2<$5$$!%(B

==========
void TeoUtilDrawPoint_UINT8(
     TEOIMAGE *img, int x, int y, TEO_UINT8 *color)

void TeoUtilDrawPointClipping_UINT8(
     TEOIMAGE *img, int x, int y, TEO_UINT8 *color)

(x,y)$B$N0LCV$K$KE@$rIA2h$7$^$9!%(B

==========
void TeoUtilDrawLine_UINT8(
     TEOIMAGE *img, int x1, int y1,int x2, int y2, TEO_UINT8 *color)

void TeoUtilDrawLineClipping_UINT8(
     TEOIMAGE *img, int x1, int y1,int x2, int y2, TEO_UINT8 *color)

(x1,y1)-(x2,y2)$B$N@~J,$rIA2h$7$^$9!%(B

==========
void TeoUtilDrawRectangle_UINT8(
     TEOIMAGE *img, int x, int y, int width, int height,TEO_UINT8 *color);

void TeoUtilDrawRectangleClipping_UINT8(
     TEOIMAGE *img, int x, int y, int width, int height,TEO_UINT8 *color);

(x,y)$B$r:8>e$H$7!$I}$,(Bwidth$B$G9b$5$,(Bheight$B$N6k7A$rIA2h$7$^$9!%(B
width,height$B$O@5$NCM$G$J$1$l$P$J$j$^$;$s!%(B

==========
void TeoUtilDrawFillRectangle_UINT8(
     TEOIMAGE *img, int x, int y, int width, int height,TEO_UINT8 *color);

void TeoUtilDrawFillRectangleClipping_UINT8(
     TEOIMAGE *img, int x, int y, int width, int height,TEO_UINT8 *color);

$BCf$,EI$j$D$V$5$l$?6k7A$rIA2h$7$^$9!%(B
TeoUtilDrawRectangle_UINT8 $B!\(B $BEI$j$D$V$7(B $B$H9M$($F2<$5$$!%(B

==========
void TeoUtilDrawCircle_UINT8(
     TEOIMAGE *img, int x, int y, int r, TEO_UINT8 *color)

void TeoUtilDrawCircleClipping_UINT8(
     TEOIMAGE *img, int x, int y, int r, TEO_UINT8 *color)

(x,y)$B$rCf?4$H$7H>7B$,(Br$B$N1_$rIA2h$7$^$9!%(B

==========
void TeoUtilDrawFillCircle_UINT8(
     TEOIMAGE *img, int x, int y, int r, TEO_UINT8 *color)

void TeoUtilDrawFillCircleClipping_UINT8(
     TEOIMAGE *img, int x, int y, int r, TEO_UINT8 *color)

$BCf$,EI$j$D$V$5$l$?1_$rIA2h$7$^$9!%(B
TeoUtilDrawCircle_UINT8 $B!\(B $BEI$j$D$V$7(B $B$H9M$($F2<$5$$!%(B

==========
void TeoUtilDrawPointWithAlpha_UINT8 (
	TEOIMAGE *img, int x, int y, unsigned char alpha, TEO_UINT8 *color);

void TeoUtilDrawPointWithAlphaClipping_UINT8 (
	TEOIMAGE *img, int x, int y, unsigned char alpha, TEO_UINT8 *color);

$B;XDj$7$??'$HCO$N?'$H$N&A%V%l%s%G%#%s%0$r9T$C$?E@$rIA2h$7$^$9!%(B
$B;XDj$7$??'$N&ACM(Balpha$B$r(B0$B$+$i(B255$B$NHO0O$G;XDj$7$^$9!%(B0$B$GCO$N?'!$(B255$B$G;XDj$7$??'(B
$B$GIA2h$5$l$^$9!%(B

==========
void TeoUtilDrawLines_UINT8 (
	TEOIMAGE *img, int *data, int pnum, TEO_UINT8 *color);

void TeoUtilDrawLinesClipping_UINT8 (
	TEOIMAGE *img, int *data, int pnum, TEO_UINT8 *color);

$BG[Ns(Bdata$B$G;XDj$5$l$kE@$r7k$s$@@~J,$rIA2h$7$^$9!%(B

int data[6] = {10, 10, 10, 20, 20, 10};
int pnum = 3;
TeoUtilDrawLines_UINT8 (img, data, pnum, color);

$B$H$9$k$H!$(B(10, 10)-(10, 20)-(20, 10)$B$N=g$G7k$P$l$?@~J,$,IA2h$5$l$^$9!%(B

==========
void TeoUtilDrawSegments_UINT8 (
	TEOIMAGE *img, int *data, int pnum, TEO_UINT8 *color);

void TeoUtilDrawSegmentsClipping_UINT8 (
	TEOIMAGE *img, int *data, int pnum, TEO_UINT8 *color);

$BG[Ns(Bdata$B$G;XDj$5$l$kJ#?t$N@~J,$rIA2h$7$^$9!%(B

int data[6] = {10, 10, 10, 20, 20, 10, 30, 30};
int pnum = 2;
TeoUtilDrawSegments_UINT8 (img, data, pnum, color);

$B$H$9$k$H!$@~J,(B(10, 10)-(10, 20)$B$H@~J,(B(20, 10)-(30, 30)$B$,IA2h$5$l$^$9!%(B

==========
void TeoUtilDrawFillRectangleWithAlpha_UINT8 (
	TEOIMAGE *img, int x, int y, int width, int height,
	unsigned char alpha, TEO_UINT8 *color);

void TeoUtilDrawFillRectangleWithAlphaClipping_UINT8 (
	TEOIMAGE *img, int x, int y, int width, int height,
	unsigned char alpha, TEO_UINT8 *color);

$B4{B8$N(BTeoUtilDrawFillRectangle(Clipping)_UINT8$B$N&A%V%l%s%G%#%s%0HG(B

==========
void TeoUtilDrawFillCircleWithAlpha_UINT8 (
	TEOIMAGE *img, int x, int y, int r, unsigned char alpha,
	TEO_UINT8 *color);

void TeoUtilDrawFillCircleWithAlphaClipping_UINT8 (
	TEOIMAGE *img, int x, int y, int r, unsigned char alpha,
	TEO_UINT8 *color);

$B4{B8$N(BTeoUtilDrawFillCircle(Clipping)_UINT8$B$N&A%V%l%s%G%#%s%0HG(B

==========
void TeoUtilDrawArc_UINT8 (
	TEOIMAGE *img, int x0, int y0, int xl, int yl, double theta,
	TEO_UINT8 *color);

void TeoUtilDrawArcClipping_UINT8 (
	TEOIMAGE *img, int x0, int y0, int xl, int yl, double theta,
	TEO_UINT8 *color);

$BBJ1_$NIA2h4X?t!%(B
$BCf?4(B(x0, y0)$B!$(Bx$B<4J}8~$NH>7B(Bxl$B!$(By$B<4J}8~$NH>7B(Byl$B$NBJ1_$r2sE>3Q(Btheta($BC10L$OEY(B)
$B2sE>$7$?$b$N$rIA2h$7$^$9!%3QEY(Btheta$B$,@5$N;~!$;~7W$H5U2s$j(B($B0lHL$N2sE>J}8~(B)$B$K(B
$B2sE>$7$^$9!%(B

==========
void TeoUtilDrawFillArc_UINT8 (
	TEOIMAGE *img, int x0, int y0, int xl, int yl, double theta,
	TEO_UINT8 *color);

void TeoUtilDrawFillArcClipping_UINT8 (
	TEOIMAGE *img, int x0, int y0, int xl, int yl, double theta,
	TEO_UINT8 *color);

$BBJ1_$rIA2h$7!$$=$NFbIt$rEI$j$D$V$7$^$9!%(B

==========
void TeoUtilDrawFillArcWithAlpha_UINT8 (
	TEOIMAGE *img, int x0, int y0, int xl, int yl, double theta,
	TEO_UINT8 *color);

void TeoUtilDrawFillArcWithAlphaClipping_UINT8 (
	TEOIMAGE *img, int x0, int y0, int xl, int yl, double theta,
	TEO_UINT8 *color);

TeoUtilDrawFillArc(Clipping)_UINT8$B$N&A%V%l%s%G%#%s%0HG(B

----------------------------------------------------------------------

######################################################################
  $B$3$N%i%$%V%i%j$N;H$$J}(B

$B%X%C%@!<%U%!%$%k!'(B
 #include <teo.h>
 #include <teoutil.h>
$B$N=gHV$K=q$-$^$9!%(B

$B%3%s%Q%$%k%*%W%7%g%s!'(B
 -I[teoutil.h$B$NCV>l=j(B] -L[libteoutil.a$B$NCV>l=j(B] -lteoutil -lteo -lm
$B$H$7$F$/$@$5$$!%IaDL$K%$%s%9%H!<%k$7$F$$$l$P!$(B
 -I/usr/local/include -L/usr/local/lib -lteoutil -lteo -lm
$B$H$J$k$H;W$$$^$9!%(B

######################################################################
  $BCx:n8"$J$I(B

$B3F%3!<%I$O!$%3%"%a%s%P!<5Z$S$=$N8&5f<<$N3X@8$K$h$C$F=q$+$l$^$7$?!%8~@n(B
$B$O(BLibTeoUtil$B$NCx:n<T$N0l?M$+$D4IM}<T$G$9$,!$A4$F$N%3!<%I$NCx:n<T$G$O$"(B
$B$j$^$;$s!%$3$N%i%$%V%i%j$O!$(BLibTeo$B$HF1$8$/(B The FreeBSD$B%i%$%;%s%9$K=>$&(B
$B$b$N$H$7$^$9!%(B

$B;29M!'(B
http://www.jp.freebsd.org/www.FreeBSD.org/ja/copyright/freebsd-license.html

######################################################################
  $B%i%$%V%i%j$NEPO?(B

$B%i%$%V%i%j$KEPO?$9$k4X?tL>$O(B TeoUtil$B$r@\F,;l$K$D$1$^$9!%FbIt$G;H$&Hs8x(B
$B3+$N4X?t$O(B static$B$G@k8@$7$FL>A0$N>WFM$rHr$1$k$h$&$K$7$F$*$$$F2<$5$$!%(B
$B$^$?!$FCDj$N(BTEO $B2hA|$N7?$K$7$+BP1~$7$F$$$J$$>l9g$O!$$=$N7?$r(B _UINT8 $B$N(B
$B$h$&$K@\Hx8l$K$D$1$F$/$@$5$$!%(B

$B4pK\E*$K$O!$?7$?$K4X?t$rIU$12C$($F$$$/$H$$$&J}?K$K$7$^$9!%0B?4$7$F;H$((B
$B$k$?$a$K!$86B'$H$7$F4X?t$N;EMMJQ99$O9T$$$^$;$s!%(B

$BJXMx$J%D!<%k$,40@.$7$?$i!$(B
 (1)$B%=!<%9%U%!%$%k(B
 (2)teoutil.h$B$KIU$12C$($k$Y$-%W%m%H%?%$%W@k8@$J$I(B
 (3)$B4JC1$J%I%-%e%a%s%H(B
$B$rAw$C$F2<$5$$!%%=!<%9%U%!%$%k$O$G$-$k$@$10l$D$K$^$H$a$F2<$5$$!%(B

$BO"Mm@h!'(B
  $BC^GHBg3X(B $B5!G=9)3X7O(B $B@hC<3X:]NN0h8&5f%;%s%?!<(B  $B8~@n9/Gn(B
  E-mail: mukaigaw@image.esys.tsukuba.ac.jp

######################################################################
