PROGRAM AVRECTFY
c ***************************************************************
c * Registers AVIRIS images *
c * *
c * set band to -1 for Band Interleaved by Line (BIL) copy *
c * set band to band number to copy single band from BIL file *
c * band ignored when input file is a single band,fcb(13)=1 *
c * *
c * To change flightline array length, change lines: *
c * INTEGER*4 regbuf(1014,6544), maxsl=6144 + (2*offset), *
c * slpos(1014,6544), and pxpos(1014,6554) *
c * This size is set for 12 (512sl) AVIRIS Seg's now *
c * *
c * K. Eric Livo Sept. 1997 *
c ***************************************************************
INTEGER*4 inimg(256), outimg(256), pixoff(256), sloff(256)
INTEGER*4 offset, maxpix, maxsl, dnempty, curpix, cursl
INTEGER*2 inbuf(1014,6544), outbuf(8192)
INTEGER*2 pixbuf(8192), slbuf(8192)
DATA pixoff,sloff/3*0,2*1,251*0,3*0,2*1,251*0/
DATA inimg,outimg/3*0,2*1,251*0,3*0,2*1,251*0/
offset = 200
maxsl = 6144 + (2*offset)
maxpix = 614 + (2*offset)
dnempty=0
CALL REMLOG('=========== AVRECTFY ===========')
c inimg(1)=0 open read only (pc: to implement);
c inimg(1)=-1 open read/write
c open input (unregistered) image
c assuming single band input only at this point (No 0 0 0 -1)
inimg(1) = 0
write(*,*) 'Enter INPUT IMAGE FILENAME'
CALL DISKIO(0,10,inbuf,inimg)
IF(inimg(1).LT.0) CALL EXIT(3)
c open scanline offset image
sloff(1) = 0
write(*,*) 'Enter SCANLINE LOOKUP FILENAME'
CALL DISKIO(0,11,slbuf,sloff)
IF(sloff(1).LT.0) CALL EXIT(3)
c open pixel offset image
pixoff(1) = 0
write(*,*) 'Enter PIXEL LOOKUP FILENAME'
CALL DISKIO(0,12,pixbuf,pixoff)
IF(pixoff(1).LT.0) CALL EXIT(3)
c open rectified output image (using AVIRIS engineering data)
outimg(1)=inimg(25)
outimg(2)=sloff(2)
if(inimg(22).gt.1) then
outimg(13)=1
else
outimg(13)=inimg(13)
endif
CALL DISKIO(0,13,outbuf,outimg)
IF(outimg(1).LT.0) CALL EXIT(3)
C *****
c assuming pixel-offset image, and scanline-offset image
c are the same dimensions for now, just register single band inputs
c not testing for BIL either
C *****
c read input image
c not testing for, but assume single band for now
cursl = 1
do while (inimg(1).ge.0)
CALL DISKIO(9,10,inbuf(1,cursl),inimg)
c IF(inimg(1).EQ.-1) GOTO 2
IF(inimg(1).LT.-1) CALL EXIT(3)
CALL UNPACK(inbuf(1,cursl),inimg)
cursl = cursl + 1
enddo
c sloff(2)=max pixels in subset image
c sloff(3)=max scanlines in subset image
do 100, cursl=1,sloff(3)
c read scanline and pixel lookup images
CALL DISKIO(9,11,slbuf,sloff)
IF(sloff(1).EQ.-1) GOTO 999
IF(sloff(1).LT.-1) CALL EXIT(3)
CALL UNPACK(slbuf,sloff)
CALL DISKIO(9,12,pixbuf,pixoff)
IF(pixoff(1).EQ.-1) GOTO 999
IF(pixoff(1).LT.-1) CALL EXIT(3)
CALL UNPACK(pixbuf,pixoff)
c plot image DN using orig image and lookup images
do 110, curpix=1,sloff(2)
lookuppx = pixbuf(curpix)
lookupsl = slbuf(curpix)
if( (lookuppx.gt.0).and.
& (lookuppx.le.inimg(2)).and.
& (lookuppx.le.maxpix).and.
& (lookupsl.gt.0).and.
& (lookupsl.le.inimg(3)).and.
& (lookupsl.le.maxsl) ) then
outbuf(curpix) = inbuf(lookuppx,lookupsl)
else
outbuf(curpix) = dnempty
endif
110 enddo
c write rectified output
IF(outimg(25).EQ.8) CALL PACK(outbuf,outimg)
CALL DISKIO(10,13,outbuf,outimg)
IF(outimg(1).LT.0) CALL EXIT(4)
100 enddo
c close all files
999 CALL DISKIO(6,10,inbuf,inimg)
CALL DISKIO(6,11,slbuf,sloff)
CALL DISKIO(6,12,pixbuf,pixoff)
CALL DISKIO(6,13,outbuf,outimg)
STOP
END
U.S. Geological Survey,
a bureau of the U.S. Department of the Interior
This page URL= http://speclab.cr.usgs.gov/aviris.geom.software/avrectfy.f.html
This page is maintained by: Eric Livo elivo@speclab.cr.usgs.gov
Last modified December 16, 1998.