コード例 #1
0
    def run(self):
        # load spectrometer measurement
        spectrometer_reader = SpectrometerReader()
        spectrometer_msi = spectrometer_reader.read(self.input()[0].path)

        # the wavelengths recorded by the spectrometer
        spectrometer_wavelengths = spectrometer_msi.get_wavelengths()

        spectrometer_white = spectrometer_reader.read(
            os.path.join(sc.get_full_dir("DATA_FOLDER"),
                         "spectrometer_whitebalance",
                         "white_IL_1_OO_20ms.txt"))
        spectrometer_dark = spectrometer_reader.read(
            os.path.join(sc.get_full_dir("DATA_FOLDER"),
                         "spectrometer_whitebalance", "dark_1_OO_20ms.txt"))
        msimani.dark_correction(spectrometer_white, spectrometer_dark)
        white_interpolator = interp1d(spectrometer_white.get_wavelengths(),
                                      spectrometer_white.get_image(),
                                      bounds_error=False,
                                      fill_value=0.)
        white_interpolated = white_interpolator(spectrometer_wavelengths)

        camera_qe = pd.read_csv(self.input()[2].path)
        camera_qe_interpolator = interp1d(camera_qe["wavelengths"] * 10**-9,
                                          camera_qe["quantum efficiency"],
                                          bounds_error=False,
                                          fill_value=0.)
        camera_qe_interpolated = \
            camera_qe_interpolator(spectrometer_wavelengths)

        # camera batch creation:
        new_reflectances = []
        for band in self.input()[1]:
            df_filter = pd.read_csv(band.path)
            interpolator = interp1d(df_filter["wavelengths"],
                                    df_filter["reflectances"],
                                    assume_sorted=False,
                                    bounds_error=False)
            # use this to create new reflectances
            interpolated_filter = interpolator(spectrometer_wavelengths)
            # if a wavelength cannot be interpolated, set it to 0
            interpolated_filter = np.nan_to_num(interpolated_filter)
            # account for cameras quantum efficiency
            interpolated_filter *= camera_qe_interpolated * white_interpolated
            # normalize band response
            #normalize(interpolated_filter.reshape(1, -1), norm='l1', copy=False)
            folded_reflectance = np.dot(spectrometer_msi.get_image(),
                                        interpolated_filter)
            new_reflectances.append(folded_reflectance)
            plt.plot(interpolated_filter)
        new_reflectances = np.array(new_reflectances).T
        spectrometer_msi.set_image(
            new_reflectances, wavelengths=sc.other["RECORDED_WAVELENGTHS"])

        # write it
        nrrd_writer = NrrdWriter(spectrometer_msi)
        nrrd_writer.write(self.output().path)
コード例 #2
0
    def run(self):
        reader = SpectrometerReader()
        filter_transmission = reader.read(self.input().path)
        # filter high and low _wavelengths
        wavelengths = filter_transmission.get_wavelengths()
        fi_image = filter_transmission.get_image()
        fi_image[wavelengths < 450 * 10**-9] = 0.0
        fi_image[wavelengths > 720 * 10**-9] = 0.0
        # filter elements farther away than +- 30nm
        file_name = os.path.split(self.input_file)[1]
        name_to_float = float(os.path.splitext(file_name)[0])
        fi_image[wavelengths < (name_to_float - 30) * 10**-9] = 0.0
        fi_image[wavelengths > (name_to_float + 30) * 10**-9] = 0.0
        # elements < 0 are set to 0.
        fi_image[fi_image < 0.0] = 0.0

        # write it to a dataframe
        df = pd.DataFrame()
        df["wavelengths"] = wavelengths
        df["reflectances"] = fi_image
        df.to_csv(self.output().path, index=False)
コード例 #3
0
 def setUp(self):
     self.exampleFileName = "./msi/data/Transmission_15-49-35-978_filter700nm.txt"
     self.reader = SpectrometerReader()