def setUp(self): self.app = wx.App() data = numpy.zeros((2160, 2560), dtype=numpy.uint16) dataRGB = numpy.zeros((2160, 2560, 4)) metadata = { 'Hardware name': 'Andor ZYLA-5.5-USB3 (s/n: VSC-01959)', 'Exposure time': 0.3, 'Pixel size': (1.59604600574173e-07, 1.59604600574173e-07), 'Acquisition date': 1441361559.258568, 'Hardware version': "firmware: '14.9.16.0' (driver 3.10.30003.5)", 'Centre position': (-0.001203511795256, -0.000295338300158), 'Lens magnification': 40.0, 'Input wavelength range': (6.15e-07, 6.350000000000001e-07), 'Shear': -4.358492733391727e-16, 'Description': 'Filtered colour 1', 'Bits per pixel': 16, 'Binning': (1, 1), 'Pixel readout time': 1e-08, 'Gain': 1.1, 'Rotation': 6.279302551026012, 'Light power': 0.0, 'Display tint': (255, 0, 0), 'Output wavelength range': (6.990000000000001e-07, 7.01e-07) } image = model.DataArray(data, metadata) fluo_stream = stream.StaticFluoStream(metadata['Description'], image) fluo_stream_pj = stream.RGBSpatialProjection(fluo_stream) data = numpy.zeros((1024, 1024), dtype=numpy.uint16) dataRGB = numpy.zeros((1024, 1024, 4)) metadata = { 'Hardware name': 'pcie-6251', 'Description': 'Secondary electrons', 'Exposure time': 3e-06, 'Pixel size': (1e-6, 1e-6), 'Acquisition date': 1441361562.0, 'Hardware version': 'Unknown (driver 2.1-160-g17a59fb (driver ni_pcimio v0.7.76))', 'Centre position': (-0.001203511795256, -0.000295338300158), 'Lens magnification': 5000.0, 'Rotation': 0.0 } image = model.DataArray(data, metadata) # export FILENAME = u"test" + tiff.EXTENSIONS[0] tiff.export(FILENAME, image, pyramid=True) # read back acd = tiff.open_data(FILENAME) sem_stream = stream.StaticSEMStream(metadata['Description'], acd.content[0]) sem_stream_pj = stream.RGBSpatialProjection(sem_stream) sem_stream_pj.mpp.value = 1e-6 self.streams = [fluo_stream_pj, sem_stream_pj] self.min_res = (623, 432) # Wait for all the streams to get an RGB image time.sleep(0.5)
def align(self, dlg): ''' Executes the alignment. If the alignment is successful, the aligned stream is added to the main window. If not, an error message is shown. dlg (AlignmentAcquisitionDialog): The plugin dialog ''' crop = (self.crop_top.value, self.crop_bottom.value, self.crop_left.value, self.crop_right.value) flip = (self.flip_x.value, self.flip_y.value) tem_img = preprocess(self._nem_proj.raw[0], self.invert.value, flip, crop, self.blur.value, True) sem_raw = img.ensure2DImage(self._rem_proj.raw[0]) sem_img = preprocess(sem_raw, False, (False, False), (0, 0, 0, 0), self.blur_ref.value, True) try: tmat, _, _, _, _ = keypoint.FindTransform(tem_img, sem_img) # get the metadata corresponding to the transformation transf_md = get_img_transformation_md(tmat, tem_img, sem_img) logging.debug("Computed transformation metadata: %s", transf_md) except ValueError as ex: box = wx.MessageDialog(dlg, str(ex), "Failed to align images", wx.OK | wx.ICON_STOP) box.ShowModal() box.Destroy() return # Shear is really big => something is gone wrong if abs(transf_md[model.MD_SHEAR]) > 1: logging.warning( "Shear is %g, which means the alignment is probably wrong", transf_md[model.MD_SHEAR]) transf_md[model.MD_SHEAR] = 0 # Pixel size ratio is more than 2 ? => something is gone wrong # TODO: pixel size 100x bigger/smaller than the reference is also wrong pxs = transf_md[model.MD_PIXEL_SIZE] if not (0.5 <= pxs[0] / pxs[1] <= 2): logging.warning( "Pixel size is %s, which means the alignment is probably wrong", pxs) transf_md[model.MD_PIXEL_SIZE] = (pxs[0], pxs[0]) # The actual image inserted is not inverted and not blurred, but we still # want it flipped and cropped. raw = preprocess(self._nem_proj.raw[0], False, flip, crop, 0, False) raw.metadata.update(transf_md) # Add a new stream panel (removable) analysis_tab = self.main_app.main_data.getTabByName('analysis') aligned_stream = stream.StaticSEMStream( self._nem_proj.stream.name.value, raw) scont = analysis_tab.stream_bar_controller.addStream(aligned_stream, add_to_view=True) scont.stream_panel.show_remove_btn(True) # Finish by closing the window dlg.Close()
def setUp(self): self.app = wx.App() data = numpy.zeros((2160, 2560), dtype=numpy.uint16) dataRGB = numpy.zeros((2160, 2560, 4)) metadata = {'Hardware name': 'Andor ZYLA-5.5-USB3 (s/n: VSC-01959)', 'Exposure time': 0.3, 'Pixel size': (1.59604600574173e-07, 1.59604600574173e-07), 'Acquisition date': 1441361559.258568, 'Hardware version': "firmware: '14.9.16.0' (driver 3.10.30003.5)", 'Centre position': (-0.001203511795256, -0.000295338300158), 'Lens magnification': 40.0, 'Input wavelength range': (6.15e-07, 6.350000000000001e-07), 'Shear':-4.358492733391727e-16, 'Description': 'Filtered colour 1', 'Bits per pixel': 16, 'Binning': (1, 1), 'Pixel readout time': 1e-08, 'Gain': 1.1, 'Rotation': 6.279302551026012, 'Light power': 0.0, 'Display tint': (255, 0, 0), 'Output wavelength range': (6.990000000000001e-07, 7.01e-07)} image = model.DataArray(data, metadata) fluo_stream = stream.StaticFluoStream(metadata['Description'], image) #fluo_stream.image.value = model.DataArray(dataRGB, metadata) data = numpy.zeros((1024, 1024), dtype=numpy.uint16) dataRGB = numpy.zeros((1024, 1024, 4)) metadata = {'Hardware name': 'pcie-6251', 'Description': 'Secondary electrons', 'Exposure time': 3e-06, 'Pixel size': (5.9910982493639e-08, 6.0604642506361e-08), 'Acquisition date': 1441361562.0, 'Hardware version': 'Unknown (driver 2.1-160-g17a59fb (driver ni_pcimio v0.7.76))', 'Centre position': (-0.001203511795256, -0.000295338300158), 'Lens magnification': 5000.0, 'Rotation': 0.0, 'Shear': 0.003274715695854} image = model.DataArray(data, metadata) sem_stream = stream.StaticSEMStream(metadata['Description'], image) #sem_stream.image.value = model.DataArray(dataRGB, metadata) # create DataProjections for the streams fluo_stream_pj = stream.RGBSpatialProjection(fluo_stream) sem_stream_pj = stream.RGBSpatialProjection(sem_stream) self.streams = [fluo_stream_pj, sem_stream_pj] self.min_res = (623, 432) # Spectrum stream data = numpy.ones((251, 1, 1, 200, 300), dtype="uint16") data[:, 0, 0, :, 3] = range(200) data[:, 0, 0, :, 3] *= 3 data[:, 0, 0, 1, 3] = range(251) data[2, :, :, :, :] = range(300) data[200, 0, 0, 2] = range(300) wld = 433e-9 + numpy.array(range(data.shape[0])) * 0.1e-9 md = {model.MD_SW_VERSION: "1.0-test", model.MD_HW_NAME: "fake ccd", model.MD_DESCRIPTION: "Spectrum", model.MD_ACQ_DATE: time.time(), model.MD_BPP: 12, model.MD_PIXEL_SIZE: (2e-6, 2e-6), # m/px model.MD_POS: (-0.001203511795256, -0.000295338300158), # m model.MD_EXP_TIME: 0.2, # s model.MD_LENS_MAG: 60, # ratio model.MD_WL_LIST: wld, } spec_data = model.DataArray(data, md) self.spec_stream = stream.StaticSpectrumStream("test spec", spec_data) # Wait for all the streams to get an RGB image time.sleep(0.5)
def open_image(self, dlg): tab = self.main_app.main_data.getTabByName("analysis") tab_data = tab.tab_data_model fi = tab_data.acq_fileinfo.value if fi and fi.file_name: path, _ = os.path.split(fi.file_name) else: config = get_acqui_conf() path = config.last_path # Find the available formats (and corresponding extensions) formats_to_ext = dataio.get_available_formats(os.O_RDONLY) wildcards, formats = guiutil.formats_to_wildcards(formats_to_ext, include_all=True) dialog = wx.FileDialog(dlg, message="Choose a file to load", defaultDir=path, defaultFile="", style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST, wildcard=wildcards) # Show the dialog and check whether is was accepted or cancelled if dialog.ShowModal() != wx.ID_OK: return None # Detect the format to use filename = dialog.GetPath() data = udataio.open_acquisition(filename)[0] try: data = self._ensureGrayscale(data) except ValueError as ex: box = wx.MessageDialog(dlg, str(ex), "Failed to open image", wx.OK | wx.ICON_STOP) box.ShowModal() box.Destroy() return None self.crop_top.range = (0, data.shape[0] // 2) self.crop_bottom.range = (0, data.shape[0] // 2) self.crop_left.range = (0, data.shape[1] // 2) self.crop_right.range = (0, data.shape[1] // 2) data.metadata[model.MD_POS] = (0, 0) data.metadata[model.MD_PIXEL_SIZE] = (1e-9, 1e-9) basename = os.path.splitext(os.path.split(filename)[1])[0] return stream.StaticSEMStream(basename, data)