Exemple #1
0
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
Exemple #2
0
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
Exemple #4
0
    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. ***")
Exemple #5
0
#!/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