def _read_images(self): """Read diffraction patterns and save them within the object.""" #should I normalize images?? list_of_all_files = os.listdir(".") list_of_images = [ f for f in list_of_all_files if re.search("^image_[0-9]{4}.h5$", f) ] prefix = "." if len(list_of_images) == 0: # maybe this is an old run with images output in debug list_of_all_files = os.listdir("debug") list_of_images = [ f for f in list_of_all_files if re.search("^image_[0-9]{4}.h5$", f) ] prefix = "debug" if len(list_of_images) == 0: self.read_error.emit() self._number_of_images = len(list_of_images) for i in range(self._number_of_images): try: image, mask = sphelper.import_spimage( "%s/image_%.4d.h5" % (prefix, i), ['image', 'mask']) except IOError: print "{0} is bad".format(i) image = numpy.zeros(self._images[0].shape, dtype="float32") mask = numpy.zeros(self._images[0].shape, dtype="int32") self._images.append(image) self._masks.append(mask)
def create_main_frame(self, filename): self.main_frame = QtWidgets.QWidget() self.image = None self.image, self.image_center = sphelper.import_spimage( filename, ["image", "image_center"]) x_array = numpy.arange(self.image.shape[0]) - self.image_center[0] y_array = numpy.arange(self.image.shape[1]) - self.image_center[1] X_array, Y_array = numpy.meshgrid(x_array, y_array) X_array = numpy.transpose(X_array) Y_array = numpy.transpose(Y_array) self.r = numpy.sqrt(X_array**2 + Y_array**2) ft = numpy.fft.fft2(self.image) self.auto_unfiltered = numpy.fft.fftshift(abs(ft)) self.dpi = 100 self.fig = Figure((10.0, 10.0), dpi=self.dpi) self.canvas = FigureCanvasQTAgg(self.fig) self.canvas.setParent(self.main_frame) self.axes = self.fig.add_subplot(111) self.mpl_toolbar = NavigationToolbar2QT(self.canvas, self.main_frame) self.a_slider = QtWidgets.QSlider(QtCore.Qt.Vertical) self.a_slider.setMinimum(1) self.a_slider.setMaximum(300) self.a_slider.setValue(self.a) self.a_slider.setTracking(False) self.a_label = QtWidgets.QLabel("a = %g" % self.a) self.a_slider.sliderMoved.connect(self.a_changed) self.a_slider.valueChanged.connect(self.update_image) self.filter_box = QtWidgets.QCheckBox("Use filter") self.filter_box.stateChanged.connect(self.box_state_changed) vbox1 = QtWidgets.QVBoxLayout() vbox1.addWidget(self.canvas) vbox1.addWidget(self.mpl_toolbar) vbox2 = QtWidgets.QVBoxLayout() vbox2.addWidget(self.a_label) vbox2.addWidget(self.a_slider) vbox2.addWidget(self.filter_box) hbox = QtWidgets.QHBoxLayout() hbox.addLayout(vbox1) hbox.addLayout(vbox2) self.main_frame.setLayout(hbox) self.setCentralWidget(self.main_frame) self.update_image()
def get_mask(self, iteration): """Return the mask of the 3D model as an array for the requested iteration.""" try: if iteration >= 0: mask = sphelper.import_spimage( '%s_%.4d.h5' % (self._file_prefix, iteration), ['mask']) elif iteration == -1: mask = sphelper.import_spimage( '%s_init.h5' % (self._file_prefix), ['mask']) elif iteration == -2: mask = sphelper.import_spimage( '%s_final.h5' % (self._file_prefix), ['mask']) except IOError: self.read_error.emit() return if self._side != mask.shape[0]: self._side = mask.shape[0] self.properties_changed.emit() return mask
def read_image(image_file, mask): if mask: field = 'mask' else: field = 'image' try: img = sphelper.import_spimage(image_file, [field]) except IOError: raise IOError(f"{image_file} is not a readable h5 image.") return img
def get_image(self, index, reload_data=False): """Get image of certain index.""" if index >= self._number_of_images: raise ValueError("Image index out of range. %d is above %d" % (index, self._number_of_images)) if index in self._images.keys() and not reload_data: return abs(self._images[index]) self._images[index] = sphelper.import_spimage("image_%.4d.h5" % index, ["image"]) return abs(self._images[index])
def read_image(image_file, mask): if mask: field = 'mask' else: field = 'image' try: img = sphelper.import_spimage(image_file, [field]) except: raise IOError("%s is not a readable h5 image." % image_file) return img
def get_map(self, iteration): """Return the 3D model as an array for the requested iteration.""" try: if iteration >= 0: modelmap = sphelper.import_spimage( '%s_%.4d.h5' % (self._file_prefix, iteration), ['image']) elif iteration == -1: modelmap = sphelper.import_spimage( '%s_init.h5' % (self._file_prefix), ['image']) elif iteration == -2: modelmap = sphelper.import_spimage( '%s_final.h5' % (self._file_prefix), ['image']) except (IOError, KeyError): self.read_error.emit() if self._side: return numpy.zeros((self._side, ) * 3) else: return numpy.zeros((10, ) * 3) if self._side != modelmap.shape[0]: self._side = modelmap.shape[0] self.properties_changed.emit() return modelmap
def _create_main_frame(self, filename): self._main_frame = QtGui.QWidget() self._image = None try: self._image = sphelper.import_spimage(filename) except IOError: print("Must provide a file") exit(1) self._dpi = 100 self._fig = Figure((10.0, 10.0), dpi=self._dpi) self._fig.subplots_adjust(left=0., right=1., bottom=0., top=1.) self._canvas = FigureCanvasQTAgg(self._fig) self._canvas.setParent(self._main_frame) self._axes = self._fig.add_subplot(111) self._axes.set_xticks([]) self._axes.set_yticks([]) self._mpl_toolbar = NavigationToolbar2QT(self._canvas, self._main_frame) self._slider_length = 100 self._angle_slider = QtGui.QSlider(QtCore.Qt.Vertical) self._angle_slider.setMinimum(0) self._angle_slider.setMaximum(self._slider_length) self._angle_slider.setValue(self._angle) self._angle_slider.setTracking(True) self._angle_label = QtGui.QLabel( f"angle = {self._angle/numpy.pi*180.}") self._angle_label.setFixedWidth(100) self._angle_slider.sliderMoved.connect(self._angle_changed) vbox1 = QtGui.QVBoxLayout() vbox1.addWidget(self._canvas) vbox1.addWidget(self._mpl_toolbar) vbox2 = QtGui.QVBoxLayout() vbox2.addWidget(self._angle_label) vbox2.addWidget(self._angle_slider) hbox = QtGui.QHBoxLayout() hbox.addLayout(vbox1) hbox.addLayout(vbox2) self._main_frame.setLayout(hbox) self.setCentralWidget(self._main_frame) self._update_image()
def _read_image_and_mask(self, index): """Load the image and mask if they have not been viewed before.""" if index in self._images and index in self._masks: return prefix = "." try: image, mask = sphelper.import_spimage( os.path.join(prefix, "image_{0:04}.h5".format(index)), ["image", "mask"]) except IOError: print "Image {0} is bad".format(index) self._images[index] = numpy.zeros(self._images[0].shape, dtype="float64") self._masks[index] = numpy.zeros(self._images[0].shape, dtype="int32") return self._images[index] = image self._masks[index] = mask
def plot_image(in_file, function, plot_mask, plot_log, plot_shifted): # try: # #img = spimage.sp_image_read(in_file,0) image, mask = sphelper.import_spimage(in_file, ['image', 'mask']) # except: # raise TypeError("Error: %s is not a readable .h5 file\n" % in_file) plot_flags = ['abs','mask','phase','real','imag'] shift_flags = ['shift'] log_flags = ['log'] plot_flag = 0 shift_flag = 0 log_flag = 0 colormap = "jet" if function == "phase": colormap = "hsv" if plot_shifted: #img = spimage.sp_image_shift(img) image = pylab.fftshift(image) mask = pylab.fftshift(mask) def no_log(x): return x if plot_log: log_function = pylab.log else: log_function = no_log if plot_mask: plot_input = mask else: plot_input = image function_dict = {"abs" : abs, "phase" : pylab.angle, "real" : pylab.real, "imag" : pylab.imag} pylab.imshow(log_function(function_dict[function](plot_input)), cmap=colormap, origin="lower", interpolation="nearest") pylab.show()
def plot_image(in_file, function, plot_mask, plot_log, plot_shifted): image, mask = sphelper.import_spimage(in_file, ['image', 'mask']) colormap = "jet" if function == "phase": colormap = "hsv" if plot_shifted: image = numpy.fft.fftshift(image) mask = numpy.fft.fftshift(mask) def no_log(x): return x if plot_log: log_function = numpy.log else: log_function = no_log if plot_mask: plot_input = mask else: plot_input = image function_dict = { "abs": abs, "phase": numpy.angle, "real": numpy.real, "imag": numpy.imag } matplotlib.pyplot.imshow(log_function(function_dict[function](plot_input)), cmap=colormap, origin="lower", interpolation="nearest") matplotlib.pyplot.show()
def on_checkbox(self, state): print(f"checkbox: {state}") iterator = zip(self._synchronized_interactor_style, self._single_interactor_style, self._vtk_widget) if state: for synchronized_style, single_style, interactor in iterator: synchronized_style.SetInteractor(None) single_style.SetInteractor(interactor) else: for synchronized_style, single_style, interactor in iterator: single_style.SetInteractor(None) synchronized_style.SetInteractor(interactor) if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument("volume", nargs="+") args = parser.parse_args() volumes = [ sphelper.import_spimage(volume_file, ["image"]) for volume_file in args.volume ] app = QtWidgets.QApplication(["eke_plot_multiple_3d.py"]) program = MainWindow(volumes) program.show() program.initialize() sys.exit(app.exec_())
layout.addLayout(plot_layout) layout.addWidget(self._surface_slider) vtk_tools.synchronize_renderers(self._renderer) self._central_widget.setLayout(layout) self.setCentralWidget(self._central_widget) @staticmethod def _value_calculator(ratio): return ratio def initialize(self): for vtk_widget in self._vtk_widget: vtk_widget.Initialize() for renderer in self._renderer: renderer.Render() if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument("volume", nargs="+") args = parser.parse_args() volumes = [sphelper.import_spimage(volume_file, ["image"]) for volume_file in args.volume] app = QtGui.QApplication(["eke_plot_multiple_3d.py"]) program = MainWindow(volumes) program.show() program.initialize() sys.exit(app.exec_())
def _create_main_frame(self, filename): self._main_frame = QtGui.QWidget() self._image = None self._image = numpy.complex128(sphelper.import_spimage(filename)) self._image = crop_to_square(self._image) if self._crop is None: self._crop = min(self._image.shape) if self._crop > min(self._image.shape): self._image = embedd_image(self._image, pad=self._crop) else: self._image = embedd_image(self._image) self._image = embedd_image(self._image) self._x = numpy.fft.fftshift( (numpy.arange(self._image.shape[0]) - self._image.shape[0] / 2 + 0.5) / self._image.shape[0])[numpy.newaxis, :] self._y = numpy.fft.fftshift( (numpy.arange(self._image.shape[1]) - self._image.shape[1] / 2 + 0.5) / self._image.shape[1])[:, numpy.newaxis] self._dpi = 100 self._fig = Figure((10.0, 10.0), dpi=self._dpi) self._fig.subplots_adjust(left=0., right=1., bottom=0., top=1.) self._canvas = FigureCanvasQTAgg(self._fig) self._canvas.setParent(self._main_frame) self._axes = self._fig.add_subplot(111) self._axes.set_xticks([]) self._axes.set_yticks([]) self._mpl_toolbar = NavigationToolbar2QT(self._canvas, self._main_frame) self._slider_length = 1000 self._angle_slider = QtGui.QSlider(QtCore.Qt.Vertical) self._angle_slider.setMinimum(0) self._angle_slider.setMaximum(self._slider_length) self._angle_slider.setValue(self._angle / 360. * self._slider_length) self._angle_slider.setTracking(True) self._angle_slider.valueChanged.connect(self._angle_changed) self._angle_label = QtGui.QLabel( f"angle = {self._angle/numpy.pi*180.}") self._angle_label.setFixedWidth(100) self._split_slider = QtGui.QSlider(QtCore.Qt.Vertical) self._split_slider.setMinimum(0) self._split_slider.setMaximum(self._slider_length) self._split_slider.setValue(self._split / self._max_split * self._slider_length) self._split_slider.setTracking(True) self._split_slider.valueChanged.connect(self._split_changed) self._split_label = QtGui.QLabel("split = %g" % (self._split)) self._split_label.setFixedWidth(100) self._phase_slider = QtGui.QSlider(QtCore.Qt.Vertical) self._phase_slider.setMinimum(0) self._phase_slider.setMaximum(self._slider_length) self._phase_slider.setValue(self._phase / 360. * self._slider_length) self._phase_slider.setTracking(True) self._phase_slider.valueChanged.connect(self._phase_changed) self._phase_label = QtGui.QLabel( f"phase = {self._phase/numpy.pi*180.}") self._phase_label.setFixedWidth(100) vbox1 = QtGui.QVBoxLayout() vbox1.addWidget(self._canvas) vbox1.addWidget(self._mpl_toolbar) vbox2 = QtGui.QVBoxLayout() vbox2.addWidget(self._angle_label) vbox2.addWidget(self._angle_slider) vbox3 = QtGui.QVBoxLayout() vbox3.addWidget(self._split_label) vbox3.addWidget(self._split_slider) vbox4 = QtGui.QVBoxLayout() vbox4.addWidget(self._phase_label) vbox4.addWidget(self._phase_slider) hbox = QtGui.QHBoxLayout() hbox.addLayout(vbox1) hbox.addLayout(vbox2) hbox.addLayout(vbox3) hbox.addLayout(vbox4) self._main_frame.setLayout(hbox) self.setCentralWidget(self._main_frame) self._update_image()