Exemplo n.º 1
0
 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)
Exemplo n.º 2
0
    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()
Exemplo n.º 3
0
 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
Exemplo n.º 4
0
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
Exemplo n.º 5
0
 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])
Exemplo n.º 6
0
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
Exemplo n.º 7
0
 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
Exemplo n.º 8
0
    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()
Exemplo n.º 9
0
 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
Exemplo n.º 10
0
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()
Exemplo n.º 11
0
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()
Exemplo n.º 12
0
    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_())
Exemplo n.º 13
0
        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_())
Exemplo n.º 14
0
    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()