def parse_label(filename, full=False): """ Wraps forking paths for attached and detached PDS3 labels. """ if filename.endswith('.fmt'): return pvl.load(filename) if not has_attached_label(filename): if os.path.exists(filename[:filename.rfind(".")] + ".LBL"): label = pvl.load(filename[:filename.rfind(".")] + ".LBL") elif os.path.exists(filename[:filename.rfind(".")] + ".lbl"): label = pvl.load(filename[:filename.rfind(".")] + ".lbl") elif os.path.exists(filename[:filename.rfind(".")] + ".xml"): # TODO: Make label data format consistent between PDS3 & 4 label = pds4_tools.read(filename[:filename.rfind(".")] + ".xml", quiet=True).label.to_dict() else: print("*** Unable to locate file label. ***") return None else: label = parse_attached_label(filename) # TODO: This ugly conditional exists entirely to deal with Cassini data # which all seem to be returning zero-value images, so maybe it's wrong! if (not full) and ("UNCOMPRESSED_FILE" in label.keys()): if "COMPRESSED_FILE" in label.keys(): if "ENCODING_TYPE" in label["COMPRESSED_FILE"].keys(): if label["COMPRESSED_FILE"][ "ENCODING_TYPE"] == "MSLMMM-COMPRESSED": return label return label["UNCOMPRESSED_FILE"] return label
def read_fits(filename, dim=0, quiet=True): """ Read a PDS FITS file into an array. Return the data _and_ the label. """ hdulist = pyfits.open(filename) data = hdulist[dim].data header = hdulist[dim].header hdulist.close() return ( data, pds4_tools.read(filename.replace(".fits", ".xml"), quiet=True).label.to_dict(), )
def readCurrentImage(self): img = self.__images[self.__current_image] if img['pds_data'] is None: # 读入pds label img['pds_data'] = pds4_tools.read('%s/%s' %(img['path'], img['filename'])) # 将图像数据提取出来 img['raw_data'] = np.asanyarray(img['pds_data'][0].data) print(img['raw_data'].shape, img['raw_data'].ndim) img['raw_data'] = img['raw_data'] / 1023 #10位的图像数据归一化 # de-bayer rgb_data = colour.cctf_encoding(colour_demosaicing.demosaicing_CFA_Bayer_bilinear(img['raw_data'], 'RGGB')) print(rgb_data.shape, rgb_data.ndim) img['rgb_data'] = rgb_data ## 直方图拉伸 #lower, upper = np.percentile(rgb_data, (0.2,99.8)) #print(lower, upper) #scale_data = exposure.rescale_intensity(rgb_data, in_range=(lower, upper)) return img
def __init__(self, filename): pointer_to_function = { "^IMAGE": read_image, "^IMAGE_HEADER": read_image_header, "^TELEMETRY_TABLE": read_telemetry_table, "^BAD_DATA_VALUES_HEADER": read_bad_data_values_header, "^LINE_PREFIX_TABLE": read_line_prefix_table, "^HISTOGRAM": read_histogram, "^TABLE": read_table, "^MEASUREMENT_TABLE": read_measurement_table, "^ENGINEERING_TABLE": read_engineering_table, "^SPECTRUM": read_spectrum, "^FILE_NAME": read_file_name, "^DESCRIPTION": read_description, "^ABDR_TABLE": read_abdr_table, "^ARRAY": read_array, "^VICAR_HEADER": read_vicar_header, "^VICAR_EXTENSION_HEADER": read_vicar_extension_header, "^HISTORY": read_history, "^SPECTRAL_QUBE": read_spectral_qube, "^SPACECRAFT_POINTING_MODE_DESC": read_spacecraft_pointing_mode_desc, "^ODL_HEADER": read_odl_header, "MSLMMM-COMPRESSED": read_mslmmm_compressed, "JP2": read_jp2, } # Try PDS4 options if os.path.exists(filename[:filename.rfind(".")] + ".xml"): if filename.endswith(".dat"): self.dat = read_dat_pds4(filename) self.label = pds4_tools.read(filename.replace( ".dat", ".xml")).label.to_dict() # print('DAT_PDS4',type(data)) else: # Try PDS3 options setattr(self, "LABEL", parse_label(filename, full=True)) label = parse_label(filename) try: pointers = [k for k in label.keys() if k[0] is "^"] except AttributeError: return try: if label["COMPRESSED_FILE"][ "ENCODING_TYPE"] == "MSLMMM-COMPRESSED": pointers += [label["COMPRESSED_FILE"]["ENCODING_TYPE"]] except: pass print(filename) if len(pointers): print("\t", pointers) for pointer in pointers: try: setattr( self, pointer[1:] if pointer.startswith("^") else pointer, pointer_to_function[pointer](filename), ) except KeyError: pass elif ".JP2" in filename: print("*** Do not yet suport JP2 images. ***") else: print("\t*** No pointers. ***")
#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Tue Jul 9 17:12:06 2019 @author: brandon """ import pds4_tools structures = pds4_tools.read( 'https://pds.nasa.gov/datastandards/schema/released/img/v1/PDS4_IMG_1B00_1610.xml' ) structures.read_in_log