Pathovis/basic_preprocessing_steps
0
1from __future__ import annotations2 3# Clear logger to use tiatoolbox.logger4import logging5 6if logging.getLogger().hasHandlers():7 logging.getLogger().handlers.clear()8 9from pathlib import Path10 11import matplotlib as mpl12import matplotlib.pyplot as plt13import requests14import skimage.color15 16from tiatoolbox import data, logger17from tiatoolbox.tools import stainnorm18from tiatoolbox.wsicore import wsireader19from PIL import Image20import numpy as np21 22stain_normalization_wsi_examples = [['images/sample_wsi_small.svs']]23 24def normalize_stain(source_wsi_file, output):25 # create a file handler26 wsi_reader = wsireader.WSIReader.open(input_img=source_wsi_file.name)27 wsi_info = wsi_reader.info.as_dict()28 # we will print out each info line by line29 print(*list(wsi_info.items()), sep="\n") # noqa: T20130 wsi_thumb = wsi_reader.slide_thumbnail(resolution=1.25, units="power")31 sample = wsi_reader.read_region(32 location=[800, 1600],33 level=0,34 size=[800, 800], # in X, Y35 )36 target_image = data.stain_norm_target()37 method_name_list = ["Reinhard", "Ruifrok", "Macenko", "Vahadane"]38 plt.subplot(2, 3, 1)39 plt.imshow(sample)40 plt.title("Source Image")41 plt.axis("off")42 plt.subplot(2, 3, 4)43 plt.imshow(target_image)44 plt.title("Target Image")45 plt.axis("off")46 47 pos = [2, 3, 5, 6]48 for idx, method_name in enumerate(method_name_list):49 stain_normalizer = stainnorm.get_normalizer(method_name)50 stain_normalizer.fit(target_image)51 52 normed_sample = stain_normalizer.transform(sample.copy())53 plt.subplot(2, 3, pos[idx])54 plt.imshow(normed_sample)55 plt.title(method_name.capitalize())56 plt.axis("off")57 plt.tight_layout()58 # plt.show()59 img = plt.savefig('images/test.png')60 image = Image.open('images/test.png')61 numpy_array = np.array(image)62 return numpy_array