tests.test_frames API documentation

# tests.test_frames

View Source

     1import os
     2
     3import cv2
     4
     5from csi_images import csi_frames, csi_tiles, csi_scans
     6
     7if os.environ.get("DEBIAN_FRONTEND") == "noninteractive":
     8    SHOW_PLOTS = False
     9else:
    10    # Change this to your preference for local testing, but commit as True
    11    SHOW_PLOTS = True
    12
    13
    14def test_getting_frames():
    15    scan = csi_scans.Scan.load_yaml("tests/data")
    16    tile = csi_tiles.Tile(scan, 100)
    17    frames = csi_frames.Frame.get_frames(tile)
    18    assert len(frames) == 4
    19    frames = csi_frames.Frame.get_all_frames(scan)
    20    assert len(frames) == scan.roi[0].tile_rows * scan.roi[0].tile_cols
    21    assert len(frames[0]) == 4
    22    frames = csi_frames.Frame.get_all_frames(scan, as_flat=False)
    23    assert len(frames) == scan.roi[0].tile_rows
    24    assert len(frames[0]) == scan.roi[0].tile_cols
    25    assert len(frames[0][0]) == 4
    26
    27
    28def test_checking_frames():
    29    scan = csi_scans.Scan.load_yaml("tests/data")
    30    tile = csi_tiles.Tile(scan, 100)
    31    frames = csi_frames.Frame.get_frames(tile)
    32    assert len(frames) == 4
    33    for frame in frames:
    34        assert frame.check_image()
    35    assert csi_frames.Frame.check_all_images(scan)
    36    # Manually set up a frame that shouldn't exist
    37    tile.x = 100
    38    for frame in csi_frames.Frame.get_frames(tile):
    39        assert not frame.check_image()
    40
    41
    42def test_make_rgb():
    43    scan = csi_scans.Scan.load_txt("tests/data")
    44    tile = csi_tiles.Tile(scan, 1000)
    45    frames = csi_frames.Frame.get_frames(tile)
    46
    47    if SHOW_PLOTS:
    48        for frame in frames:
    49            cv2.imshow("Frames from a tile", frame.get_image())
    50            cv2.waitKey(0)
    51        cv2.destroyAllWindows()
    52
    53    channel_indices = scan.get_channel_indices(["TRITC", "CY5", "DAPI"])
    54    channels = {
    55        channel_indices[0]: (1.0, 0.0, 0.0),
    56        channel_indices[1]: (0.0, 1.0, 0.0),
    57        channel_indices[2]: (0.0, 0.0, 1.0),
    58    }
    59    image = csi_frames.Frame.make_rgb_image(tile, channels)
    60    assert image.shape == (scan.tile_height_px, scan.tile_width_px, 3)
    61
    62    if SHOW_PLOTS:
    63        cv2.imshow("RGB tile", cv2.cvtColor(image, cv2.COLOR_RGB2BGR))
    64        cv2.waitKey(0)
    65        cv2.destroyAllWindows()
    66
    67    # Test with a white channel
    68    channel_indices = scan.get_channel_indices(["TRITC", "CY5", "DAPI", "AF488"])
    69    channels = {
    70        channel_indices[0]: (1.0, 0.0, 0.0),
    71        channel_indices[1]: (0.0, 1.0, 0.0),
    72        channel_indices[2]: (0.0, 0.0, 1.0),
    73        channel_indices[3]: (1.0, 1.0, 1.0),
    74    }
    75    image = csi_frames.Frame.make_rgb_image(tile, channels)
    76    assert image.shape == (scan.tile_height_px, scan.tile_width_px, 3)
    77
    78    if SHOW_PLOTS:
    79        cv2.imshow("RGBW tile", cv2.cvtColor(image, cv2.COLOR_RGB2BGR))
    80        cv2.waitKey(0)
    81        cv2.destroyAllWindows()

def test_getting_frames(): View Source

    15def test_getting_frames():
    16    scan = csi_scans.Scan.load_yaml("tests/data")
    17    tile = csi_tiles.Tile(scan, 100)
    18    frames = csi_frames.Frame.get_frames(tile)
    19    assert len(frames) == 4
    20    frames = csi_frames.Frame.get_all_frames(scan)
    21    assert len(frames) == scan.roi[0].tile_rows * scan.roi[0].tile_cols
    22    assert len(frames[0]) == 4
    23    frames = csi_frames.Frame.get_all_frames(scan, as_flat=False)
    24    assert len(frames) == scan.roi[0].tile_rows
    25    assert len(frames[0]) == scan.roi[0].tile_cols
    26    assert len(frames[0][0]) == 4

def test_checking_frames(): View Source

    29def test_checking_frames():
    30    scan = csi_scans.Scan.load_yaml("tests/data")
    31    tile = csi_tiles.Tile(scan, 100)
    32    frames = csi_frames.Frame.get_frames(tile)
    33    assert len(frames) == 4
    34    for frame in frames:
    35        assert frame.check_image()
    36    assert csi_frames.Frame.check_all_images(scan)
    37    # Manually set up a frame that shouldn't exist
    38    tile.x = 100
    39    for frame in csi_frames.Frame.get_frames(tile):
    40        assert not frame.check_image()

def test_make_rgb(): View Source

    43def test_make_rgb():
    44    scan = csi_scans.Scan.load_txt("tests/data")
    45    tile = csi_tiles.Tile(scan, 1000)
    46    frames = csi_frames.Frame.get_frames(tile)
    47
    48    if SHOW_PLOTS:
    49        for frame in frames:
    50            cv2.imshow("Frames from a tile", frame.get_image())
    51            cv2.waitKey(0)
    52        cv2.destroyAllWindows()
    53
    54    channel_indices = scan.get_channel_indices(["TRITC", "CY5", "DAPI"])
    55    channels = {
    56        channel_indices[0]: (1.0, 0.0, 0.0),
    57        channel_indices[1]: (0.0, 1.0, 0.0),
    58        channel_indices[2]: (0.0, 0.0, 1.0),
    59    }
    60    image = csi_frames.Frame.make_rgb_image(tile, channels)
    61    assert image.shape == (scan.tile_height_px, scan.tile_width_px, 3)
    62
    63    if SHOW_PLOTS:
    64        cv2.imshow("RGB tile", cv2.cvtColor(image, cv2.COLOR_RGB2BGR))
    65        cv2.waitKey(0)
    66        cv2.destroyAllWindows()
    67
    68    # Test with a white channel
    69    channel_indices = scan.get_channel_indices(["TRITC", "CY5", "DAPI", "AF488"])
    70    channels = {
    71        channel_indices[0]: (1.0, 0.0, 0.0),
    72        channel_indices[1]: (0.0, 1.0, 0.0),
    73        channel_indices[2]: (0.0, 0.0, 1.0),
    74        channel_indices[3]: (1.0, 1.0, 1.0),
    75    }
    76    image = csi_frames.Frame.make_rgb_image(tile, channels)
    77    assert image.shape == (scan.tile_height_px, scan.tile_width_px, 3)
    78
    79    if SHOW_PLOTS:
    80        cv2.imshow("RGBW tile", cv2.cvtColor(image, cv2.COLOR_RGB2BGR))
    81        cv2.waitKey(0)
    82        cv2.destroyAllWindows()