Commit ac5ae422226145edf277c89f7e6fb6c2c73b08da
1 parent
27fd135f
added digital staining functions
Showing
1 changed file
with
50 additions
and
0 deletions
Show diff stats
1 | +# -*- coding: utf-8 -*- | ||
2 | +""" | ||
3 | +Created on Tue Jul 25 16:28:37 2017 | ||
4 | + | ||
5 | +@author: david | ||
6 | +""" | ||
7 | + | ||
8 | +import spectral | ||
9 | +import envi | ||
10 | +import classify | ||
11 | +import numpy | ||
12 | +import scipy | ||
13 | +import scipy.misc | ||
14 | +import sklearn | ||
15 | +import sklearn.naive_bayes | ||
16 | +import sklearn.neural_network | ||
17 | +import glob | ||
18 | +import matplotlib.pyplot as plt | ||
19 | +import random | ||
20 | + | ||
21 | +def generate_stain(envifile, stainfile, N=5000, batch_size=10000, validate=True): | ||
22 | + E = envi.envi(envifile) | ||
23 | + mask = classify.random_mask(E.mask, N) | ||
24 | + | ||
25 | + Ft = E.loadmask(mask).transpose() | ||
26 | + | ||
27 | + stain = numpy.rollaxis(scipy.misc.imread(stainfile), 2) | ||
28 | + Tt = spectral.sift2(stain, mask).transpose() | ||
29 | + | ||
30 | + CLASS = sklearn.neural_network.MLPRegressor(solver='lbfgs', alpha=1e-5, hidden_layer_sizes=(), random_state=1, verbose=True) | ||
31 | + CLASS.fit(Ft, Tt) | ||
32 | + | ||
33 | + if validate == False: | ||
34 | + return CLASS | ||
35 | + | ||
36 | + plt.ion() | ||
37 | + Fv = E.loadbatch(batch_size) #load the first batch | ||
38 | + n = 0 | ||
39 | + while not Fv == []: #loop until an empty batch is returned | ||
40 | + if n == 0: | ||
41 | + Tv = CLASS.predict(Fv.transpose()).transpose() | ||
42 | + else: | ||
43 | + Tv = numpy.append(Tv, CLASS.predict(Fv.transpose()).transpose(), 1) #append the predicted labels from this batch to those of previous batches | ||
44 | + COLORS = spectral.unsift2(Tv, E.batchmask()) #convert the matrix of class labels to a 2D array | ||
45 | + RGB = numpy.rollaxis(COLORS, 0, 3).astype(numpy.ubyte) | ||
46 | + plt.imshow(RGB) #display it | ||
47 | + plt.pause(0.05) | ||
48 | + Fv = E.loadbatch(batch_size) #load the next batch | ||
49 | + n = n + 1 | ||
50 | + return CLASS, RGB |