Example #1
0
 def find_axis_std(self, ctset, tmpdir, ax_range, p_width, search_row,
                   nviews):
     indir = self.make_inpaths(ctset[0], ctset[1])
     print indir[2]
     image = read_image(get_filenames(indir[2])[0])
     cmd =  'tofu lamino --absorptivity --fix-nan-and-inf --overall-angle 180'\
            ' --lamino-angle 90 --height 2'
     cmd += ' --darks {} --flats {} --projections {}'.\
                 format(indir[0], indir[1], enquote(indir[2]))
     cmd += ' --number {}'.format(nviews)
     cmd += ' --angle {:0.5f}'.format(np.radians(180.0 / float(nviews)))
     if ctset[1] == 4:
         cmd += ' --flats2 {}'.format(indir[3])
     out_pattern = os.path.join(tmpdir, "axis-search/slice")
     cmd += ' --output {}'.format(enquote(out_pattern))
     cmd += ' --x-region={},{},{}'.format(-p_width / 2, p_width / 2, 1)
     cmd += ' --y-region={},{},{}'.format(-p_width / 2, p_width / 2, 1)
     cmd += ' --y {} --height 2'.format(search_row)
     cmd += ' --z-parameter x-center'
     cmd += ' --region={}'.format(enquote(ax_range))
     cmd += ' --z 0'
     res = [float(num) for num in ax_range.split(',')]
     cmd += ' --axis {},{}'.format((res[0] + res[1]) / 2.,
                                   1.0)  #middle of ax search range?
     cmd += " --output-bytes-per-file 0"
     # cmd += ' --delete-slice-dir'
     print cmd
     os.system(cmd)
     points, maximum = evaluate_images_simp(out_pattern + '*.tif', "msag")
     return res[0] + res[2] * maximum
Example #2
0
 def _read_next_file(self):
     if self.index < len(self.filenames):
         self._image = read_image(self.filenames[self.index])
         self._image_index = 0
         self.index += 1
         if self._image.ndim == 2:
             # Make sure the image is 3D so that grab can be simpler
             self._image = self._image[np.newaxis, :]
     else:
         self._image = None
Example #3
0
def RR(mws, odir, fname):
    im = read_image(fname).astype(np.float32)
    N = im.shape[0]
    tmp = np.sum(im, 0) / N
    tmp = medf(tmp, (mws, ))
    tmp = np.array([
        tmp,
    ] * N)
    im -= tmp
    filt_sin_name = os.path.join(odir, os.path.split(fname)[1])
    write_tiff(filt_sin_name, (im).astype(np.float32))
Example #4
0
    def find_axis_corr(self, ctset, vcrop, y, height):
        indir = self.make_inpaths(ctset[0], ctset[1])
        """Use correlation to estimate center of rotation for tomography."""
        from scipy.signal import fftconvolve

        def flat_correct(flat, radio):
            nonzero = np.where(radio != 0)
            result = np.zeros_like(radio)
            result[nonzero] = flat[nonzero] / radio[nonzero]
            # log(1) = 0
            result[result <= 0] = 1

            return np.log(result)

        first = read_image(get_filenames(indir[2])[0]).astype(np.float)
        last = read_image(get_filenames(indir[2])[-1]).astype(np.float)

        dark = read_image(get_filenames(indir[0])[0]).astype(np.float)
        flat1 = read_image(get_filenames(indir[1])[-1]) - dark
        first = flat_correct(flat1, first - dark)
        if ctset[1] == 4:
            flat2 = read_image(get_filenames(indir[3])[-1]) - dark
            last = flat_correct(flat2, last - dark)
        else:
            last = flat_correct(flat1, last - dark)

        if vcrop:
            y_region = slice(y, min(y + height, first.shape[0]), 1)
            first = first[y_region, :]
            last = last[y_region, :]

        width = first.shape[1]
        first = first - first.mean()
        last = last - last.mean()

        conv = fftconvolve(first, last[::-1, :], mode='same')
        center = np.unravel_index(conv.argmax(), conv.shape)[1]

        return (width / 2.0 + center) / 2.0
