def registration( self, laser="640", grid_points_x=2, grid_points_y=3, registration_pattern="circles", ): x_coords = np.linspace(0, 768, grid_points_x + 2)[1:-1] y_coords = np.linspace(0, 1024, grid_points_y + 2)[1:-1] x_mesh, y_mesh = np.meshgrid(x_coords, y_coords) x_coords = np.ravel(x_mesh) y_coords = np.ravel(y_mesh) dmd_coordinates = np.stack((x_coords, y_coords), axis=1) camera_coordinates = np.zeros(dmd_coordinates.shape) for i in range(dmd_coordinates.shape[0]): x = int(dmd_coordinates[i, 0]) y = int(dmd_coordinates[i, 1]) if registration_pattern == "squares": mask = DMDRegistator.create_registration_image_touching_squares( x, y) else: mask = DMDRegistator.create_registration_image_circle(x, y) self.DMD.send_data_to_DMD(mask) self.DMD.start_projection() image = self.cam.SnapImage(0.01) plt.imsave( os.getcwd() + "/CoordinatesManager/Registration_Images/TouchingSquares/image_" + str(i) + ".png", image, ) camera_coordinates[ i, :] = readRegistrationImages.touchingCoordinateFinder( image, method="curvefit") self.DMD.stop_projection() print("DMD coordinates:") print(dmd_coordinates) print("Found camera coordinates:") print(camera_coordinates) self.DMD.free_memory() self.cam.Exit() transformation = CoordinateTransformations.polynomial2DFit( camera_coordinates, dmd_coordinates, order=1) print("Transformation found for x:") print(transformation[:, :, 0]) print("Transformation found for y:") print(transformation[:, :, 1]) return transformation
def get_transformation(self): order = self.transformation_order_spinbox.value() self.transformation = CoordinateTransformations.polynomial2DFit( np.asarray(self.img_coords), np.asarray(self.abs_coords), order) string_x = self.create_string_to_print(self.transformation[:, :, 0]) string_y = self.create_string_to_print(self.transformation[:, :, 1]) self.found_transformation_text.setText("for x:\n" + string_x + "\n for y:\n" + string_y)
def transform_coordinates(self, list_of_rois): new_list_of_rois = [] for roi in list_of_rois: new_list_of_rois.append( np.flip( CoordinateTransformations.transform( np.flip(roi), self.transform))) return new_list_of_rois
def transform_coordinates(self, list_of_rois): laser = self.transform_for_laser_menu.selectedItems()[0].text() new_list_of_rois = [] for roi in list_of_rois: new_list_of_rois.append( CoordinateTransformations.transform(roi, self.transform[laser])) return new_list_of_rois
def transform_coordinates(self, list_of_rois, for_which_laser): """ Receive a list of rois and targeted laser on which the DMD will be shined on, calculate the transformation. """ new_list_of_rois = [] for roi in list_of_rois: new_list_of_rois.append( CoordinateTransformations.transform( roi, self.transform[for_which_laser])) return new_list_of_rois
def registration(self, grid_points_x=3, grid_points_y=3): galvothread = DAQmission() readinchan = [] x_coords = np.linspace(-10, 10, grid_points_x + 2)[1:-1] y_coords = np.linspace(-10, 10, grid_points_y + 2)[1:-1] xy_mesh = np.reshape(np.meshgrid(x_coords, y_coords), (2, -1), order='F').transpose() galvo_coordinates = xy_mesh camera_coordinates = np.zeros((galvo_coordinates.shape)) for i in range(galvo_coordinates.shape[0]): galvothread.sendSingleAnalog('galvosx', galvo_coordinates[i, 0]) galvothread.sendSingleAnalog('galvosy', galvo_coordinates[i, 1]) time.sleep(1) image = self.cam.SnapImage(0.06) plt.imsave( os.getcwd() + '/CoordinatesManager/Registration_Images/2P/image_' + str(i) + '.png', image) camera_coordinates[i, :] = readRegistrationImages.gaussian_fitting( image) print('Galvo Coordinate') print(galvo_coordinates) print('Camera coordinates') print(camera_coordinates) del galvothread self.cam.Exit() transformation = CoordinateTransformations.polynomial2DFit( camera_coordinates, galvo_coordinates, order=1) print('Transformation found for x:') print(transformation[:, :, 0]) print('Transformation found for y:') print(transformation[:, :, 1]) return transformation
def transform_coordinates(self, list_of_rois): """ Given list of roi positions in camera image, transform into corrseponding voltage positions. Parameters ---------- list_of_rois : list DESCRIPTION. Returns ------- new_list_of_rois : TYPE DESCRIPTION. """ new_list_of_rois = [] for roi in list_of_rois: new_list_of_rois.append(np.flip(CoordinateTransformations.transform(np.flip(roi), self.transform))) return new_list_of_rois
def registration(self, grid_points_x=3, grid_points_y=3): """ By default, generate 9 galvo voltage coordinates from (-5,-5) to (5,5), take the camera images of these points, return a function matrix that transforms camera_coordinates into galvo_coordinates using polynomial transform. Parameters ---------- grid_points_x : TYPE, optional DESCRIPTION. The default is 3. grid_points_y : TYPE, optional DESCRIPTION. The default is 3. Returns ------- transformation : TYPE DESCRIPTION. """ galvothread = DAQmission() readinchan = [] x_coords = np.linspace(-10, 10, grid_points_x + 2)[1:-1] y_coords = np.linspace(-10, 10, grid_points_y + 2)[1:-1] xy_mesh = np.reshape(np.meshgrid(x_coords, y_coords), (2, -1), order='F').transpose() galvo_coordinates = xy_mesh camera_coordinates = np.zeros((galvo_coordinates.shape)) for i in range(galvo_coordinates.shape[0]): galvothread.sendSingleAnalog('galvosx', galvo_coordinates[i, 0]) galvothread.sendSingleAnalog('galvosy', galvo_coordinates[i, 1]) time.sleep(1) image = self.cam.SnapImage(0.06) plt.imsave( os.getcwd() + '/CoordinatesManager/Registration_Images/2P/image_' + str(i) + '.png', image) camera_coordinates[i, :] = readRegistrationImages.gaussian_fitting( image) print('Galvo Coordinate') print(galvo_coordinates) print('Camera coordinates') print(camera_coordinates) del galvothread self.cam.Exit() transformation_cam2galvo = CoordinateTransformations.polynomial2DFit( camera_coordinates, galvo_coordinates, order=1) transformation_galvo2cam = CoordinateTransformations.polynomial2DFit( galvo_coordinates, camera_coordinates, order=1) print('Transformation found for x:') print(transformation_cam2galvo[:, :, 0]) print('Transformation found for y:') print(transformation_cam2galvo[:, :, 1]) print('galvo2cam found for x:') print(transformation_galvo2cam[:, :, 0]) print('galvo2cam found for y:') print(transformation_galvo2cam[:, :, 1]) return transformation_cam2galvo