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
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
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))
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
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
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
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
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]
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))
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))