CoolFace
Apppublic

CouchPotato101/prostate_detection_backend

sourceHugging Facemitupdated 10mo agoView on Hugging Face
0likes
utils.py79 linesDownload Raw Back to past_code
1import numpy as np2import cv23import skimage.io4 5tile_size = 2566image_size = 2567n_tiles = 368 9 10def get_tiles(img, mode=0):11    result = []12    h, w, c = img.shape13 14    pad_h = (tile_size - h % tile_size) % tile_size + ((tile_size * mode) // 2)15    pad_w = (tile_size - w % tile_size) % tile_size + ((tile_size * mode) // 2)16 17    img2 = np.pad(img, [18        [pad_h // 2, pad_h - pad_h // 2],19        [pad_w // 2, pad_w - pad_w // 2],20        [0, 0]21    ], constant_values=255)22 23    img3 = img2.reshape(24        img2.shape[0] // tile_size,25        tile_size,26        img2.shape[1] // tile_size,27        tile_size,28        329    )30 31    img3 = img3.transpose(0, 2, 1, 3, 4).reshape(-1, tile_size, tile_size, 3)32 33    if len(img3) < n_tiles:34        img3 = np.pad(img3, [[0, n_tiles - len(img3)], [0, 0], [0, 0], [0, 0]], constant_values=255)35 36    idxs = np.argsort(img3.reshape(img3.shape[0], -1).sum(-1))[:n_tiles]37    img3 = img3[idxs]38 39    for i in range(len(img3)):40        result.append({'img': img3[i], 'idx': i})41 42    return result43 44 45def load_and_preprocess_image(path: str):46    multi_image = skimage.io.MultiImage(path)47 48    if len(multi_image) >= 2:49        image = multi_image[1]50    else:51        image = multi_image[0]52 53        if image.shape[0] > 2000:54            scale_factor = 1000 / image.shape[0]55            new_width = int(image.shape[1] * scale_factor)56            new_height = int(image.shape[0] * scale_factor)57            image = cv2.resize(image, (new_width, new_height))58 59    return image60 61 62def create_tiled(image):63    tiles = get_tiles(image)64 65    n_row_tiles = int(np.sqrt(n_tiles))66    tiled_image = np.zeros((image_size * n_row_tiles, image_size * n_row_tiles, 3))67 68    for h in range(n_row_tiles):69        for w in range(n_row_tiles):70            i = h * n_row_tiles + w71            this_img = tiles[i]['img']72 73            this_img = 255 - this_img  # invert74            h1 = h * image_size75            w1 = w * image_size76            tiled_image[h1:h1 + image_size, w1:w1 + image_size] = this_img77 78    return tiled_image79