Skip to content
Snippets Groups Projects
review_mu_map.py 4.34 KiB
Newer Older
  • Learn to ignore specific revisions
  • import pandas as pd
    
    
    HEADER_DISC_FIRST = "discard_first"
    HEADER_DISC_LAST = "discard_last"
    
    
    def discard_slices(row: pd.Series, μ_map: np.ndarray) -> np.ndarray:
        """
        Discard slices based on the flags in the row of th according table.
        The row is expected to contain the flags 'discard_first' and 'discard_last'.
    
        :param row: the row of meta configuration file of a dataset
        :param μ_map: the μ_map
        :return: the μ_map with according slices removed
        """
        _res = μ_map
    
        if row[HEADER_DISC_FIRST]:
            _res = _res[1:]
    
        if row[HEADER_DISC_LAST]:
            _res = _res[:-1]
    
        return _res
    
        import argparse
    
        import cv2 as cv
    
        from mu_map.data.datasets import MuMapDataset
        from mu_map.util import to_grayscale, COLOR_WHITE, COLOR_BLACK
    
    
        parser = argparse.ArgumentParser(
            description="review all μ-maps in a dataset for broken slices at the start or end",
            formatter_class=argparse.ArgumentDefaultsHelpFormatter,
        )
        parser.add_argument(
            "dataset_dir", type=str, help="directory containing the dataset"
        )
        parser.add_argument(
            "--view", action="store_true", help="only visualize the current state"
        )
        parser.add_argument(
            "--force",
            action="store_true",
            help="do not ask for permission to replace discard flags in the table",
        )
        args = parser.parse_args()
    
        dataset = MuMapDataset(dataset_dir=args.dataset_dir, discard_μ_map_slices=args.view)
    
        if (
            not args.view
            and not args.force
            and (
                (
                    HEADER_DISC_FIRST in dataset.table
                    and not (dataset.table[HEADER_DISC_FIRST] == False).all()
                )
                or (
                    HEADER_DISC_LAST in dataset.table
                    and not (dataset.table[HEADER_DISC_LAST] == False).all()
                )
            )
        ):
            print(
                f"This operation is going to set all discard_first and discard_last flags in {dataset.csv_file}. If you only want to see the current state use the --view flag."
            )
            _input = input("Are you okay with setting these flags to false? (y/n): ")
            if _input.lower() != "y":
                exit(0)
    
        if not args.view:
            dataset.table[HEADER_DISC_FIRST] = False
            dataset.table[HEADER_DISC_LAST] = False
    
        wname = "μ-map"
        cv.namedWindow(wname, cv.WINDOW_NORMAL)
        cv.resizeWindow(wname, 1600, 900)
        controls = "l = discard last, f = discard first, b = discard both, n = discard none"
    
        for i, (_, μ_map) in enumerate(dataset):
            slice_first = to_grayscale(μ_map[0])
            slice_last = to_grayscale(μ_map[-1])
    
            slice_first = cv.resize(slice_first, (512, 512), interpolation=cv.INTER_AREA)
            slice_last = cv.resize(slice_last, (512, 512), interpolation=cv.INTER_AREA)
    
    
            cv.putText(
                slice_first, "First", (0, 30), cv.FONT_HERSHEY_SIMPLEX, 1, COLOR_BLACK, 3
            )
            cv.putText(
                slice_first, "First", (0, 30), cv.FONT_HERSHEY_SIMPLEX, 1, COLOR_WHITE, 1
            )
    
            cv.putText(
                slice_last, "Last", (0, 30), cv.FONT_HERSHEY_SIMPLEX, 1, COLOR_BLACK, 3
            )
            cv.putText(
                slice_last, "Last", (0, 30), cv.FONT_HERSHEY_SIMPLEX, 1, COLOR_WHITE, 1
            )
    
    
            space = np.full((slice_first.shape[0], 10), 239, np.uint8)
    
            to_show = np.hstack((slice_first, space, slice_last))
            textposition = (0, to_show.shape[0] - 12)
            cv.putText(
    
                to_show,
                controls,
                textposition,
                cv.FONT_HERSHEY_SIMPLEX,
                0.75,
                COLOR_BLACK,
                3,
    
                to_show,
                controls,
                textposition,
                cv.FONT_HERSHEY_SIMPLEX,
                0.75,
                COLOR_WHITE,
                1,
    
            )
    
            cv.imshow(wname, to_show)
            key = cv.waitKey(0)
            if key == ord("q"):
                exit(0)
            elif key == ord("l"):
                dataset.table.loc[i, (HEADER_DISC_LAST)] = True
            elif key == ord("f"):
                dataset.table.loc[i, (HEADER_DISC_FIRST)] = True
            elif key == ord("b"):
                dataset.table.loc[i, (HEADER_DISC_LAST)] = True
                dataset.table.loc[i, (HEADER_DISC_FIRST)] = True
    
        if not args.view:
            dataset.table.to_csv(dataset.csv_file, index=False)