From fa080de7afc95aa1c19a6e6fc0e0708ced2eadc4 Mon Sep 17 00:00:00 2001 From: Joseph Hunkeler Date: Wed, 8 Jul 2015 20:46:52 -0400 Subject: Initial commit --- pkg/obsolete/t_fixpix.x | 172 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 172 insertions(+) create mode 100644 pkg/obsolete/t_fixpix.x (limited to 'pkg/obsolete/t_fixpix.x') diff --git a/pkg/obsolete/t_fixpix.x b/pkg/obsolete/t_fixpix.x new file mode 100644 index 00000000..4442cd32 --- /dev/null +++ b/pkg/obsolete/t_fixpix.x @@ -0,0 +1,172 @@ +include +include + +# FIXPIX -- Interpolate over bad columns and lines. + +procedure t_fixpix () + +char images[SZ_LINE] # Image template +char badpixels[SZ_FNAME] # File containing the badpixel regions +bool verbose # Print image names and regions? + +char imname[SZ_FNAME] # Image name +pointer image # Image pointer + +int list, badpix + +int open(), imtopen(), imtgetim() +bool clgetb() +pointer immap() + +begin + # Get the image template and expand. + + call clgstr ("images", images, SZ_LINE) + call clgstr ("badpixels", badpixels, SZ_FNAME) + verbose = clgetb ("verbose") + if (verbose) + call fseti (STDOUT, F_FLUSHNL, YES) + + list = imtopen (images) + + while (imtgetim (list, imname, SZ_FNAME) != EOF) { + + if (verbose) { + call printf ("fixpix: %s\n") + call pargstr (imname) + } + image = immap (imname, READ_WRITE, 0) + badpix = open (badpixels, READ_ONLY, TEXT_FILE) + call fixpix (image, badpix, verbose) + call imunmap (image) + call close (badpix) + } + + call imtclose (list) +end + +procedure fixpix (image, badpix, verbose) + +pointer image # Image pointer +int badpix # File pointer +bool verbose # Print regions fixed? + +int x1, x2, y1, y2 # Bad region + +int temp, fscan(), nscan() + +begin + # Scan the bad pixel regions from the file. + + while (fscan (badpix) != EOF) { + call gargi (x1) + call gargi (x2) + call gargi (y1) + call gargi (y2) + if (nscan () != 4) + next + + if (x1 > x2) { + temp = x1; x1 = x2; x2 = temp + } + if (y1 > y2) { + temp = y1; y1 = y2; y2 = temp + } + + # Check that the region is not the entire image. + + if ((x1 == 1) && (x2 == IM_LEN (image, 1)) && + (y1 == 1) && (y2 == IM_LEN (image, 2))) { + call eprintf ("Cannot fix an entire image") + next + } + + # If the bad region spans entire lines interpolate lines. + if ((x1 == 1) && (x2 == IM_LEN (image, 1))) + call fixline (image, x1, x2, y1, y2, verbose) + + # If the bad region spans entire columns interpolate columns. + else if ((y1 == 1) && (y2 == IM_LEN (image, 2))) + call fixcolumn (image, x1, x2, y1, y2, verbose) + + # If the bad region is longer in the columns interpolate columns. + else if ((x2 - x1) < (y2 - y1)) + call fixcolumn (image, x1, x2, y1, y2, verbose) + + # If the bad region is longer in the lines interpolate lines. + else + call fixline (image, x1, x2, y1, y2, verbose) + } +end + +# FIXLINE -- Switch to the appropriate generic procedure to optimize the +# image I/O. + +procedure fixline (image, x1, x2, y1, y2, verbose) + +pointer image # Image pointer +int x1, x2, y1, y2 # Region to be fixed +bool verbose # Print regions fixed? + +begin + if (verbose) { + call printf (" Interpolate lines for region %d %d %d %d\n") + call pargi (x1) + call pargi (x2) + call pargi (y1) + call pargi (y2) + } + + switch (IM_PIXTYPE (image)) { + case TY_SHORT: + call fixlines (image, x1, x2, y1, y2) + case TY_INT: + call fixlinei (image, x1, x2, y1, y2) + case TY_USHORT, TY_LONG: + call fixlinel (image, x1, x2, y1, y2) + case TY_REAL: + call fixliner (image, x1, x2, y1, y2) + case TY_DOUBLE: + call fixlined (image, x1, x2, y1, y2) + case TY_COMPLEX: + call fixlinex (image, x1, x2, y1, y2) + default: + call eprintf ("Unknown pixel type") + } +end + +# FIXCOLUMN -- Switch to the appropriate generic procedure to optimize the +# image I/O. + +procedure fixcolumn (image, x1, x2, y1, y2, verbose) + +pointer image # Image pointer +int x1, x2, y1, y2 # Region to be fixed +bool verbose # Print regions fixed? + +begin + if (verbose) { + call printf (" Interpolate columns for region %d %d %d %d\n") + call pargi (x1) + call pargi (x2) + call pargi (y1) + call pargi (y2) + } + + switch (IM_PIXTYPE (image)) { + case TY_SHORT: + call fixcols (image, x1, x2, y1, y2) + case TY_INT: + call fixcoli (image, x1, x2, y1, y2) + case TY_USHORT, TY_LONG: + call fixcoll (image, x1, x2, y1, y2) + case TY_REAL: + call fixcolr (image, x1, x2, y1, y2) + case TY_DOUBLE: + call fixcold (image, x1, x2, y1, y2) + case TY_COMPLEX: + call fixcolx (image, x1, x2, y1, y2) + default: + call eprintf ("Unknown pixel type") + } +end -- cgit