Exemplo n.º 1
0
    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
Exemplo n.º 2
0
 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)
Exemplo n.º 3
0
    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
Exemplo n.º 4
0
    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
Exemplo n.º 5
0
    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
Exemplo n.º 6
0
    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
Exemplo n.º 7
0
    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
Exemplo n.º 8
0
    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