Example #5
0
    def _grab_real(self):
        if self.index < len(self.filenames):
            image = read_image(self.filenames[self.index])

            y_region = self.roi_y0 + self.roi_height
            x_region = self.roi_x0 + self.roi_width

            result = image[self.roi_y0.magnitude:y_region.magnitude,
                           self.roi_x0.magnitude:x_region.magnitude]
            self.index += 1
        else:
            result = None

        return result
Example #6
0
    def _grab_real(self):
        if self.index < len(self.filenames):
            image = read_image(self.filenames[self.index])

            y_region = self.roi_y0 + self.roi_height
            x_region = self.roi_x0 + self.roi_width

            result = image[self.roi_y0.magnitude:y_region.magnitude,
                           self.roi_x0.magnitude:x_region.magnitude]
            self.index += 1
        else:
            result = None

        return result
Example #7
0
    def __init__(self, directory, reset_on_start=True):
        # Let users change the directory
        self.directory = directory
        super(FileCamera, self).__init__()

        self.index = 0
        self.reset_on_start = reset_on_start
        self.filenames = [os.path.join(directory, file_name) for file_name in
                          sorted(os.listdir(directory))]

        if not self.filenames:
            raise base.CameraError("No files found")

        image = read_image(self.filenames[0])
        self._roi_width = image.shape[1] * q.pixel
        self._roi_height = image.shape[0] * q.pixel
Example #8
0
    def __init__(self, directory, reset_on_start=True):
        # Let users change the directory
        self.directory = directory
        super(FileCamera, self).__init__()

        self.index = 0
        self.reset_on_start = reset_on_start
        self.filenames = [
            os.path.join(directory, file_name)
            for file_name in sorted(os.listdir(directory))
        ]

        if not self.filenames:
            raise base.CameraError("No files found")

        image = read_image(self.filenames[0])
        self._roi_width = image.shape[1] * q.pixel
        self._roi_height = image.shape[0] * q.pixel
Example #9
0
    def _grab_real(self):
        if self._recording is None:
            raise CameraError("Camera hasn't been in recording mode yet")

        if self._recording:
            if self.trigger_mode == FileCamera.TRIGGER_SOFTWARE:
                self._trigger.wait()
                self._trigger.clear()

            if self._get_index() == self._index:
                # Wait for the next frame if the readout is too fast
                time.sleep(1.0 / self.frame_rate)
            self._index = self._get_index()
        else:
            if self.trigger_mode == FileCamera.TRIGGER_AUTO:
                self._index += 1
            else:
                if self._trigger.is_set():
                    self._trigger.clear()
                else:
                    # Camera hasn't been triggered, don't return anything
                    return None
                self._index = self._get_index(self._trigger_time)

            if self._index > self._get_index(self._stop_time) or \
                    self._index >= len(self._files):
                return None

        image = read_image(self._files[self._index])
        if self.roi_height is None:
            y_region = image.shape[0]
        else:
            y_region = self.roi_y + self.roi_height

        if self.roi_width is None:
            x_region = image.shape[1]
        else:
            x_region = self.roi_x + self.roi_width

        return image[self.roi_y:y_region, self.roi_x:x_region]
Example #10
0
def RR_sort(mws, odir, fname):
    filt_sin_name = os.path.join(odir, os.path.split(fname)[1])
    write_tiff(
        filt_sin_name,
        remove_stripe_based_sorting(read_image(fname).astype(np.float32),
                                    mws).astype(np.float32))
Example #11
0
def RR_wide_sort(mws, mws2, snr, odir, fname):
    filt_sin_name = os.path.join(odir, os.path.split(fname)[1])
    im = read_image(fname).astype(np.float32)
    im = remove_large_stripe(im, snr, mws2)
    im = remove_stripe_based_sorting(im, mws)
    write_tiff(filt_sin_name, im.astype(np.float32))