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

Switch to unified view

a b/4x/reference/giftest.py
1
import os
2
3
import numpy as np
4
5
from scipy.ndimage import maximum_filter, minimum_filter, binary_fill_holes
6
7
import skimage as ski
8
from skimage import io, filter, color, exposure, morphology, feature, draw, measure, transform
9
10
#figsize(16, 10)
11
12
l = os.listdir("../data")
13
for f in l :
14
    if not f.endswith(".jpg") :
15
        l.remove(f)
16
17
18
qstain = np.array([[.26451728, .5205347, .81183386], [.9199094, .29797825, .25489032], [.28947765, .80015373, .5253158]])
19
20
21
22
23
for im in l :
24
25
    print im
26
27
    A = transform.rescale(io.imread("../data/" + im), 0.25)
28
29
    deconv = ski.img_as_float(color.separate_stains(A, np.linalg.inv(qstain)))
30
31
32
33
34
35
36
    subveins1 = \
37
    morphology.remove_small_objects(
38
        filter.threshold_adaptive(
39
            filter.gaussian_filter(
40
                deconv[:, :, 2] / deconv[:, :, 0],
41
                11),
42
            250, offset = -0.13),
43
        60)
44
45
    subveins2 = \
46
    morphology.remove_small_objects(
47
        filter.threshold_adaptive(
48
            filter.gaussian_filter(
49
                    maximum_filter(
50
                    deconv[:, :, 2] / deconv[:, :, 0],
51
                    5),
52
                11),
53
            250, offset = -0.13),
54
        60)
55
56
    veins = \
57
    maximum_filter(
58
        morphology.remove_small_objects(
59
            binary_fill_holes(
60
                morphology.binary_closing(
61
                    np.logical_or(subveins1, subveins2),
62
                    morphology.disk(25)),
63
                ),
64
            250),
65
        27)
66
67
68
69
70
71
    
72
    inflammation = \
73
    maximum_filter(
74
        morphology.remove_small_objects(
75
            filter.threshold_adaptive(
76
                exposure.adjust_sigmoid(
77
                    filter.gaussian_filter(
78
                        exposure.equalize_adapthist(
79
                            exposure.rescale_intensity(
80
                                deconv[:, :, 1],
81
                                out_range = (0, 1)),
82
                            ntiles_y = 1),
83
                            5),
84
                    cutoff = 0.6),
85
                    75, offset = -0.12),
86
            250),
87
        29)
88
89
90
91
92
93
94
95
    # Labelled
96
    total = np.zeros_like(A)
97
    #total[:, :, 0] = blood
98
    total[:, :, 1] = veins
99
    total[:, :, 2] = inflammation
100
101
102
103
104
105
106
107
    io.imsave("__1.gif", A)
108
    io.imsave("__2.gif", total)
109
110
    os.system("gifsicle --delay=80 --loop __*.gif > %s.gif" % im)
111
112