ISCE_INSAR/components/isceobj/Util/cpxmag2rg/Cpxmag2rg.py

180 lines
6.1 KiB
Python
Executable File

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Copyright 2010 California Institute of Technology. ALL RIGHTS RESERVED.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# United States Government Sponsorship acknowledged. This software is subject to
# U.S. export control laws and regulations and has been classified as 'EAR99 NLR'
# (No [Export] License Required except when exporting to an embargoed country,
# end user, or in support of a prohibited end use). By downloading this software,
# the user agrees to comply with all applicable U.S. export laws and regulations.
# The user has the responsibility to obtain export licenses, or other export
# authority as may be required before exporting this software to any 'EAR99'
# embargoed foreign country or citizen of those countries.
#
# Author: Giangi Sacco
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
from __future__ import print_function
import sys
import os
import math
from iscesys.Component.Component import Component
from isceobj.Image.RgImageBase import RgImage
from iscesys.Compatibility import Compatibility
Compatibility.checkPythonVersion()
from isceobj.Util import cpxmag2rg
class Cpxmag2rg(Component):
def cpxmag2rg(self, image1=None, image2=None, imageOut=None):
if image1 is not None:
self.image1 = image1
if self.image1 is None:
raise ValueError("Error. First slc image not set.")
if image2 is not None:
self.image2 = image2
if self.image2 is None:
raise ValueError("Error. Second slc image not set.")
if imageOut is not None:
self.imageOut = imageOut
outImCreatedHere = False
if self.imageOut is None:
# allow to create the image output just by giving the name. we
# have all the info to do it
if not self.imageOutName:
raise ValueError(
"Error. Output image not set. Provide at least the name using the method setOutputImageName()."
)
self.imageOut = self.createOutputImage()
outImCreatedHere = True
self.image1Accessor = self.image1.getImagePointer()
self.image2Accessor = self.image2.getImagePointer()
self.imageOutAccessor = self.imageOut.getImagePointer()
self.fileLength = self.image1.getLength()
self.lineLength = max(self.image1.getWidth(), self.image2.getWidth())
self.setState()
cpxmag2rg.cpxmag2rg_Py(self.image1Accessor,
self.image2Accessor,
self.imageOutAccessor)
if outImCreatedHere:
self.finalizeOutputImage(self.imageOut)
self.imageOut.trueDataType = 'BANDED'
self.imageOut.numBands = 2
self.imageOut.bandScheme = 'BIP'
self.imageOut.bandDataType = ['REAL4','REAL4']
self.imageOut.bandDescription = ['','']
self.imageOut.width = self.lineLength
self.imageOut.length = self.fileLength
self.imageOut.renderHdr()
return None
def createOutputImage(self):
obj = RgImage()
accessMode = "write"
width = max(self.image1.getWidth(),self.image2.getWidth())
#obj.initLineAccessor(self.imageOutName,accessMode,byteOrder,dataType,tileHeight,width)
obj.setFilename(filename)
obj.setAccessMode(accessMode)
obj.setWidth(width)
obj.createImage()
return obj
def finalizeOutputImage(self,obj):
obj.finalizeImage()
return
def setState(self):
cpxmag2rg.setStdWriter_Py(int(self.stdWriter))
cpxmag2rg.setLineLength_Py(int(self.lineLength))
cpxmag2rg.setFileLength_Py(int(self.fileLength))
cpxmag2rg.setAcOffset_Py(int(self.acOffset))
cpxmag2rg.setDnOffset_Py(int(self.dnOffset))
return
def setOutputImageName(self,var):
self.imageOutName = var
def setFirstImage(self,var):
self.image1 = var
return
def setSecondImage(self,var):
self.image2 = var
return
def setOutputImage(self,var):
self.imageOut = var
return
def setAcOffset(self,var):
self.acOffset = int(var)
return
def setDnOffset(self,var):
self.dnOffset = int(var)
return
def __init__(self):
Component.__init__(self)
self.image1 = None
self.image2 = None
self.imageOut = None
self.image1Accessor = None
self.image2Accessor = None
self.imageOutAccessor = None
self.imageOutName = ''
self.lineLength = None
self.fileLength = None
self.acOffset = 0
self.dnOffset = 0
self.dictionaryOfVariables = { \
'OUTPUT_IMAGE_NAME' : ['self.imageOutName', 'str','optional'], \
'AC_OFFSET' : ['self.acOffset', 'int','optional'], \
'DN_OFFSET' : ['self.dnOffset', 'int','optional'] \
}
self.descriptionOfVariables = {}
self.mandatoryVariables = []
self.optionalVariables = []
typePos = 2
for key , val in self.dictionaryOfVariables.items():
if val[typePos] == 'mandatory':
self.mandatoryVariables.append(key)
elif val[typePos] == 'optional':
self.optionalVariables.append(key)
else:
print('Error. Variable can only be optional or mandatory')
raise Exception
return
pass