Diff of /utils/slide.py [000000] .. [4df946]

Switch to unified view

a b/utils/slide.py
1
"""
2
This class provides a unified interface decoding various slide formats.
3
Cancheng Liu
4
Email: liucancheng@thorough.ai
5
"""
6
import os.path
7
from openslide import OpenSlide
8
from utils import config
9
10
11
class Slide(object):
12
    def __init__(self, image_path):
13
        super(Slide, self).__init__()
14
        self.image_path = image_path.strip()
15
        self.image_file = os.path.basename(image_path)
16
        self.image_name, self.suffix = self.image_file.split('.')
17
        if not self.suffix in config.format_mapping.keys():
18
            raise Exception('Error: File format ' + self.suffix + ' is supported yet.')
19
        self._slide = OpenSlide(image_path)
20
        self._level_downsamples = self._slide.level_downsamples
21
        self._level_dimensions = self._slide.level_dimensions
22
        self.width, self.height = self._level_dimensions[0]
23
24
    @property
25
    def dimensions(self):
26
        return self._level_dimensions[0]
27
28
    @property
29
    def level_dimensions(self):
30
        return self._level_dimensions
31
32
    @property
33
    def level_downsamples(self):
34
        return self._level_downsamples
35
36
    def read_region(self, level, location, size):
37
        (x, y), (w, h) = location, size
38
        try:
39
            _ds = self._level_downsamples[level]
40
            patch = self._slide.read_region(
41
                level=level, location=(int(x * _ds), int(y * _ds)), size=size)
42
        except Exception:
43
            raise
44
        else:
45
            return patch
46
47
    def get_thumbnail(self):
48
        try:
49
            image = self._slide.read_region(
50
                location=(0, 0), level=0, size=(1000, 1000))
51
        except Exception:
52
            raise
53
        else:
54
            return image