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

Sadie_Filter.c

Go to the documentation of this file.
00001 
00017 /* This file is part of tclSadie.
00018 
00019    tclSadie is free software; you can redistribute it and/or modify it
00020    under the terms of the GNU General Public License as published by
00021    the Free Software Foundation; either version 2 of the License, or
00022    (at your option) any later version.
00023 
00024    tclSadie is distributed in the hope that it will be useful, but
00025    WITHOUT ANY WARRANTY; without even the implied warranty of
00026    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00027    General Public License for more details.
00028 
00029    You should have received a copy of the GNU General Public License
00030    along with tclSadie; if not, write to the Free Software Foundation,
00031    Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.  */
00032 
00033 #if HAVE_CONFIG_H
00034 #include <config.h>
00035 #endif /* HAVE_CONFIG_H */
00036 #include <tcl.h>
00037 #include <tk.h>
00038 #include <sadie.h>
00039 #include "tclsadie.h"
00040 #if WITH_DMALLOC
00041 #include <dmalloc.h>
00042 #endif /* WITH_DMALLOC */
00043 
00048 extern uint32_t nlev; 
00049 extern uint32_t csize; 
00050 extern double weight; 
00051 extern double *count; 
00052 extern PIXEL gmin; 
00053 extern PIXEL gmax; 
00054 extern PIXEL thresh; 
00056 
00061 static const char atitle[] = DEFAULT_TCL_ARRAY_TITLE;
00062 static const char ixaddr[] = DEFAULT_IN_IMAGE_ADDR_INDEX;
00063 static const char ixname[] = DEFAULT_OUT_IMAGE_NAME_INDEX;
00085 int
00086 Sadie_Filter_PSpectCmd (ClientData client_data, Tcl_Interp *interp,
00087                         int objc, Tcl_Obj * const objv[])
00088 {
00089   IMAGE* inimg = NULL;
00090   IMAGE* outimg = NULL;
00091   int option;
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       || (GetSadieIntFromObj2 (interp, objv[1], "option", &option)
00101           != TCL_OK))
00102     return TCL_ERROR;
00103   if (option == NOR_PSPECT) 
00104     PSPECT (inimg, &outimg);
00105   else
00106     PSPECT1D (inimg, (short)option, &outimg);
00107   return SetSadieImageObj2 (interp, objv[1], ixname, outimg);
00108 }
00109 
00129 int
00130 Sadie_Filter_FFTConvCmd (ClientData client_data, Tcl_Interp *interp,
00131                          int objc, Tcl_Obj * const objv[])
00132 {
00133   IMAGE *inimg1 = NULL;
00134   IMAGE *inimg2 = NULL;
00135   IMAGE *outimg = NULL;
00136   int option;
00137 
00138   if (objc != 2)
00139     {
00140       Tcl_WrongNumArgs (interp, 1, objv, atitle);
00141       return TCL_ERROR;
00142     }
00143   if ((GetSadieImageFromObj2 (interp, objv[1], "inimg,addr1", &inimg1)
00144        != TCL_OK)
00145       || (GetSadieImageFromObj2 (interp, objv[1], "inimg,addr2", &inimg2)
00146           != TCL_OK)
00147       || (GetSadieIntFromObj2 (interp, objv[1], "option", &option)
00148           != TCL_OK))
00149     return TCL_ERROR;
00150   FCONVL (inimg1, inimg2, (short)option, &outimg);
00151   return SetSadieImageObj2 (interp, objv[1], ixname, outimg);
00152 }
00153 
00185 int
00186 Sadie_Filter_FFTFiltCmd (ClientData client_data, Tcl_Interp *interp,
00187                          int objc, Tcl_Obj * const objv[])
00188 {
00189   IMAGE *inimg = NULL;
00190   IMAGE *outimg = NULL;
00191   int option;
00192   double xradius, yradius, parameter;
00193 
00194   double (*flt) (double, double, double, double); 
00195 
00196   if (objc != 2)
00197     {
00198       Tcl_WrongNumArgs (interp, 1, objv, atitle);
00199       return TCL_ERROR;
00200     }
00201   if ((GetSadieImageFromObj2 (interp, objv[1], ixaddr, &inimg)
00202        != TCL_OK)
00203       || (GetSadieIntFromObj2 (interp, objv[1], "option", &option)
00204           != TCL_OK)
00205       || (GetSadieDoubleFromObj2 (interp, objv[1], "xradius", &xradius)
00206           != TCL_OK)
00207       || (GetSadieDoubleFromObj2 (interp, objv[1], "yradius", &yradius)
00208           != TCL_OK)
00209       || (GetSadieDoubleFromObj2 (interp, objv[1], "parameter", &parameter)
00210           != TCL_OK))
00211     return TCL_ERROR;
00212   switch (option)
00213     {
00214     case 1:
00215       flt = FLTCONE;
00216       break;
00217     case 2:
00218       flt = FLTEXP;
00219       break;
00220     case 3:
00221       flt = FLTGAUSS;
00222       break;
00223     case 4:
00224       flt = FLTBOX;
00225       break;
00226     default:
00227       flt = FLTCYL;
00228       break;
00229     }
00230   FILTER (inimg, flt, xradius, yradius, parameter, &outimg);
00231   return SetSadieImageObj2 (interp, objv[1], ixname, outimg);
00232 }
00233 
00250 int
00251 Sadie_Filter_FFTCmd (ClientData client_data, Tcl_Interp *interp,
00252                      int objc, Tcl_Obj * const objv[])
00253 {
00254   IMAGE *inimg = NULL;
00255   IMAGE *outimg = NULL;
00256   int option;
00257 
00258   if (objc != 2)
00259     {
00260       Tcl_WrongNumArgs (interp, 1, objv, atitle);
00261       return TCL_ERROR;
00262     }
00263   if ((GetSadieImageFromObj2 (interp, objv[1], ixaddr, &inimg)
00264        != TCL_OK)
00265       || (GetSadieIntFromObj2 (interp, objv[1], "option", &option)
00266           != TCL_OK))
00267     return TCL_ERROR;
00268   FFT2D (inimg, (short)option, &outimg);
00269   return SetSadieImageObj2 (interp, objv[1], ixname, outimg);
00270 }
00271 
00288 int
00289 Sadie_Filter_FHTCmd (ClientData client_data, Tcl_Interp *interp,
00290                      int objc, Tcl_Obj * const objv[])
00291 {
00292   IMAGE *inimg = NULL;
00293   IMAGE *outimg = NULL;
00294   int option;
00295 
00296   if (objc != 2)
00297     {
00298       Tcl_WrongNumArgs (interp, 1, objv, atitle);
00299       return TCL_ERROR;
00300     }
00301   if ((GetSadieImageFromObj2 (interp, objv[1], ixaddr, &inimg)
00302        != TCL_OK)
00303       || (GetSadieIntFromObj2 (interp, objv[1], "option", &option)
00304           != TCL_OK))
00305     return TCL_ERROR;
00306   FHT2D (inimg, (short)option, &outimg);
00307   return SetSadieImageObj2 (interp, objv[1], ixname, outimg);
00308 }
00309 
00330 int
00331 Sadie_Filter_MaskConvCmd (ClientData client_data, Tcl_Interp *interp,
00332                           int objc, Tcl_Obj * const objv[])
00333 {
00334     uint32_t j, k;
00335     uint32_t lines, pix;
00336     size_t a;
00337     IMAGE *inimg = NULL;
00338     IMAGE *outimg = NULL;
00339     double factor, wt;
00340     PIXEL *psf = NULL;
00341     char index[SLEN];
00342 
00343   if (objc != 2)
00344     {
00345       Tcl_WrongNumArgs (interp, 1, objv, atitle);
00346       return TCL_ERROR;
00347     }
00348   if ((GetSadieImageFromObj2 (interp, objv[1], ixaddr, &inimg)
00349        != TCL_OK)
00350       || (GetSadieUintFromObj2 (interp, objv[1], "lines", &lines)
00351           != TCL_OK)
00352       || (GetSadieUintFromObj2 (interp, objv[1], "pix", &pix)
00353           != TCL_OK)
00354       || (GetSadieDoubleFromObj2 (interp, objv[1], "factor", &factor)
00355           != TCL_OK))
00356     return TCL_ERROR;
00357   psf = calloc (((size_t) lines * pix), sizeof(PIXEL));
00358   if (psf == NULL)
00359     {
00360       Tcl_SetStringObj (Tcl_GetObjResult (interp),
00361                         "Cannot allocate memory!", -1);
00362       return TCL_ERROR;
00363     }                                                                         
00364   for (a=0, j=0; j<lines; j++)
00365     {
00366       for (k=0; k<pix; k++)
00367         {
00368           /* Read the input double array(mask,j,k) */
00369           snprintf (index, SLEN - 1, "mask,%d,%d", j, k);
00370           if (GetSadieDoubleFromObj2 (interp, objv[1], (const char *) index,
00371                                       &wt) == TCL_OK)
00372             psf[a++] = (PIXEL) (wt / factor);
00373           else
00374             {
00375               free (psf);
00376               return TCL_ERROR;
00377             }
00378         }
00379     }
00380   SCONVL (inimg, psf, lines, pix, &outimg);
00381   free(psf);
00382   return SetSadieImageObj2 (interp, objv[1], ixname, outimg);
00383 }
00384 
00403 int
00404 Sadie_Filter_ImageConvCmd (ClientData client_data, Tcl_Interp *interp,
00405                            int objc, Tcl_Obj * const objv[])
00406 {
00407   uint32_t j, k;
00408   size_t n, a, b, c;
00409   int normalize;
00410   uint32_t lines, pix;
00411   double factor;
00412   PIXEL pfactor;
00413   PIXEL *psf = NULL;
00414   IMAGE *inimg = NULL;
00415   IMAGE *kimg = NULL;
00416   IMAGE *outimg = NULL;
00417     
00418   if (objc != 2)
00419     {
00420       Tcl_WrongNumArgs (interp, 1, objv, atitle);
00421       return TCL_ERROR;
00422     }
00423   if ((GetSadieImageFromObj2 (interp, objv[1], ixaddr, &inimg)
00424        != TCL_OK)
00425       || (GetSadieImageFromObj2 (interp, objv[1], "kimg,addr", &kimg)
00426           != TCL_OK)
00427       || (GetSadieBooleanFromObj2 (interp, objv[1], "normalize", &normalize)
00428           != TCL_OK))
00429     return TCL_ERROR;
00430   lines = kimg->nlin;
00431   pix = kimg->npix;
00432   n = (size_t)lines * pix;
00433   psf = calloc (n, sizeof (PIXEL));             
00434   if (psf == NULL)
00435     {
00436       Tcl_SetStringObj (Tcl_GetObjResult (interp),
00437                         "Cannot allocate memory!", -1);
00438       return TCL_ERROR;
00439     }                                                                         
00440   for (a=0, j=0; j<lines; j++)
00441     {
00442       for (k=0; k<pix; k++)
00443         psf[a++] = kimg->data[0][j][k];
00444     }
00445   if (normalize)
00446     {
00447       factor = 0.0;
00448       for (b = n; b != 0; factor += psf[--b]);
00449       pfactor = (PIXEL) factor;
00450       for (c = n; c != 0; psf[--c] /= pfactor);
00451     }
00452   SCONVL (inimg, psf, lines, pix, &outimg);
00453   free(psf);
00454   return SetSadieImageObj2 (interp, objv[1], ixname, outimg);
00455 }
00456 
00458 static const char *comp_label_index[2] = { "magname", "dirname" };
00459 
00481 int
00482 Sadie_Filter_LibGradCmd (ClientData client_data, Tcl_Interp *interp,
00483                          int objc, Tcl_Obj * const objv[])
00484 {
00485   IMAGE *inimg = NULL;
00486   IMAGE *comp_img[2] = { NULL, NULL };
00487   int option;
00488 
00489   if (objc != 2)
00490     {
00491       Tcl_WrongNumArgs (interp, 1, objv, atitle);
00492       return TCL_ERROR;
00493     }
00494   if ((GetSadieImageFromObj2 (interp, objv[1], ixaddr, &inimg)
00495       != TCL_OK)
00496       || (GetSadieIntFromObj2 (interp, objv[1], "option", &option)
00497           != TCL_OK))
00498     return TCL_ERROR;
00499   EDGE (inimg, (short)option, comp_img, comp_img + 1);
00500   return SetSadieComponentObj2 (interp, objv[1], comp_label_index, comp_img);
00501 }
00502 
00504 #define GRADIENT_KERNEL_SIZE 3
00505 
00506 static const short gradient_kernel_size = GRADIENT_KERNEL_SIZE;
00508 #define GRADIENT_KERNEL_AREA 9
00509 
00530 int Sadie_Filter_MaskGradCmd (ClientData client_data, Tcl_Interp *interp,
00531                               int objc, Tcl_Obj * const objv[])
00532 {
00533   int j, k, n;
00534   IMAGE *inimg = NULL;
00535   IMAGE *comp_img[2] = { NULL, NULL };
00536   PIXEL hpsf[GRADIENT_KERNEL_AREA], vpsf[GRADIENT_KERNEL_AREA];
00537   char index[SLEN];
00538   double hweight, vweight;
00539 
00540   if (objc != 2)
00541     {
00542       Tcl_WrongNumArgs (interp, 1, objv, atitle);
00543       return TCL_ERROR;
00544     }
00545   if (GetSadieImageFromObj2 (interp, objv[1], ixaddr, &inimg)
00546       != TCL_OK)
00547     return TCL_ERROR;
00548   for (n = 0, j = 0; j < gradient_kernel_size; j++)
00549     {
00550       for (k = 0; k < gradient_kernel_size; k++)
00551         {
00552           /* Read the input PIXEL array(hmask,j,k) */
00553           snprintf (index, SLEN - 1, "hmask,%d,%d", j, k);
00554           if (GetSadieDoubleFromObj2 (interp, objv[1],
00555                                       (const char *) index, &hweight)
00556               != TCL_OK)
00557             return TCL_ERROR;
00558           hpsf[n] = (PIXEL) hweight;
00559           /* Read the input PIXEL array(vmask,j,k) */
00560           snprintf(index, SLEN - 1, "vmask,%d,%d", j, k);
00561           if (GetSadieDoubleFromObj2 (interp, objv[1],
00562                                       (const char *) index, &vweight)
00563               != TCL_OK)
00564             return TCL_ERROR;
00565           vpsf[n++] = (PIXEL) vweight;
00566         }
00567     }
00568   GRADIENT (inimg, vpsf, hpsf, gradient_kernel_size, comp_img, comp_img + 1);
00569   return SetSadieComponentObj2 (interp, objv[1], comp_label_index, comp_img);
00570 }
00571 
00592 int
00593 Sadie_Filter_ImageGradCmd (ClientData client_data, Tcl_Interp *interp,
00594                            int objc, Tcl_Obj * const objv[])
00595 {
00596   uint32_t lines, pix, j, k;
00597   size_t n, a;
00598   short ssize;
00599   PIXEL *hpsf = NULL;
00600   PIXEL *vpsf = NULL;
00601   IMAGE *inimg = NULL;
00602   IMAGE *himg = NULL;
00603   IMAGE *vimg = NULL;
00604   IMAGE *comp_img[2] = { NULL, NULL };
00605 
00606   if (objc != 2)
00607     {
00608       Tcl_WrongNumArgs (interp, 1, objv, atitle);
00609       return TCL_ERROR;
00610     }
00611   if ((GetSadieImageFromObj2 (interp, objv[1], ixaddr, &inimg)
00612        != TCL_OK)
00613       || (GetSadieImageFromObj2 (interp, objv[1], "himg,addr", &himg)
00614           != TCL_OK)
00615       || (GetSadieImageFromObj2 (interp, objv[1], "vimg,addr", &vimg)
00616           != TCL_OK))
00617     return TCL_ERROR;
00618   if ((himg->nlin != himg->npix) || (himg->nlin != vimg->nlin)
00619       || (himg->nlin != vimg->npix))
00620     {
00621       Tcl_SetStringObj (Tcl_GetObjResult (interp),
00622                         "Image kernels must be square and equal in size.", -1);
00623       return TCL_ERROR;
00624     }
00625   lines = himg->nlin;
00626   pix = himg->npix;
00627   n = (size_t)lines * pix;
00628   ssize = (short) n;
00629   if ((size_t) ssize != n)
00630     {
00631       Tcl_SetStringObj (Tcl_GetObjResult (interp),
00632                         "Image kernels too large for the SADIE GRADIENT function.", -1);
00633       return TCL_ERROR;
00634     }
00635   hpsf = calloc (n, sizeof (PIXEL));            
00636   if (hpsf == NULL)
00637     {
00638       Tcl_SetStringObj (Tcl_GetObjResult (interp),
00639                         "Cannot allocate memory!", -1);
00640       return TCL_ERROR;
00641     }
00642   vpsf = calloc (n, sizeof (PIXEL));            
00643   if (vpsf == NULL)
00644     {
00645       Tcl_SetStringObj (Tcl_GetObjResult (interp),
00646                         "Cannot allocate memory!", -1);
00647       free (hpsf);
00648       return TCL_ERROR;
00649     }
00650   for (a = 0, j = 0; j < lines; j++)
00651     {
00652       for (k = 0; k < pix; k++)
00653         {
00654           hpsf[a] = himg->data[0][j][k];
00655           vpsf[a++] = vimg->data[0][j][k];
00656         }
00657     }
00658   GRADIENT(inimg, vpsf, hpsf, ssize, comp_img, comp_img + 1);
00659   free (vpsf);
00660   free (hpsf);
00661   return SetSadieComponentObj2 (interp, objv[1], comp_label_index, comp_img);
00662 }
00663 
00685 static int
00686 apply_sadie_window (Tcl_Interp *interp, int objc, Tcl_Obj * const objv[],
00687                     PIXEL (*wtf)(PIXEL *, uint32_t, uint32_t))
00688 {
00689   IMAGE *inimg = NULL;
00690   IMAGE *outimg = NULL;
00691   uint32_t lines, pix;
00692 
00693   if (objc != 2)
00694     {
00695       Tcl_WrongNumArgs (interp, 1, objv, atitle);
00696       return TCL_ERROR;
00697     }
00698   if ((GetSadieImageFromObj2 (interp, objv[1], ixaddr, &inimg)
00699        != TCL_OK)
00700       || (GetSadieUintFromObj2 (interp, objv[1], "lines", &lines)
00701           != TCL_OK)
00702       || (GetSadieUintFromObj2 (interp, objv[1], "pix", &pix)
00703           != TCL_OK))
00704     return TCL_ERROR;
00705   WINDOW (inimg, wtf, lines, pix, &outimg);
00706   return SetSadieImageObj2 (interp, objv[1], ixname, outimg);
00707 }
00708 
00721 int
00722 Sadie_Filter_VarMapCmd (ClientData client_data, Tcl_Interp *interp,
00723                         int objc, Tcl_Obj * const objv[])
00724 {
00725   return apply_sadie_window (interp, objc, objv, WTFVAR);
00726 }
00727 
00741 int
00742 Sadie_Filter_MinFiltCmd (ClientData client_data, Tcl_Interp *interp,
00743                          int objc, Tcl_Obj * const objv[])
00744 {
00745   return apply_sadie_window (interp, objc, objv, WTFMIN);
00746 }
00747 
00761 int
00762 Sadie_Filter_MaxFiltCmd (ClientData client_data, Tcl_Interp *interp,
00763                          int objc, Tcl_Obj * const objv[])
00764 {
00765   return apply_sadie_window (interp, objc, objv, WTFMAX);
00766 }
00767 
00780 int
00781 Sadie_Filter_DivMapCmd (ClientData client_data, Tcl_Interp *interp,
00782                         int objc, Tcl_Obj * const objv[])
00783 {
00784   return apply_sadie_window (interp, objc, objv, WTFDIVER);
00785 }
00786 
00811 int
00812 Sadie_Filter_MajFiltCmd (ClientData client_data, Tcl_Interp *interp,
00813                          int objc, Tcl_Obj * const objv[])
00814 {
00815   IMAGE *inimg = NULL;
00816   IMAGE *outimg = NULL;
00817   uint32_t lines, pix;
00818 
00819   if (objc != 2)
00820     {
00821       Tcl_WrongNumArgs (interp, 1, objv, atitle);
00822       return TCL_ERROR;
00823     }
00824   if ((GetSadieImageFromObj2 (interp, objv[1], ixaddr, &inimg)
00825       != TCL_OK)
00826   || (GetSadieUintFromObj2 (interp, objv[1], "lines", &lines)
00827       != TCL_OK)
00828   || (GetSadieUintFromObj2 (interp, objv[1], "pix", &pix)
00829       != TCL_OK)
00830   || (GetSadieDoubleFromObj2 (interp, objv[1], "weight", &weight)
00831       != TCL_OK))
00832     return TCL_ERROR;
00833   RANGE (inimg);
00834   nlev = (uint32_t)inimg->gmax - (uint32_t)inimg->gmin + 1;
00835   gmin = inimg->gmin;
00836   gmax = inimg->gmax;
00837   count = NULL;
00838   count = calloc ((size_t) nlev , sizeof (double));
00839   if (count == NULL)
00840     {
00841       Tcl_SetStringObj (Tcl_GetObjResult (interp),
00842                         "Cannot allocate memory!", -1);
00843       return TCL_ERROR;
00844     }                                                                         
00845   WINDOW (inimg, WTFMAJ, lines, pix, &outimg);
00846   free(count);
00847   return SetSadieImageObj2 (interp, objv[1], ixname, outimg);
00848 }
00849 
00866 int
00867 Sadie_Filter_MedFiltCmd (ClientData client_data, Tcl_Interp *interp,
00868                          int objc, Tcl_Obj * const objv[])
00869 {
00870   IMAGE *inimg = NULL;
00871   IMAGE *outimg = NULL;
00872   uint32_t lines, pix;
00873 
00874   if (objc != 2)
00875     {
00876       Tcl_WrongNumArgs (interp, 1, objv, atitle);
00877       return TCL_ERROR;
00878     }
00879   if ((GetSadieImageFromObj2 (interp, objv[1], ixaddr, &inimg)
00880        != TCL_OK)
00881       || (GetSadieUintFromObj2 (interp, objv[1], "lines", &lines)
00882           != TCL_OK)
00883       || (GetSadieUintFromObj2 (interp, objv[1], "pix", &pix)
00884           != TCL_OK))
00885     return TCL_ERROR;
00886   MEDIAN (inimg, lines, pix, &outimg);
00887   return SetSadieImageObj2 (interp, objv[1], ixname, outimg);
00888 }
00889 
00922 int
00923 Sadie_Filter_CAvgFiltCmd (ClientData client_data, Tcl_Interp *interp,
00924                           int objc, Tcl_Obj * const objv[])
00925 {
00926   IMAGE *inimg = NULL;
00927   IMAGE *outimg = NULL;
00928   uint32_t lines, pix;
00929 
00930   if (objc != 2)
00931     {
00932       Tcl_WrongNumArgs (interp, 1, objv, atitle);
00933       return TCL_ERROR;
00934     }
00935   if ((GetSadieImageFromObj2 (interp, objv[1], ixaddr, &inimg)
00936        != TCL_OK)
00937       || (GetSadieUintFromObj2 (interp, objv[1], "lines", &lines)
00938           != TCL_OK)
00939       || (GetSadieUintFromObj2 (interp, objv[1], "pix", &pix)
00940           != TCL_OK)
00941       || (GetSadieUintFromObj2 (interp, objv[1], "size", &csize)
00942           != TCL_OK)
00943       || (GetSadiePixelFromObj2 (interp, objv[1], "thresh", &thresh)
00944           != TCL_OK))
00945     return TCL_ERROR;
00946   WINDOW (inimg, WTFCAVG, lines, pix, &outimg);
00947   return SetSadieImageObj2 (interp, objv[1], ixname, outimg);
00948 }
00949 
00956 int
00957 Sadie_Filter_Init (Tcl_Interp *interp)
00958 {
00959   Tcl_CreateObjCommand (interp, "Sadie_Filter_PSpect",
00960                         Sadie_Filter_PSpectCmd, NULL, NULL);
00961   Tcl_CreateObjCommand (interp, "Sadie_Filter_FFTConv",
00962                         Sadie_Filter_FFTConvCmd, NULL, NULL);
00963   Tcl_CreateObjCommand (interp, "Sadie_Filter_FFTFilt",
00964                         Sadie_Filter_FFTFiltCmd, NULL, NULL);
00965   Tcl_CreateObjCommand (interp, "Sadie_Filter_FFT",
00966                         Sadie_Filter_FFTCmd, NULL, NULL);
00967   Tcl_CreateObjCommand (interp, "Sadie_Filter_FHT",
00968                         Sadie_Filter_FHTCmd, NULL, NULL);
00969   Tcl_CreateObjCommand (interp, "Sadie_Filter_MaskConv",
00970                         Sadie_Filter_MaskConvCmd, NULL, NULL);
00971   Tcl_CreateObjCommand (interp, "Sadie_Filter_ImageConv",
00972                         Sadie_Filter_ImageConvCmd, NULL, NULL);
00973   Tcl_CreateObjCommand (interp, "Sadie_Filter_LibGrad",
00974                         Sadie_Filter_LibGradCmd, NULL, NULL);
00975   Tcl_CreateObjCommand (interp, "Sadie_Filter_ImageGrad",
00976                         Sadie_Filter_ImageGradCmd, NULL, NULL);
00977   Tcl_CreateObjCommand (interp, "Sadie_Filter_MaskGrad",
00978                         Sadie_Filter_MaskGradCmd, NULL, NULL);
00979   Tcl_CreateObjCommand (interp, "Sadie_Filter_VarMap",
00980                         Sadie_Filter_VarMapCmd, NULL, NULL);
00981   Tcl_CreateObjCommand (interp, "Sadie_Filter_DivMap",
00982                         Sadie_Filter_DivMapCmd, NULL, NULL);
00983   Tcl_CreateObjCommand (interp, "Sadie_Filter_MajFilt",
00984                         Sadie_Filter_MajFiltCmd, NULL, NULL);
00985   Tcl_CreateObjCommand (interp, "Sadie_Filter_MedFilt",
00986                         Sadie_Filter_MedFiltCmd, NULL, NULL);
00987   Tcl_CreateObjCommand (interp, "Sadie_Filter_MinFilt",
00988                         Sadie_Filter_MinFiltCmd, NULL, NULL);
00989   Tcl_CreateObjCommand (interp, "Sadie_Filter_MaxFilt",
00990                         Sadie_Filter_MaxFiltCmd, NULL, NULL);
00991   Tcl_CreateObjCommand (interp, "Sadie_Filter_CAvgFilt",
00992                         Sadie_Filter_CAvgFiltCmd, NULL, NULL);
00993   return TCL_OK;
00994 }
00995 

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