aboutsummaryrefslogtreecommitdiff
path: root/pkg/images/immatch/imalign.cl
diff options
context:
space:
mode:
authorJoe Hunkeler <jhunkeler@gmail.com>2015-08-11 16:51:37 -0400
committerJoe Hunkeler <jhunkeler@gmail.com>2015-08-11 16:51:37 -0400
commit40e5a5811c6ffce9b0974e93cdd927cbcf60c157 (patch)
tree4464880c571602d54f6ae114729bf62a89518057 /pkg/images/immatch/imalign.cl
downloadiraf-osx-40e5a5811c6ffce9b0974e93cdd927cbcf60c157.tar.gz
Repatch (from linux) of OSX IRAF
Diffstat (limited to 'pkg/images/immatch/imalign.cl')
-rw-r--r--pkg/images/immatch/imalign.cl119
1 files changed, 119 insertions, 0 deletions
diff --git a/pkg/images/immatch/imalign.cl b/pkg/images/immatch/imalign.cl
new file mode 100644
index 00000000..2e6a5f69
--- /dev/null
+++ b/pkg/images/immatch/imalign.cl
@@ -0,0 +1,119 @@
+# IMALIGN - Register a set of images using the results of the IMCENTROID,
+# and the IMSHIFT, and IMCOPY tasks.
+
+procedure imalign (input, reference, coords, output)
+
+begin
+ bool shifts_found, trim_found
+ string tmpfile, outfile, shiftfile, trimsect, tmp, junk
+ string l_input, l_reference, l_coords, l_output
+ int x1, x2, y1, y2
+ real xshift, yshift
+ struct line
+
+ # Set up some temporary files.
+ tmpfile = mktemp ("tmp$ia_tmp.")
+ outfile = mktemp ("tmp$ia_tmp.")
+ shiftfile = mktemp ("tmp$ia_tmp.")
+
+ # Get the required parameters.
+ l_input = input
+ l_reference = reference
+ l_coords = coords
+ l_output = output
+
+ # Write the output names to outfile.
+ sections (l_output, option="fullname", > outfile)
+
+ # Compute the centers and relative shifts.
+ imcentroid (l_input, l_reference, l_coords, shifts=shifts,
+ boxsize=boxsize, bigbox=bigbox, negative=negative,
+ background=background, lower=lower, upper=upper,
+ niterate=niterate, tolerance=tolerance, maxshift=maxshift,
+ verbose=verbose, >& tmpfile)
+
+ # Print the centering results on the screen?
+ if (verbose)
+ type (tmpfile)
+
+ # Shift the images.
+ if (shiftimages) {
+
+ # Read the shifts.
+ shifts_found = no
+ list = tmpfile
+ while (fscan (list, line) != EOF) {
+ tmp = substr (line, 2, 7)
+ if (tmp == "Shifts") {
+ shifts_found = yes
+ break
+ }
+ }
+
+ # Decode the shifts.
+ if (shifts_found)
+ while (fscan (list, junk, xshift, junk, yshift, junk) == 5)
+ print (xshift, " ", yshift, >> shiftfile)
+ else
+ error (1, "No shifts were calculated.")
+
+ # Shift the images.
+ print ("\n# Shifting images:\n")
+ imshift (l_input, "@"//outfile, shifts_file=shiftfile,
+ interp_type=interp_type, boundary_type=boundary_type,
+ constant=constant)
+
+ # Trim the images.
+ if (trimimages) {
+
+ # Check for vignetting.
+ trim_found = no
+ while (fscanf (list, "%s = [%d:%d,%d:%d]", line, x1, x2,
+ y1, y2) != EOF) {
+ tmp = substr (line, 2, 5)
+ if (tmp == "Vign") {
+ print ("Images not trimmed ! Vignetting is present.")
+ trim_found = no
+ break
+ } else if (tmp == "Trim") {
+ trim_found = yes
+ break
+ }
+ }
+
+ # Trim the images.
+ if (!trim_found) {
+ print ("Images not trimmed ! Trim section is undefined.")
+ } else {
+
+ # Correct for boundary extension "contamination".
+ if (interp_type == "poly3") {
+ x1 += 1; x2 -= 1; y1 += 1; y2 -= 1
+ } else if (interp_type == "poly5" ||
+ interp_type == "spline3") {
+ x1 += 2; x2 -= 2; y1 += 2; y2 -= 2
+ }
+
+ if (1 <= x1 && x1 <= x2 && 1 <= y1 && y1 <= y2) {
+ trimsect = "["//x1//":"//x2//","//y1//":"//y2//"]"
+
+ list = outfile; delete (tmpfile, ver-, >& "dev$null")
+ while (fscan (list, tmp) != EOF)
+ print (tmp//trimsect, >> tmpfile)
+
+ print ("# Trimming images: corrected section = ",
+ trimsect)
+ imcopy ("@"//tmpfile, "@"//outfile, verbose-)
+
+ } else {
+ print ("Images not trimmed ! No overlap region.")
+ }
+ }
+ }
+ }
+
+ list = ""
+ delete (tmpfile, ver-, >& "dev$null")
+ delete (outfile, ver-, >& "dev$null")
+ delete (shiftfile, ver-, >& "dev$null")
+end