diff --git a/micasense/image.py b/micasense/image.py index 5bd08cad..78b373e4 100644 --- a/micasense/image.py +++ b/micasense/image.py @@ -68,12 +68,6 @@ def __init__(self, image_path, exiftool_obj=None): self.path = image_path self.meta = metadata.Metadata(self.path, exiftool_obj=exiftool_obj) - if self.meta.band_name() is None: - raise ValueError("Provided file path does not have a band name: {}".format(image_path)) - if self.meta.band_name().upper() != 'LWIR' and not self.meta.supports_radiometric_calibration(): - raise ValueError('Library requires images taken with RedEdge-(3/M/MX) camera firmware v2.1.0 or later. ' + - 'Upgrade your camera firmware to at least version 2.1.0 to use this library with RedEdge-(3/M/MX) cameras.') - self.utc_time = self.meta.utc_time() self.latitude, self.longitude, self.altitude = self.meta.position() self.location = (self.latitude, self.longitude, self.altitude) @@ -356,7 +350,7 @@ def plottable_vignette(self): def cv2_distortion_coeff(self): #dist_coeffs = np.array(k[0],k[1],p[0],p[1],k[2]]) - return np.array(self.distortion_parameters)[[0, 1, 3, 4, 2]] + return np.array(self.distortion_parameters)[[0, 1, 2, 3]] # values in pp are in [mm], rescale to pixels def principal_point_px(self): diff --git a/micasense/imageutils.py b/micasense/imageutils.py index 8ffef33f..c57f0fd7 100644 --- a/micasense/imageutils.py +++ b/micasense/imageutils.py @@ -158,7 +158,7 @@ def align(pair): print("Starting warp for level {} is:\n {}".format(level,warp_matrix)) try: - cc, warp_matrix = cv2.findTransformECC(grad1, grad2, warp_matrix, warp_mode, criteria, inputMask=None, gaussFiltSize=1) + cc, warp_matrix = cv2.findTransformECC(grad1, grad2, warp_matrix, warp_mode, criteria, None, 1) except TypeError: cc, warp_matrix = cv2.findTransformECC(grad1, grad2, warp_matrix, warp_mode, criteria) @@ -414,4 +414,4 @@ def map_points(pts, image_size, warpMatrix, distortion_coeffs, camera_matrix,war if cv2.__version__<='3.4.4': return new_pts[0] else: - return new_pts[:,0,:] \ No newline at end of file + return new_pts[:,0,:] diff --git a/micasense/metadata.py b/micasense/metadata.py index 5941bf24..d4838632 100644 --- a/micasense/metadata.py +++ b/micasense/metadata.py @@ -103,7 +103,7 @@ def dls_present(self): or self.get_item("XMP:DirectIrradiance is not None") is not None def supports_radiometric_calibration(self): - if(self.get_item('XMP:RadiometricCalibration')) is None: + if(self.get_item('XMP:CalibrationPicture') is None): return False return True @@ -184,7 +184,7 @@ def exposure(self): return exp def gain(self): - return self.get_item('EXIF:ISOSpeed')/100.0 + return self.get_item('EXIF:ISO')/100.0 def image_size(self): return self.get_item('EXIF:ImageWidth'), self.get_item('EXIF:ImageHeight') @@ -196,8 +196,9 @@ def bandwidth(self): return self.get_item('XMP:WavelengthFWHM') def radiometric_cal(self): - nelem = self.size('XMP:RadiometricCalibration') - return [float(self.get_item('XMP:RadiometricCalibration', i)) for i in range(nelem)] + nelem = self.size('XMP:CalibrationMeasurement') + print(self.get_item('XMP:CalibrationMeasurement', 0)) + return [float(self.get_item('XMP:CalibrationMeasurement', i)) for i in range(nelem)] def black_level(self): if self.get_item('EXIF:BlackLevel') is None: @@ -227,8 +228,8 @@ def bits_per_pixel(self): def vignette_center(self): ''' get the vignette center in X and Y image coordinates''' - nelem = self.size('XMP:VignettingCenter') - return [float(self.get_item('XMP:VignettingCenter', i)) for i in range(nelem)] + nelem = self.size('XMP:PrincipalPoint')#XMP:VignettingCenter + return [float(self.get_item('XMP:PrincipalPoint', i)) for i in range(nelem)] def vignette_polynomial(self): ''' get the radial vignette polynomial in the order it's defined in the metadata''' @@ -236,8 +237,8 @@ def vignette_polynomial(self): return [float(self.get_item('XMP:VignettingPolynomial', i)) for i in range(nelem)] def distortion_parameters(self): - nelem = self.size('XMP:PerspectiveDistortion') - return [float(self.get_item('XMP:PerspectiveDistortion', i)) for i in range(nelem)] + nelem = self.size('XMP:FisheyeAffineMatrix')#XMP:PerspectiveDistortion + return [float(self.get_item('XMP:FisheyeAffineMatrix', i)) for i in range(nelem)] def principal_point(self): return [float(item) for item in self.get_item('XMP:PrincipalPoint').split(',')] @@ -248,17 +249,12 @@ def focal_plane_resolution_px_per_mm(self): return fp_x_resolution, fp_y_resolution def focal_length_mm(self): - units = self.get_item('XMP:PerspectiveFocalLengthUnits') focal_length_mm = 0.0 - if units == 'mm': - focal_length_mm = float(self.get_item('XMP:PerspectiveFocalLength')) - else: - focal_length_px = float(self.get_item('XMP:PerspectiveFocalLength')) - focal_length_mm = focal_length_px / self.focal_plane_resolution_px_per_mm()[0] + focal_length_mm = float(self.get_item('EXIF:FocalLength')) return focal_length_mm def focal_length_35_mm_eq(self): - return float(self.get_item('Composite:FocalLength35efl')) + return float(self.get_item('EXIF:FocalLengthIn35mmFormat')) def __float_or_zero(self, str): if str is not None: