Diff of /4x/reference/Rescaled.py [000000] .. [171cba]

Switch to unified view

a b/4x/reference/Rescaled.py
1
# -*- coding: utf-8 -*-
2
# <nbformat>3.0</nbformat>
3
4
# <codecell>
5
6
import os
7
8
import numpy as np
9
10
from scipy.ndimage import maximum_filter, minimum_filter, binary_fill_holes
11
12
import skimage as ski
13
from skimage import io, filter, color, exposure, morphology, feature, draw, measure, transform
14
15
figsize(16, 10)
16
17
# <codecell>
18
19
l = os.listdir("../data")
20
print l
21
qstain = np.array([[.26451728, .5205347, .81183386], [.9199094, .29797825, .25489032], [.28947765, .80015373, .5253158]])
22
23
# <codecell>
24
25
# Original image
26
A = transform.rescale(io.imread("../data/" + l[0]), 0.25)
27
io.imshow(A)
28
29
# <codecell>
30
31
# Colour Deconvolution
32
deconv = ski.img_as_float(color.separate_stains(A, np.linalg.inv(qstain)))
33
34
"""
35
io.imshow(exposure.equalize_adapthist(
36
          exposure.adjust_sigmoid(
37
            filter.gaussian_filter(
38
                exposure.rescale_intensity(
39
                    1-A[:, :, 2], 
40
                    out_range=(0, 1)), 
41
                4), 
42
            gain=7, cutoff=0.7)))
43
"""
44
45
#io.imshow(exposure.adjust_sigmoid(filter.gaussian_filter(exposure.equalize_adapthist(exposure.rescale_intensity(1 - A[:, :, 2], out_range=(0, 1)), ntiles_y=1), 3), cutoff=0.55))
46
47
48
49
# <codecell>
50
51
# Blood
52
53
"""
54
blood = \
55
morphology.remove_small_objects(
56
    morphology.binary_closing(
57
        morphology.remove_small_objects(
58
            filter.threshold_adaptive(
59
                exposure.adjust_sigmoid(
60
                    filter.gaussian_filter(
61
                    exposure.equalize_adapthist(
62
                        exposure.rescale_intensity(
63
                            1. - A[:, :, 2], 
64
                            out_range=(0, 1)), 
65
                        ntiles_y = 1),
66
                        3), 
67
                    cutoff=0.55),
68
                100, offset=-0.2),
69
            50),
70
        morphology.disk(20)).astype(bool),
71
    100)
72
73
io.imshow(blood)
74
print type(blood)
75
"""
76
77
# <codecell>
78
79
# Veins
80
81
veins = \
82
morphology.remove_small_objects(
83
    binary_fill_holes(
84
        morphology.binary_closing(
85
            morphology.remove_small_objects(      
86
                filter.threshold_adaptive(
87
                    filter.gaussian_filter(      
88
                        maximum_filter(
89
                            deconv[:, :, 2] / deconv[:, :, 0],
90
                            3),
91
                        7),
92
                    170, offset=-0.13),
93
                60),
94
            morphology.disk(29))
95
        ),
96
    250)
97
98
io.imshow(veins)
99
100
# <codecell>
101
102
io.imshow( \
103
          filter.gaussian_filter(      
104
                            maximum_filter(
105
                                exposure.rescale_intensity(
106
                                deconv[:, :, 2] / deconv[:, :, 0], out_range=(0,1)),
107
                                2),
108
                            11))
109
110
# <codecell>
111
112
# Inflammation
113
114
inflammation = \
115
morphology.binary_closing(
116
    morphology.remove_small_objects(
117
        filter.threshold_adaptive(
118
            exposure.adjust_sigmoid(
119
                filter.gaussian_filter(
120
                    exposure.equalize_adapthist(
121
                        exposure.rescale_intensity(
122
                            deconv[:, :, 1],
123
                            out_range = (0, 1)),
124
                        ntiles_y = 3),
125
                    5),
126
                cutoff = 0.6),
127
            50, offset = -0.1),
128
        150),
129
    morphology.disk(19))
130
131
132
133
"""
134
morphology.remove_small_objects(
135
    filter.threshold_adaptive(
136
        exposure.adjust_sigmoid(
137
            filter.gaussian_filter(
138
                exposure.rescale_intensity(
139
                    deconv[:, :, 1],
140
                    out_range = (0, 1)),
141
                25),
142
            gain = 12, cutoff = 0.32),
143
        501, offset = -0.1),
144
    4000)
145
"""
146
io.imshow(inflammation)
147
#dec = exposure.adjust_sigmoid(filter.gaussian_filter(exposure.equalize_adapthist(exposure.rescale_intensity(deconv[:, :, 1], out_range=(0, 1)), ntiles_y=3), 5), cutoff=0.6)
148
#io.imshow(filter.threshold_adaptive(dec, 50, offset=-0.1))
149
#io.imshow(filter.threshold_adaptive(exposure.adjust_sigmoid(filter.gaussian_filter(exposure.rescale_intensity(deconv[:, :, 1], out_range=(0, 1)), 19), gain=15, cutoff=0.4), 401))
150
151
# <codecell>
152
153
# Labelled
154
total = np.zeros_like(A)
155
#total[:, :, 0] = blood
156
total[:, :, 1] = veins
157
total[:, :, 2] = inflammation
158
159
io.imshow(total)
160
161
# <codecell>
162
163
# All regions of interest
164
165
#%timeit
166
167
"""
168
all = \
169
minimum_filter(
170
    maximum_filter(
171
        np.logical_or(np.logical_or(blood, veins), inflammation).astype(float),
172
        size = 101),
173
    size = 51)
174
"""
175
176
177
178
"""
179
morphology.binary_erosion(
180
    morphology.binary_dilation(
181
        np.logical_or(np.logical_or(blood, veins), inflammation),
182
        morphology.disk(31)),
183
    morphology.disk(21))
184
"""
185
186
#full = (np.logical_or(np.logical_or(blood, veins), inflammation))
187
188
#io.imshow(binary_fill_holes(minimum_filter(maximum_filter(full, size=51, footprint=morphology.diamond(31)), size=51)))
189
190
# <codecell>
191
192
#io.imshow(ski.img_as_float(A)*0.5 + full[:, :, newaxis]*0.5)
193
#io.imshow(morphology.binary_closing(full, morphology.disk(15)))
194
195
# <codecell>
196
197
io.imsave("__1.gif", A)
198
io.imsave("__2.gif", total)
199
#io.imsave("__2.gif", (morphology.binary_closing(full, morphology.disk(15))).astype(float))
200
201
# <codecell>
202
203
os.system("gifsicle --delay=80 --loop __*.gif > test.gif")
204
205
# <codecell>
206
207
print B.shape
208
print transform.rescale(B, 0.5).shape
209
210
# <codecell>
211
212