コード例 #1
0
def run_paikin_tal_driver(img_files, puzzle_type, piece_width):
    """
    Runs the Paikin and Tal image solver.

    Args:
        img_files ([str]): An array of one or more image file path(s).
        puzzle_type (Optional PuzzleType): Type of the puzzle to solve
        piece_width (Optional int): Width of a puzzle piece in pixels.
    """

    image_filenames = config.add_image_folder_path(img_files)

    # Print the names of the images being solved:
    logging.info("Standard Paikin & Tal Driver")
    puzzle_importer.log_puzzle_filenames(image_filenames)

    # When skipping placement, simply import the solved results.
    if SKIP_PLACEMENT:
        paikin_tal_solver = PaikinTalSolver.pickle_import_after_standard_run_placement(image_filenames, puzzle_type)
    else:
        paikin_tal_solver = run_paikin_tal_solver(image_filenames, puzzle_type, piece_width)

    # Get the results
    paikin_tal_solver.segment(color_segments=True, perform_segment_cleaning=True)
    (pieces_partitioned_by_puzzle_id, _) = paikin_tal_solver.get_solved_puzzles()

    timestamp = time.time()
    Puzzle.output_results_information_and_puzzles(
        PuzzleSolver.PaikinTal, image_filenames, paikin_tal_solver, pieces_partitioned_by_puzzle_id, timestamp
    )
コード例 #2
0
def run_multipuzzle_solver_driver(image_files, puzzle_type, piece_width):
    """
    Runs the multipuzzle solver on a set of images.

    Args:
        image_files (List[str]): List of puzzle file paths.
        puzzle_type (PuzzleType): Type of the puzzle to solve.
        piece_width (int): Puzzle piece width in number of pixels
    """

    image_filenames = config.add_image_folder_path(image_files)

    logging.info("Starting Multipuzzle Solver Driver.")
    puzzle_importer.log_puzzle_filenames(image_filenames)

    multipuzzle_solver = build_multipuzzle_solver(image_filenames, puzzle_type, piece_width)

    # Run the solver
    multipuzzle_solver.run()
コード例 #3
0
ファイル: multipuzzle_solver.py プロジェクト: ZaydH/Thesis
    def _build_similarity_matrix(self):
        """
        Creates the asymmetric overlap and segment similarity matrices for use in the hierarchical clustering.
        """

        logging.info("Reminder on the image files:")
        puzzle_importer.log_puzzle_filenames(self._image_filenames)

        # Build the similarity matrix.  Worst similarity is 0
        numb_segments = len(self._segments)
        self._asymmetric_overlap_matrix = np.full((numb_segments, numb_segments), fill_value=-1, dtype=np.float)

        # Calculate asymmetric overlap for each segment
        numb_pieces_in_each_segment = [segment.numb_pieces for segment in self._segments]
        for segment_i in xrange(0, numb_segments):

            # Iterate through all the stitching pieces in this segment and calculate the asymmetric overlap
            for stitching_piece_info in self._stitching_pieces[segment_i]:
                overlap = stitching_piece_info.calculate_overlap_coefficient(numb_pieces_in_each_segment)

                # Get the max overlap between pairs of segments
                for segment_j in xrange(0, numb_segments):

                    if segment_i == segment_j:
                        continue
                    # Update if the new value is greater
                    if self._asymmetric_overlap_matrix[segment_i, segment_j] < overlap[segment_j]:
                        self._asymmetric_overlap_matrix[segment_i, segment_j] = overlap[segment_j]
        MultiPuzzleSolver._log_numpy_matrix("Asymmetric Segment Overlap Matrix:", self._asymmetric_overlap_matrix)

        # Calculate the similarity matrix
        self._segment_similarity_matrix = np.full((numb_segments, numb_segments), fill_value=-1, dtype=np.float)
        for segment_i in xrange(0, numb_segments):
            for segment_j in xrange(segment_i + 1, numb_segments):
                similarity = self._asymmetric_overlap_matrix[segment_i, segment_j] \
                             + self._asymmetric_overlap_matrix[segment_j, segment_i]
                similarity /= 2
                self._segment_similarity_matrix[segment_i, segment_j] = similarity
        MultiPuzzleSolver._log_numpy_matrix("Segment Similarity Matrix", self._segment_similarity_matrix)

        if MultiPuzzleSolver._ALLOW_POST_SIMILARITY_MATRIX_CALCULATION_PICKLE_EXPORT:
            self._pickle_export_after_similarity_matrix_calculation()