From c9391bd7d7aa9cd60b42430ff30d6e09d966af14 Mon Sep 17 00:00:00 2001 From: juribeparada Date: Fri, 8 Mar 2019 19:07:41 -0300 Subject: [PATCH 1/3] Add covariance output for denseoffsets --- .../isceobj/StripmapProc/runDenseOffsets.py | 2 +- components/isceobj/TopsProc/TopsProc.py | 10 ++++ .../isceobj/TopsProc/runDenseOffsets.py | 2 + components/mroipac/ampcor/DenseAmpcor.py | 49 ++++++++++++++++++- 4 files changed, 61 insertions(+), 2 deletions(-) diff --git a/components/isceobj/StripmapProc/runDenseOffsets.py b/components/isceobj/StripmapProc/runDenseOffsets.py index 4887b85..eb27366 100644 --- a/components/isceobj/StripmapProc/runDenseOffsets.py +++ b/components/isceobj/StripmapProc/runDenseOffsets.py @@ -65,7 +65,7 @@ def estimateOffsetField(master, slave, denseOffsetFileName, objOffset.offsetImageName = denseOffsetFileName + '.bil' objOffset.snrImageName = denseOffsetFileName +'_snr.bil' - + objOffset.covImageName = denseOffsetFileName +'_cov.bil' objOffset.denseampcor(sar, sim) diff --git a/components/isceobj/TopsProc/TopsProc.py b/components/isceobj/TopsProc/TopsProc.py index 5f7778d..9e250e8 100644 --- a/components/isceobj/TopsProc/TopsProc.py +++ b/components/isceobj/TopsProc/TopsProc.py @@ -320,6 +320,14 @@ OFFSET_SNR_FILE = Component.Parameter( mandatory=False, doc='Filename for gross dense offsets SNR. Used in runDenseOffsets.') +OFFSET_COV_FILE = Component.Parameter( + 'covfile', + public_name='Offset covariance filename', + default='dense_offsets_cov.bil', + type=str, + mandatory=False, + doc='Filename for gross dense offsets covariance. Used in runDenseOffsets.') + FILT_OFFSET_OUTPUT_FILE = Component.Parameter( 'filt_offsetfile', public_name='Filtered offset filename', @@ -333,6 +341,7 @@ OFFSET_GEOCODE_LIST = Component.Parameter('off_geocode_list', public_name='offset geocode list', default = [OFFSET_OUTPUT_FILE, OFFSET_SNR_FILE, + OFFSET_COV_FILE, FILT_OFFSET_OUTPUT_FILE], container = list, type=str, @@ -385,6 +394,7 @@ class TopsProc(Component): OFFSET_WIDTH, OFFSET_OUTPUT_FILE, OFFSET_SNR_FILE, + OFFSET_COV_FILE, FILT_OFFSET_OUTPUT_FILE, OFFSET_GEOCODE_LIST) diff --git a/components/isceobj/TopsProc/runDenseOffsets.py b/components/isceobj/TopsProc/runDenseOffsets.py index ff288d3..f04b571 100644 --- a/components/isceobj/TopsProc/runDenseOffsets.py +++ b/components/isceobj/TopsProc/runDenseOffsets.py @@ -118,9 +118,11 @@ def runDenseOffsetsCPU(self): objOffset.offsetImageName = os.path.join(self._insar.mergedDirname, self._insar.offsetfile) objOffset.snrImageName = os.path.join(self._insar.mergedDirname, self._insar.snrfile) + objOffset.covImageName = os.path.join(self._insar.mergedDirname, self._insar.covfile) print('Output dense offsets file name: %s' % (objOffset.offsetImageName)) print('Output SNR file name: %s' % (objOffset.snrImageName)) + print('Output covariance file name: %s' % (objOffset.covImageName)) print('\n======================================') print('Running dense ampcor...') print('======================================\n') diff --git a/components/mroipac/ampcor/DenseAmpcor.py b/components/mroipac/ampcor/DenseAmpcor.py index f11c2d5..6b2936b 100755 --- a/components/mroipac/ampcor/DenseAmpcor.py +++ b/components/mroipac/ampcor/DenseAmpcor.py @@ -253,6 +253,13 @@ SNR_IMAGE_NAME = Component.Parameter('snrImageName', mandatory=False, doc = 'File name for output SNR') +COV_IMAGE_NAME = Component.Parameter('covImageName', + public_name = 'COV_IMAGE_NAME', + default = 'dense_ampcor_cov.bil', + type=str, + mandatory=False, + doc = 'File name for output covariance') + MARGIN = Component.Parameter('margin', public_name = 'MARGIN', default = 50, @@ -298,6 +305,7 @@ class DenseAmpcor(Component): BAND2, OFFSET_IMAGE_NAME, SNR_IMAGE_NAME, + COV_IMAGE_NAME, MARGIN, NUMBER_THREADS) @@ -374,10 +382,16 @@ class DenseAmpcor(Component): self.locationAcross = np.frombuffer(mp.Array('i', numlen).get_obj(), dtype='i') self.locationAcrossOffset = np.frombuffer(mp.Array('f', numlen).get_obj(), dtype='f') self.snr = np.frombuffer(mp.Array('f', numlen).get_obj(), dtype='f') + self.cov1 = np.frombuffer(mp.Array('f', numlen).get_obj(), dtype='f') + self.cov2 = np.frombuffer(mp.Array('f', numlen).get_obj(), dtype='f') + self.cov3 = np.frombuffer(mp.Array('f', numlen).get_obj(), dtype='f') self.locationDownOffset[:] = -10000.0 self.locationAcrossOffset[:] = -10000.0 self.snr[:] = 0.0 + self.cov1[:] = 999.0 + self.cov2[:] = 999.0 + self.cov3[:] = 999.0 ###run ampcor on parallel processes threads = [] @@ -422,6 +436,9 @@ class DenseAmpcor(Component): self.locationDownOffset *= self.scaling_factor self.locationAcrossOffset *= self.scaling_factor self.snr *= self.scaling_factor + self.cov1 *= self.scaling_factor + self.cov2 *= self.scaling_factor + self.cov3 *= self.scaling_factor self.write_slantrange_images() @@ -487,6 +504,9 @@ class DenseAmpcor(Component): self.locationAcross[firstind+i] = objAmpcor.locationAcross[j] self.locationAcrossOffset[firstind+i] = objAmpcor.locationAcrossOffset[j] self.snr[firstind+i] = objAmpcor.snrRet[j] + self.cov1[firstind+i] = objAmpcor.cov1Ret[j] + self.cov2[firstind+i] = objAmpcor.cov2Ret[j] + self.cov3[firstind+i] = objAmpcor.cov3Ret[j] j += 1 else: self.locationDown[firstind+i] = downInd @@ -494,6 +514,9 @@ class DenseAmpcor(Component): self.locationAcross[firstind+i] = acInd self.locationAcrossOffset[firstind+i] = -10000. self.snr[firstind+i] = 0. + self.cov1[firstind+i] = 999. + self.cov2[firstind+i] = 999. + self.cov3[firstind+i] = 999. return @@ -518,6 +541,14 @@ class DenseAmpcor(Component): if self.locationAcross.ndim == 1: self.locationAcross = self.locationAcross.reshape(-1,self.offsetCols) + if self.cov1.ndim == 1: + self.cov1 = self.cov1.reshape(-1,self.offsetCols) + + if self.cov2.ndim == 1: + self.cov2 = self.cov2.reshape(-1,self.offsetCols) + + if self.cov3.ndim == 1: + self.cov3 = self.cov3.reshape(-1,self.offsetCols) outdata = np.empty((2*self.offsetLines, self.offsetCols), dtype=np.float32) outdata[::2,:] = self.locationDownOffset @@ -544,7 +575,23 @@ class DenseAmpcor(Component): snrImg.setLength(self.offsetLines) snrImg.setAccessMode('read') snrImg.renderHdr() - + + ####Create covariance image + covdata = np.empty((3*self.offsetLines, self.offsetCols), dtype=np.float32) + covdata[::3,:] = self.cov1 + covdata[1::3,:] = self.cov2 + covdata[2::3,:] = self.cov3 + covdata.tofile(self.covImageName) + del covdata + covImg = isceobj.createImage() + covImg.setDataType('FLOAT') + covImg.setFilename(self.covImageName) + covImg.setBands(3) + covImg.scheme = 'BIL' + covImg.setWidth(self.offsetCols) + covImg.setLength(self.offsetLines) + covImg.setAccessMode('read') + covImg.renderHdr() def checkTypes(self): '''Check if the image datatypes are set.''' From 14a725eeca4e811ee2cc324394e6013e10322412 Mon Sep 17 00:00:00 2001 From: Andy CA6JAU Date: Fri, 8 Mar 2019 23:12:54 -0300 Subject: [PATCH 2/3] Remove scaling factor from covariance --- components/mroipac/ampcor/DenseAmpcor.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/components/mroipac/ampcor/DenseAmpcor.py b/components/mroipac/ampcor/DenseAmpcor.py index 6b2936b..b4b8d43 100755 --- a/components/mroipac/ampcor/DenseAmpcor.py +++ b/components/mroipac/ampcor/DenseAmpcor.py @@ -436,9 +436,6 @@ class DenseAmpcor(Component): self.locationDownOffset *= self.scaling_factor self.locationAcrossOffset *= self.scaling_factor self.snr *= self.scaling_factor - self.cov1 *= self.scaling_factor - self.cov2 *= self.scaling_factor - self.cov3 *= self.scaling_factor self.write_slantrange_images() From 9cb861c3d2d3ed8b5614d608686275700f5cfc13 Mon Sep 17 00:00:00 2001 From: Andy CA6JAU Date: Sat, 9 Mar 2019 00:04:35 -0300 Subject: [PATCH 3/3] Remove scaling factor for SNR (DenseAmpcor) --- components/mroipac/ampcor/DenseAmpcor.py | 1 - 1 file changed, 1 deletion(-) diff --git a/components/mroipac/ampcor/DenseAmpcor.py b/components/mroipac/ampcor/DenseAmpcor.py index b4b8d43..eb4202f 100755 --- a/components/mroipac/ampcor/DenseAmpcor.py +++ b/components/mroipac/ampcor/DenseAmpcor.py @@ -435,7 +435,6 @@ class DenseAmpcor(Component): #### Scale images (default is 1.0 to keep as pixel) self.locationDownOffset *= self.scaling_factor self.locationAcrossOffset *= self.scaling_factor - self.snr *= self.scaling_factor self.write_slantrange_images()