Main Page | Data Structures | Directories | File List | Data Fields | Globals

Sadie_Contrast.c

Go to the documentation of this file.
00001 
00015 /* This file is part of tclSadie.
00016 
00017    tclSadie is free software; you can redistribute it and/or modify it
00018    under the terms of the GNU General Public License as published by
00019    the Free Software Foundation; either version 2 of the License, or
00020    (at your option) any later version.
00021 
00022    tclSadie is distributed in the hope that it will be useful, but
00023    WITHOUT ANY WARRANTY; without even the implied warranty of
00024    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00025    General Public License for more details.
00026 
00027    You should have received a copy of the GNU General Public License
00028    along with tclSadie; if not, write to the Free Software Foundation,
00029    Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.  */
00030 
00031 #if HAVE_CONFIG_H
00032 #include <config.h>
00033 #endif /* HAVE_CONFIG_H */
00034 #include <tcl.h>
00035 #include <tk.h>
00036 #include <sadie.h>
00037 #include "tclsadie.h"
00038 #if WITH_DMALLOC
00039 #include <dmalloc.h>
00040 #endif /* WITH_DMALLOC */
00041 
00046 extern uint32_t nlev; 
00047 extern PIXEL gain; 
00048 extern PIXEL bias; 
00049 extern PIXEL gmin; 
00050 extern PIXEL gmax; 
00051 extern PIXEL thresh; 
00052 extern PIXEL gbrk[2][4]; 
00053 extern PIXEL *table; 
00055 
00060 static const char atitle[] = DEFAULT_TCL_ARRAY_TITLE;
00061 static const char ixaddr[] = DEFAULT_IN_IMAGE_ADDR_INDEX;
00062 static const char ixname[] = DEFAULT_OUT_IMAGE_NAME_INDEX;
00083 int
00084 Sadie_Contrast_NormStretchCmd (ClientData client_data, Tcl_Interp *interp,
00085                                int objc, Tcl_Obj * const objv[])
00086 {
00087   IMAGE *inimg = NULL;
00088   IMAGE *outimg = NULL;
00089   uint32_t incr;
00090   double sigma;
00091   PIXEL mean;
00092 
00093   if (objc != 2)
00094     {
00095       Tcl_WrongNumArgs (interp, 1, objv, atitle);
00096       return TCL_ERROR;
00097     }
00098   if ((GetSadieImageFromObj2 (interp, objv[1], ixaddr, &inimg)
00099        != TCL_OK)
00100       || (GetSadieUintFromObj2 (interp, objv[1], "incr", &incr)
00101           != TCL_OK)
00102       || (GetSadieDoubleFromObj2 (interp, objv[1], "sigma", &sigma)
00103           != TCL_OK)
00104       || (GetSadiePixelFromObj2 (interp, objv[1], "mean", &mean)
00105           != TCL_OK))
00106     return TCL_ERROR;
00107   CONTNORM (inimg, mean, sigma, incr, &outimg);
00108   return SetSadieImageObj2 (interp, objv[1], ixname, outimg);
00109 }
00110 
00129 int
00130 Sadie_Contrast_HisteqStretchCmd (ClientData client_data, Tcl_Interp *interp,
00131                                  int objc, Tcl_Obj * const objv[])
00132 {
00133   IMAGE *inimg = NULL;
00134   IMAGE *outimg = NULL;
00135   uint32_t res, incr;
00136 
00137   if (objc != 2)
00138     {
00139       Tcl_WrongNumArgs (interp, 1, objv, atitle);
00140       return TCL_ERROR;
00141     }
00142   if ((GetSadieImageFromObj2 (interp, objv[1], ixaddr, &inimg)
00143        != TCL_OK)
00144       || (GetSadieUintFromObj2 (interp, objv[1], "res", &res)
00145           != TCL_OK)
00146       || (GetSadieUintFromObj2 (interp, objv[1], "incr", &incr)
00147           != TCL_OK))
00148     return TCL_ERROR;
00149   HISTEQ (inimg, res, incr, &outimg);
00150   return SetSadieImageObj2 (interp, objv[1], ixname, outimg);
00151 }
00152 
00172 int
00173 Sadie_Contrast_LinearStretchCmd (ClientData client_data, Tcl_Interp *interp,
00174                                  int objc, Tcl_Obj * const objv[])
00175 {
00176   IMAGE *inimg = NULL;
00177   IMAGE *outimg = NULL;
00178   double minorbias, maxorgain;
00179   int type;
00180 
00181   if (objc != 2)
00182     {
00183       Tcl_WrongNumArgs (interp, 1, objv, atitle);
00184       return TCL_ERROR;
00185     }
00186   if ((GetSadieImageFromObj2 (interp, objv[1], ixaddr, &inimg)
00187        != TCL_OK)
00188       || (GetSadieDoubleFromObj2 (interp, objv[1], "minorbias", &minorbias)
00189           != TCL_OK)
00190       || (GetSadieDoubleFromObj2 (interp, objv[1], "maxorgain", &maxorgain)
00191           != TCL_OK)
00192       || (GetSadieIntFromObj2 (interp, objv[1], "type", &type)
00193           != TCL_OK))
00194     return TCL_ERROR;
00195   if (type == 0)
00196     {
00197       gmin = (PIXEL) minorbias;
00198       gmax = (PIXEL) maxorgain;
00199       STRETCH (inimg, TFSCALE, &outimg);
00200     }
00201   else
00202     {
00203       bias = (PIXEL) minorbias;
00204       gain = (PIXEL) maxorgain;
00205       STRETCH (inimg, TFLINEAR, &outimg);
00206     }
00207   return SetSadieImageObj2 (interp, objv[1], ixname, outimg);
00208 }
00209 
00225 int
00226 Sadie_Contrast_LogStretchCmd (ClientData client_data, Tcl_Interp *interp,
00227                               int objc, Tcl_Obj * const objv[])
00228 {
00229   IMAGE *inimg = NULL;
00230   IMAGE *outimg = NULL;
00231 
00232   if (objc != 2)
00233     {
00234       Tcl_WrongNumArgs (interp, 1, objv, atitle);
00235       return TCL_ERROR;
00236     }
00237   if (GetSadieImageFromObj2 (interp, objv[1], ixaddr, &inimg)
00238       != TCL_OK)
00239     return TCL_ERROR;
00240   STRETCH (inimg, TFLOG, &outimg);
00241   return SetSadieImageObj2 (interp, objv[1], ixname, outimg);
00242 }
00243 
00269 int
00270 Sadie_Contrast_PWLStretchCmd (ClientData client_data, Tcl_Interp *interp,
00271                               int objc, Tcl_Obj * const objv[])
00272 {
00273   IMAGE *inimg = NULL;
00274   IMAGE *outimg = NULL;
00275 
00276   if (objc != 2)
00277     {
00278       Tcl_WrongNumArgs (interp, 1, objv, atitle);
00279       return TCL_ERROR;
00280     }
00281   if ((GetSadieImageFromObj2 (interp, objv[1], ixaddr, &inimg)
00282        != TCL_OK)
00283       || (GetSadiePixelFromObj2 (interp, objv[1], "in1", gbrk[0])
00284           != TCL_OK)
00285       || (GetSadiePixelFromObj2 (interp, objv[1], "in2", gbrk[0] + 1)
00286           != TCL_OK)
00287       || (GetSadiePixelFromObj2 (interp, objv[1], "in3", gbrk[0] + 2)
00288           != TCL_OK)
00289       || (GetSadiePixelFromObj2 (interp, objv[1], "in4", gbrk[0] + 3)
00290           != TCL_OK)
00291       || (GetSadiePixelFromObj2 (interp, objv[1], "out1", gbrk[1])
00292           != TCL_OK)
00293       || (GetSadiePixelFromObj2 (interp, objv[1], "out2", gbrk[1] + 1)
00294           != TCL_OK)
00295       || (GetSadiePixelFromObj2 (interp, objv[1], "out3", gbrk[1] + 2)
00296           != TCL_OK)
00297       || (GetSadiePixelFromObj2 (interp, objv[1], "out4", gbrk[1] + 3)
00298           != TCL_OK))
00299     return TCL_ERROR;
00300   STRETCH (inimg, TFPLT, &outimg);
00301   return SetSadieImageObj2 (interp, objv[1], ixname, outimg);
00302 }
00303 
00304 
00320 int
00321 Sadie_Contrast_RootStretchCmd (ClientData client_data, Tcl_Interp *interp,
00322                                int objc, Tcl_Obj * const objv[])
00323 {
00324   IMAGE *inimg = NULL;
00325   IMAGE *outimg = NULL;
00326 
00327   if (objc != 2)
00328     {
00329       Tcl_WrongNumArgs (interp, 1, objv, atitle);
00330       return TCL_ERROR;
00331     }
00332   if (GetSadieImageFromObj2 (interp, objv[1], ixaddr, &inimg)
00333       != TCL_OK)
00334     return TCL_ERROR;
00335   STRETCH (inimg, TFROOT, &outimg);
00336   return SetSadieImageObj2 (interp, objv[1], ixname, outimg);
00337 }
00338 
00353 int
00354 Sadie_Contrast_SqrStretchCmd (ClientData client_data, Tcl_Interp *interp,
00355                               int objc, Tcl_Obj * const objv[])
00356 {
00357   IMAGE *inimg = NULL;
00358   IMAGE *outimg = NULL;
00359 
00360   if (objc != 2)
00361     {
00362       Tcl_WrongNumArgs (interp, 1, objv, atitle);
00363       return TCL_ERROR;
00364     }
00365   if (GetSadieImageFromObj2 (interp, objv[1], ixaddr, &inimg)
00366       != TCL_OK)
00367     return TCL_ERROR;
00368   STRETCH (inimg, TFSQUARE, &outimg);
00369   return SetSadieImageObj2 (interp, objv[1], ixname, outimg);
00370 }
00371 
00390 int
00391 Sadie_Contrast_TblStretchCmd (ClientData client_data, Tcl_Interp *interp,
00392                               int objc, Tcl_Obj * const objv[])
00393 {
00394   uint32_t i;
00395   IMAGE *inimg = NULL;
00396   IMAGE *outimg = NULL;
00397   char index[SLEN];
00398 
00399   if (objc != 2)
00400     {
00401       Tcl_WrongNumArgs (interp, 1, objv, atitle);
00402       return TCL_ERROR;
00403     }
00404   if (GetSadieImageFromObj2 (interp, objv[1], ixaddr, &inimg)
00405       != TCL_OK)
00406     return TCL_ERROR;
00407   nlev = (uint32_t)floor(inimg->gmax) - (uint32_t)floor(inimg->gmin) + 1;
00408   table = calloc (nlev, sizeof(PIXEL));
00409   if (table == NULL)
00410     return TCL_ERROR;
00411   for (i = 0; i < nlev; i++)
00412     {
00413       /* Read the input double array(index,i) */
00414       snprintf(index, SLEN - 1, "index,%u", i);
00415       if (GetSadiePixelFromObj2 (interp, objv[1], (const char *) index,
00416                                  table + i) != TCL_OK)
00417         {
00418           free (table);
00419           return TCL_ERROR;
00420         }
00421     }
00422   STRETCH (inimg, TFTABLE, &outimg);
00423   free (table);
00424   return SetSadieImageObj2 (interp, objv[1], ixname, outimg);
00425 }
00426 
00446 int
00447 Sadie_Contrast_QntStretchCmd (ClientData client_data, Tcl_Interp *interp,
00448                               int objc, Tcl_Obj * const objv[])
00449 {
00450   IMAGE *inimg = NULL;
00451   IMAGE *outimg = NULL;
00452 
00453   if (objc != 2)
00454     {
00455       Tcl_WrongNumArgs (interp, 1, objv, atitle);
00456       return TCL_ERROR;
00457     }
00458   if ((GetSadieImageFromObj2 (interp, objv[1], ixaddr, &inimg)
00459        != TCL_OK)
00460       || (GetSadieUintFromObj2 (interp, objv[1], "steps", &nlev)
00461           != TCL_OK)
00462       || (GetSadiePixelFromObj2 (interp, objv[1], "gmax", &gmax)
00463           != TCL_OK)
00464       || (GetSadiePixelFromObj2 (interp, objv[1], "gmin", &gmin)
00465           != TCL_OK))
00466     return TCL_ERROR;
00467   STRETCH (inimg, TFQUANT, &outimg);
00468   return SetSadieImageObj2 (interp, objv[1], ixname, outimg);
00469 }
00470 
00488 int
00489 Sadie_Contrast_SatStretchCmd (ClientData client_data, Tcl_Interp *interp,
00490                               int objc, Tcl_Obj * const objv[])
00491 {
00492   IMAGE *inimg = NULL;
00493   IMAGE *outimg = NULL;
00494 
00495   if (objc != 2)
00496     {
00497       Tcl_WrongNumArgs (interp, 1, objv, atitle);
00498       return TCL_ERROR;
00499     }
00500   if ((GetSadieImageFromObj2 (interp, objv[1], ixaddr, &inimg)
00501        != TCL_OK)
00502       || (GetSadiePixelFromObj2 (interp, objv[1], "gmax", &gmax)
00503           != TCL_OK)
00504       || (GetSadiePixelFromObj2 (interp, objv[1], "gmin", &gmin)
00505           != TCL_OK))
00506     return TCL_ERROR;
00507   STRETCH (inimg, TFSAT, &outimg);
00508   return SetSadieImageObj2 (interp, objv[1], ixname, outimg);
00509 }
00510 
00527 int
00528 Sadie_Contrast_ThreshStretchCmd (ClientData client_data, Tcl_Interp *interp,
00529                                  int objc, Tcl_Obj * const objv[])
00530 {
00531   IMAGE *inimg = NULL;
00532   IMAGE *outimg = NULL;
00533 
00534   if (objc != 2)
00535     {
00536       Tcl_WrongNumArgs (interp, 1, objv, atitle);
00537       return TCL_ERROR;
00538     }
00539   if ((GetSadieImageFromObj2 (interp, objv[1], ixaddr, &inimg)
00540        != TCL_OK)
00541       || (GetSadiePixelFromObj2 (interp, objv[1], "thresh", &thresh)
00542           != TCL_OK))
00543     return TCL_ERROR;
00544   STRETCH (inimg, TFTHRESH, &outimg);
00545   return SetSadieImageObj2 (interp, objv[1], ixname, outimg);
00546 }
00547 
00565 int
00566 Sadie_Contrast_AdaptStretchCmd (ClientData client_data, Tcl_Interp *interp,
00567                                 int objc, Tcl_Obj * const objv[])
00568 {
00569   IMAGE *inimg = NULL;
00570   IMAGE *outimg = NULL;
00571   uint32_t blocksize;
00572 
00573   if (objc != 2)
00574     {
00575       Tcl_WrongNumArgs (interp, 1, objv, atitle);
00576       return TCL_ERROR;
00577     }
00578   if ((GetSadieImageFromObj2 (interp, objv[1], ixaddr, &inimg)
00579        != TCL_OK)
00580       || (GetSadieUintFromObj2 (interp, objv[1], "blocksize", &blocksize)
00581           != TCL_OK))
00582     return TCL_ERROR;
00583   VSTRETCH (inimg, blocksize, &outimg);
00584   return SetSadieImageObj2 (interp, objv[1], ixname, outimg);
00585 }
00586 
00610 int
00611 Sadie_Contrast_RefStretchCmd (ClientData client_data, Tcl_Interp *interp,
00612                               int objc, Tcl_Obj * const objv[])
00613 {
00614   IMAGE *inimg1 = NULL;
00615   IMAGE *inimg2 = NULL;
00616   IMAGE *outimg = NULL;
00617   uint32_t nlevels;
00618   int option;
00619 
00620   if (objc != 2)
00621     {
00622       Tcl_WrongNumArgs (interp, 1, objv, atitle);
00623       return TCL_ERROR;
00624     }
00625   if ((GetSadieImageFromObj2 (interp, objv[1], "inimg,addr1", &inimg1)
00626        != TCL_OK)
00627       || (GetSadieImageFromObj2 (interp, objv[1], "inimg,addr2", &inimg2)
00628           != TCL_OK)
00629       || (GetSadieUintFromObj2 (interp, objv[1], "nlevels", &nlevels)
00630           != TCL_OK)
00631       || (GetSadieUintFromObj2 (interp, objv[1], "option", &option)
00632           != TCL_OK))
00633     return TCL_ERROR;
00634   MATCH (inimg1, inimg2, nlevels, (short)option, &outimg);
00635   return SetSadieImageObj2 (interp, objv[1], ixname, outimg);
00636 }
00637 
00644 int
00645 Sadie_Contrast_Init (Tcl_Interp *interp)
00646 {
00647   Tcl_CreateObjCommand (interp, "Sadie_Contrast_NormStretch",
00648                         Sadie_Contrast_NormStretchCmd, NULL, NULL);
00649   Tcl_CreateObjCommand (interp, "Sadie_Contrast_HisteqStretch",
00650                         Sadie_Contrast_HisteqStretchCmd, NULL, NULL);
00651   Tcl_CreateObjCommand (interp, "Sadie_Contrast_LinearStretch",
00652                         Sadie_Contrast_LinearStretchCmd, NULL, NULL);
00653   Tcl_CreateObjCommand (interp, "Sadie_Contrast_LogStretch",
00654                         Sadie_Contrast_LogStretchCmd, NULL, NULL);
00655   Tcl_CreateObjCommand (interp, "Sadie_Contrast_PWLStretch",
00656                         Sadie_Contrast_PWLStretchCmd, NULL, NULL);
00657   Tcl_CreateObjCommand (interp, "Sadie_Contrast_RootStretch",
00658                         Sadie_Contrast_RootStretchCmd, NULL, NULL);
00659   Tcl_CreateObjCommand (interp, "Sadie_Contrast_SqrStretch",
00660                         Sadie_Contrast_SqrStretchCmd, NULL, NULL);
00661   Tcl_CreateObjCommand (interp, "Sadie_Contrast_TblStretch",
00662                         Sadie_Contrast_TblStretchCmd, NULL, NULL);
00663   Tcl_CreateObjCommand (interp, "Sadie_Contrast_QntStretch",
00664                         Sadie_Contrast_QntStretchCmd, NULL, NULL);
00665   Tcl_CreateObjCommand (interp, "Sadie_Contrast_SatStretch",
00666                         Sadie_Contrast_SatStretchCmd, NULL, NULL);
00667   Tcl_CreateObjCommand (interp, "Sadie_Contrast_ThreshStretch",
00668                         Sadie_Contrast_ThreshStretchCmd, NULL, NULL);
00669   Tcl_CreateObjCommand (interp, "Sadie_Contrast_AdaptStretch",
00670                         Sadie_Contrast_AdaptStretchCmd, NULL, NULL);
00671   Tcl_CreateObjCommand (interp, "Sadie_Contrast_RefStretch",
00672                         Sadie_Contrast_RefStretchCmd, NULL, NULL);
00673   return TCL_OK;
00674 }

Generated on Fri Jul 8 14:55:00 2005 for tclSadie by  doxygen 1.4.2