64 lines
2.9 KiB
Python
64 lines
2.9 KiB
Python
#!/usr/bin/env python3
|
|
#
|
|
# Test program to run ampcor with GPU
|
|
# For two GeoTiff images
|
|
#
|
|
|
|
import argparse
|
|
import numpy as np
|
|
from PyCuAmpcor import PyCuAmpcor
|
|
|
|
|
|
def main():
|
|
'''
|
|
main program
|
|
'''
|
|
|
|
objOffset = PyCuAmpcor() # create the processor
|
|
|
|
objOffset.algorithm = 0 # cross-correlation method 0=freq 1=time
|
|
objOffset.deviceID = 0 # GPU device id to be used
|
|
objOffset.nStreams = 2 # cudaStreams; multiple streams to overlap data transfer with gpu calculations
|
|
objOffset.referenceImageName = "reference.tif"
|
|
objOffset.referenceImageHeight = 16480 # RasterYSize
|
|
objOffset.referenceImageWidth = 17000 # RasterXSize
|
|
objOffset.secondaryImageName = "secondary.tif"
|
|
objOffset.secondaryImageHeight = 16480
|
|
objOffset.secondaryImageWidth = 17000
|
|
objOffset.windowSizeWidth = 64 # template window size
|
|
objOffset.windowSizeHeight = 64
|
|
objOffset.halfSearchRangeDown = 20 # search range
|
|
objOffset.halfSearchRangeAcross = 20
|
|
objOffset.derampMethod = 1 # deramping for complex signal, set to 1 for real images
|
|
|
|
objOffset.skipSampleDown = 128 # strides between windows
|
|
objOffset.skipSampleAcross = 64
|
|
# gpu processes several windows in one batch/Chunk
|
|
# total windows in Chunk = numberWindowDownInChunk*numberWindowAcrossInChunk
|
|
# the max number of windows depending on gpu memory and type
|
|
objOffset.numberWindowDownInChunk = 1
|
|
objOffset.numberWindowAcrossInChunk = 10
|
|
objOffset.corrSurfaceOverSamplingFactor = 8 # oversampling factor for correlation surface
|
|
objOffset.corrSurfaceZoomInWindow = 16 # area in correlation surface to be oversampled
|
|
objOffset.corrSufaceOverSamplingMethod = 1 # fft or sinc oversampler
|
|
objOffset.useMmap = 1 # default using memory map as buffer, if having troubles, set to 0
|
|
objOffset.mmapSize = 1 # mmap or buffer size used for transferring data from file to gpu, in GB
|
|
|
|
objOffset.numberWindowDown = 40 # number of windows to be processed
|
|
objOffset.numberWindowAcross = 100
|
|
# if to process the whole image; some math needs to be done
|
|
# margin = 0 # margins to be neglected
|
|
#objOffset.numberWindowDown = (objOffset.secondaryImageHeight - 2*margin - 2*objOffset.halfSearchRangeDown - objOffset.windowSizeHeight) // objOffset.skipSampleDown
|
|
#objOffset.numberWindowAcross = (objOffset.secondaryImageWidth - 2*margin - 2*objOffset.halfSearchRangeAcross - objOffset.windowSizeWidth) // objOffset.skipSampleAcross
|
|
|
|
objOffset.setupParams()
|
|
objOffset.referenceStartPixelDownStatic = objOffset.halfSearchRangeDown # starting pixel offset
|
|
objOffset.referenceStartPixelAcrossStatic = objOffset.halfSearchRangeDown
|
|
objOffset.setConstantGrossOffset(0, 0) # gross offset between reference and secondary images
|
|
objOffset.checkPixelInImageRange() # check whether there is something wrong with
|
|
objOffset.runAmpcor()
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|