aboutsummaryrefslogtreecommitdiff
path: root/pkg/images/tv/imedit/epcol.x
diff options
context:
space:
mode:
authorJoseph Hunkeler <jhunkeler@gmail.com>2015-07-08 20:46:52 -0400
committerJoseph Hunkeler <jhunkeler@gmail.com>2015-07-08 20:46:52 -0400
commitfa080de7afc95aa1c19a6e6fc0e0708ced2eadc4 (patch)
treebdda434976bc09c864f2e4fa6f16ba1952b1e555 /pkg/images/tv/imedit/epcol.x
downloadiraf-linux-fa080de7afc95aa1c19a6e6fc0e0708ced2eadc4.tar.gz
Initial commit
Diffstat (limited to 'pkg/images/tv/imedit/epcol.x')
-rw-r--r--pkg/images/tv/imedit/epcol.x80
1 files changed, 80 insertions, 0 deletions
diff --git a/pkg/images/tv/imedit/epcol.x b/pkg/images/tv/imedit/epcol.x
new file mode 100644
index 00000000..e71d5e47
--- /dev/null
+++ b/pkg/images/tv/imedit/epcol.x
@@ -0,0 +1,80 @@
+include "epix.h"
+
+# EP_COL -- Replace aperture by column interpolation from background annulus.
+# The aperture is first centered. The interpolation is across columns
+# from the nearest pixel in the background annulus. Gaussian Noise may
+# be added.
+
+procedure ep_col (ep, ap, xa, ya, xb, yb)
+
+pointer ep # EPIX pointer
+int ap # Aperture type
+int xa, ya, xb, yb # Aperture coordinates
+
+int i, x1, x2, y1, y2
+pointer mask, gs
+
+begin
+ i = abs (EP_SEARCH(ep)) + EP_BUFFER(ep) + 1
+ x1 = min (xa, xb) - i
+ x2 = max (xa, xb) + i
+ y1 = min (ya, yb)
+ y2 = max (ya, yb)
+ call ep_gdata (ep, x1, x2, y1, y2)
+ if (EP_OUTDATA(ep) != NULL) {
+ call malloc (mask, EP_NPTS(ep), TY_INT)
+
+ call ep_search (ep, Memr[EP_OUTDATA(ep)], EP_NX(ep),
+ EP_NY(ep), ap, xa, ya, xb, yb)
+ call ep_mask (ep, mask, ap, xa, ya, xb, yb)
+ call ep_col1 (Memr[EP_OUTDATA(ep)], Memi[mask], EP_NX(ep),
+ EP_NY(ep))
+ if (!IS_INDEF (EP_SIGMA(ep)))
+ call ep_noise (EP_SIGMA(ep), Memr[EP_OUTDATA(ep)],
+ Memi[mask], Memr[EP_OUTDATA(ep)], Memr[EP_OUTDATA(ep)],
+ EP_NPTS(ep), gs)
+
+ call mfree (mask, TY_INT)
+ }
+end
+
+
+# EP_COL1 -- Do column interpolation.
+
+procedure ep_col1 (data, mask, nx, ny)
+
+real data[nx,ny] # Data subraster
+int mask[nx,ny] # Mask subraster
+int nx, ny # Number of points
+
+int i, j, xa, xb, xc, xd
+real a, b
+
+begin
+ do i = 1, ny {
+ for (xa=1; xa<=nx && mask[xa,i]!=1; xa=xa+1)
+ ;
+ if (xa > nx)
+ next
+ for (xb=nx; xb>xa && mask[xb,i]!=1; xb=xb-1)
+ ;
+ for (xc=xa; xc>=1 && mask[xc,i]!=2; xc=xc-1)
+ ;
+ for (xd=xb; xd<=nx && mask[xd,i]!=2; xd=xd+1)
+ ;
+ if (xc < 1 && xd > nx)
+ next
+ else if (xc < 1)
+ do j = xa, xb
+ data[j,i] = data[xd,i]
+ else if (xd > nx)
+ do j = xa, xb
+ data[j,i] = data[xc,i]
+ else {
+ a = data[xc,i]
+ b = (data[xd,i] - a) / (xd - xc)
+ do j = xa, xb
+ data[j,i] = a + b * (j - xc)
+ }
+ }
+end