def process_image( image_name: str, retina_path: Path, img_output_path: Path, img_transformed_output_path: Path, ): retina_img = open_colour_image(retina_path / image_name) contour = find_eye(retina_img) # Find bounding box. x, y, w, h = cv2.boundingRect(contour) # Crop around bounding box. retina_img = retina_img[y : y + h, x : x + w] # Pad to square. retina_img = pad_to_square(retina_img, w, h, [BLACK, BLACK, BLACK]) # Resize to 1280 x 1280. retina_img = cv2.resize(retina_img, (1280, 1280), interpolation=cv2.INTER_NEAREST) transformed_retina_img = transform(retina_img) new_name = change_suffix(image_name, ".png") write_image(retina_img, img_output_path / new_name) write_image(transformed_retina_img, img_transformed_output_path / new_name)
def process_image(i): path = df["path"].iloc[i] img = open_colour_image(path) img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) contour = find_eye(img) x, y, w, h = cv2.boundingRect(contour) img = img[y : y + h, x : x + w] img = pad_to_square(img, w, h, [BLACK, BLACK, BLACK]) img = cv2.resize(img, (512, 512)) scale = 512 img = cv2.addWeighted( img, 4, cv2.GaussianBlur(img, (0, 0), scale / 30), -4, 128 ) # Remove outer 10% boundary effects b = np.zeros(img.shape) b = cv2.circle( b, (img.shape[1] // 2, img.shape[0] // 2), int(scale * 0.9) // 2, (1, 1, 1), -1, 8, 0, ) img = img * b + 128 * (1 - b) img = np.transpose(img, (2, 0, 1)) grp_images[i, ...] = img[None]
def process_image( image_name: str, retina_path: Path, ex_path: Path, he_path: Path, ma_path: Path, se_path: Path, nv_path: Path, irma_path: Path, ex_label: np.ndarray, he_label: np.ndarray, ma_label: np.ndarray, se_label: np.ndarray, nv_label: np.ndarray, irma_label: np.ndarray, label_output_path: Path, inst_output_path: Path, img_transform_output_path: Path, od_file_path: str, colour: bool, ): retina_img = open_colour_image(retina_path / image_name) contour = find_eye(retina_img) ex_img = open_binary_mask(ex_path / image_name) he_img = open_binary_mask(he_path / image_name) ma_img = open_binary_mask(ma_path / image_name) se_img = open_binary_mask(se_path / image_name) nv_img = open_binary_mask(nv_path / image_name) irma_img = open_binary_mask(irma_path / image_name) mask = np.ones((1280, 1280), dtype="uint8") * WHITE inst = np.ones((1280, 1280), dtype="uint8") * WHITE fill_contours(mask, [contour], GRAY_CLASS["RETINA"]) draw_od(mask, inst, image_name, od_file_path) overlay_label(mask, ex_img, ex_label) overlay_label(mask, he_img, he_label) overlay_label(mask, ma_img, ma_label) overlay_label(mask, se_img, se_label) overlay_label(mask, nv_img, nv_label) overlay_label(mask, irma_img, irma_label) transformed_retina_img = transform(retina_img) if colour: mask = colour_labels_numpy(mask) write_image(mask, label_output_path / image_name) write_image(inst, inst_output_path / image_name) write_image(transformed_retina_img, img_transform_output_path / image_name)
def main(): parser = argparse.ArgumentParser() parser.add_argument( "name", type=str, ) opt = parser.parse_args() if opt.name == "copypaste": generated_retina_path = Path("results") / opt.name / "img" out_path = Path("results") / opt.name / "transformed" else: generated_retina_path = Path("results") / opt.name / "test" / "img" out_path = Path("results") / opt.name / "test" / "transformed" out_path.mkdir(parents=True, exist_ok=True) files = list(generated_retina_path.glob("**/*")) for path in tqdm(files): retina_img = open_colour_image(str(path)) transformed_retina_img = transform(retina_img) write_image(transformed_retina_img, out_path / path.name)
def main(): name = "od_transformed" out_dir = Path("data/eophtha/od") out_dir.mkdir(parents=True, exist_ok=True) model = load_binary_segmentation_model(name) root_path = Path("/vol/bitbucket/js6317/individual-project/data/e_optha") path_1 = root_path / "e_optha_MA" / "healthy" path_2 = root_path / "e_optha_MA" / "MA" path_3 = root_path / "e_optha_EX" / "EX" path_4 = root_path / "e_optha_EX" / "healthy" suffixes = [".JPG", ".jpg", ".PNG", ".png", ".JPEG", ".jpeg"] files_1 = [f for f in path_1.glob("**/*") if f.is_file() and f.suffix in suffixes] files_2 = [f for f in path_2.glob("**/*") if f.is_file() and f.suffix in suffixes] files_3 = [f for f in path_3.glob("**/*") if f.is_file() and f.suffix in suffixes] files_4 = [f for f in path_4.glob("**/*") if f.is_file() and f.suffix in suffixes] files = files_1 + files_2 + files_3 + files_4 for file in tqdm(files): img = open_colour_image(file) contour = find_eye(img) # Find bounding box. x, y, w, h = cv2.boundingRect(contour) # Crop around bounding box. img = img[y : y + h, x : x + w] # Pad to square. img = pad_to_square(img, w, h, [BLACK, BLACK, BLACK]) # Resize to 1280 x 1280. img = cv2.resize(img, (1280, 1280), interpolation=cv2.INTER_NEAREST) transformed_image = transform(img) predicted = predict_od(model, transformed_image) image_path = Path(*file.parts[-2:]) new_name = "_".join(image_path.parts) new_name = change_suffix(new_name, ".png") cv2.imwrite(f"data/eophtha/od/{new_name}", predicted * 255.0)
def process_image( retina_path: Path, ex_path: Path, ma_path: Path, od_path: Path, label_output_path: Path, instance_output_path: Path, img_output_path: Path, img_transformed_output_path: Path, colour: bool, ): retina_img = open_colour_image(retina_path) image_path = Path(*retina_path.parts[-2:]) height, width, _ = retina_img.shape img_size = (height, width) contour = find_eye(retina_img) ex_label = np.ones(img_size, dtype="uint8") * GRAY_CLASS["EX"] ma_label = np.ones(img_size, dtype="uint8") * GRAY_CLASS["MA"] ex_img = open_binary_mask(ex_path / change_suffix(str(image_path), f"_EX.png"), img_size=img_size) ma_img = open_binary_mask(ma_path / change_suffix(str(image_path), f".png"), img_size=img_size) mask = np.ones(img_size, dtype="uint8") * WHITE fill_contours(mask, [contour], GRAY_CLASS["RETINA"]) overlay_label(mask, ex_img, ex_label) overlay_label(mask, ma_img, ma_label) inst = np.ones(img_size, dtype="uint8") * WHITE # Find bounding box. x, y, w, h = cv2.boundingRect(contour) # Crop around bounding box. mask = mask[y:y + h, x:x + w] inst = inst[y:y + h, x:x + w] retina_img = retina_img[y:y + h, x:x + w] # Pad to square. mask = pad_to_square(mask, w, h, WHITE) inst = pad_to_square(inst, w, h, WHITE) retina_img = pad_to_square(retina_img, w, h, [BLACK, BLACK, BLACK]) # Resize to 1280 x 1280. mask = cv2.resize(mask, (1280, 1280), interpolation=cv2.INTER_NEAREST) inst = cv2.resize(inst, (1280, 1280), interpolation=cv2.INTER_NEAREST) retina_img = cv2.resize(retina_img, (1280, 1280), interpolation=cv2.INTER_NEAREST) transformed_retina_img = transform(retina_img) new_name = "_".join(image_path.parts) new_name = change_suffix(new_name, ".png") od_img = open_binary_mask(od_path / new_name) od_label = np.ones((1280, 1280), dtype="uint8") * GRAY_CLASS["OD"] overlay_label(mask, od_img, od_label) bg_label = np.ones((1280, 1280), dtype="uint8") * GRAY_CLASS["RETINA"] overlay_label(inst, od_img, bg_label) if colour: mask = colour_labels_numpy(mask) write_image(mask, label_output_path / new_name) write_image(inst, instance_output_path / new_name) write_image(retina_img, img_output_path / new_name) write_image(transformed_retina_img, img_transformed_output_path / new_name)
def process_image( image_name: str, retina_path: Path, ex_path: Path, he_path: Path, ma_path: Path, se_path: Path, od_path: Path, ex_label: np.ndarray, he_label: np.ndarray, ma_label: np.ndarray, se_label: np.ndarray, od_label: np.ndarray, bg_label: np.ndarray, label_output_path: Path, instance_output_path: Path, img_output_path: Path, img_transformed_output_path: Path, colour: bool, ): retina_img = open_colour_image(retina_path / image_name) contour = find_eye(retina_img) ex_img = open_binary_mask(ex_path / change_suffix(image_name, "_EX.tif")) he_img = open_binary_mask(he_path / change_suffix(image_name, "_HE.tif")) ma_img = open_binary_mask(ma_path / change_suffix(image_name, "_MA.tif")) se_img = open_binary_mask(se_path / change_suffix(image_name, "_SE.tif")) od_img = open_binary_mask(od_path / change_suffix(image_name, "_OD.tif")) mask = np.ones((2848, 4288), dtype="uint8") * WHITE fill_contours(mask, [contour], GRAY_CLASS["RETINA"]) overlay_label(mask, od_img, od_label) overlay_label(mask, ex_img, ex_label) overlay_label(mask, he_img, he_label) overlay_label(mask, ma_img, ma_label) overlay_label(mask, se_img, se_label) inst = np.ones((2848, 4288), dtype="uint8") * WHITE overlay_label(inst, od_img, bg_label) # Find bounding box. x, y, w, h = cv2.boundingRect(contour) # Crop around bounding box. mask = mask[y:y + h, x:x + w] inst = inst[y:y + h, x:x + w] retina_img = retina_img[y:y + h, x:x + w] # Pad to square. mask = pad_to_square(mask, w, h, WHITE) inst = pad_to_square(inst, w, h, WHITE) retina_img = pad_to_square(retina_img, w, h, [BLACK, BLACK, BLACK]) # Resize to 1280 x 1280. mask = cv2.resize(mask, (1280, 1280), interpolation=cv2.INTER_NEAREST) inst = cv2.resize(inst, (1280, 1280), interpolation=cv2.INTER_NEAREST) retina_img = cv2.resize(retina_img, (1280, 1280), interpolation=cv2.INTER_NEAREST) transformed_retina_img = transform(retina_img) new_name = change_suffix(image_name, ".png") if colour: mask = colour_labels_numpy(mask) write_image(mask, label_output_path / new_name) write_image(inst, instance_output_path / new_name) write_image(retina_img, img_output_path / new_name) write_image(transformed_retina_img, img_transformed_output_path / new_name)
def process_image( image_name: str, retina_path: Path, ex_path: Path, he_path: Path, ma_path: Path, se_path: Path, retina_mask: np.ndarray, retina_label: np.ndarray, ex_label: np.ndarray, he_label: np.ndarray, ma_label: np.ndarray, se_label: np.ndarray, label_output_path: Path, inst_output_path: Path, img_output_path: Path, img_transformed_output_path: Path, od_file_path: str, colour: bool, ): retina_img = open_colour_image(retina_path / image_name) contour = find_eye(retina_mask) ex_img = open_binary_mask(ex_path / image_name) he_img = open_binary_mask(he_path / image_name) ma_img = open_binary_mask(ma_path / image_name) se_img = open_binary_mask(se_path / image_name) img_size = (1152, 1500) mask = np.ones(img_size, dtype="uint8") * WHITE inst = np.ones(img_size, dtype="uint8") * WHITE thresh = int(MAX_VALUE * CONFIDENCE_THRESHOLD) overlay_label(mask, retina_mask, retina_label, thresh) draw_od(mask, inst, image_name, od_file_path) overlay_label(mask, ex_img, ex_label, thresh=thresh) overlay_label(mask, he_img, he_label, thresh=thresh) overlay_label(mask, ma_img, ma_label, thresh=thresh) overlay_label(mask, se_img, se_label, thresh=thresh) # Find bounding box. x, y, w, h = cv2.boundingRect(contour) # Crop around bounding box. mask = mask[y : y + h, x : x + w] inst = inst[y : y + h, x : x + w] retina_img = retina_img[y : y + h, x : x + w] # Pad to square. mask = pad_to_square(mask, w, h, WHITE) inst = pad_to_square(inst, w, h, WHITE) retina_img = pad_to_square(retina_img, w, h, [BLACK, BLACK, BLACK]) # Resize to 1280 x 1280. mask = cv2.resize(mask, (1280, 1280), interpolation=cv2.INTER_NEAREST) inst = cv2.resize(inst, (1280, 1280), interpolation=cv2.INTER_NEAREST) retina_img = cv2.resize(retina_img, (1280, 1280), interpolation=cv2.INTER_NEAREST) transformed_retina_img = transform(retina_img) if colour: mask = colour_labels_numpy(mask) write_image(mask, label_output_path / image_name) write_image(inst, inst_output_path / image_name) write_image(retina_img, img_output_path / image_name) write_image(transformed_retina_img, img_transformed_output_path / image_name)