Commit 9b3cbdda59472adfb88eb9c9737adf93cc6f87b3
1 parent
296aa37d
changed the name of the spectral library (to hyperspectral) and fixed some digital staining bugs
Showing
4 changed files
with
27 additions
and
13 deletions
Show diff stats
python/classify.py
@@ -12,7 +12,7 @@ import sklearn.metrics | @@ -12,7 +12,7 @@ import sklearn.metrics | ||
12 | import scipy | 12 | import scipy |
13 | import scipy.misc | 13 | import scipy.misc |
14 | import envi | 14 | import envi |
15 | -import spectral | 15 | +import hyperspectral |
16 | import random | 16 | import random |
17 | import progressbar | 17 | import progressbar |
18 | import matplotlib.pyplot as plt | 18 | import matplotlib.pyplot as plt |
@@ -177,7 +177,7 @@ def envi_batch_predict(E, C, batch=10000): | @@ -177,7 +177,7 @@ def envi_batch_predict(E, C, batch=10000): | ||
177 | else: | 177 | else: |
178 | Tv = numpy.concatenate((Tv, C.predict(Fv.transpose()).transpose()), 0) | 178 | Tv = numpy.concatenate((Tv, C.predict(Fv.transpose()).transpose()), 0) |
179 | tempmask = E.batchmask() | 179 | tempmask = E.batchmask() |
180 | - Lv = spectral.unsift2(Tv, tempmask) | 180 | + Lv = hyperspectral.unsift2(Tv, tempmask) |
181 | Cv = label2class(Lv.squeeze(), background=0) | 181 | Cv = label2class(Lv.squeeze(), background=0) |
182 | RGB = class2color(Cv) | 182 | RGB = class2color(Cv) |
183 | plt.imshow(RGB) | 183 | plt.imshow(RGB) |
python/digitalstain.py
@@ -5,7 +5,7 @@ Created on Tue Jul 25 16:28:37 2017 | @@ -5,7 +5,7 @@ Created on Tue Jul 25 16:28:37 2017 | ||
5 | @author: david | 5 | @author: david |
6 | """ | 6 | """ |
7 | 7 | ||
8 | -import spectral | 8 | +import hyperspectral |
9 | import envi | 9 | import envi |
10 | import classify | 10 | import classify |
11 | import numpy | 11 | import numpy |
@@ -18,22 +18,36 @@ import glob | @@ -18,22 +18,36 @@ import glob | ||
18 | import matplotlib.pyplot as plt | 18 | import matplotlib.pyplot as plt |
19 | import random | 19 | import random |
20 | 20 | ||
21 | -def generate_stain(envifile, stainfile, N=5000, batch_size=10000, validate=True): | ||
22 | - E = envi.envi(envifile) | 21 | +def generate_stain(envifile, stainfile, maskfile="", trainmask="", N=5000, batch_size=10000, validate=True): |
22 | + if trainmask == "": | ||
23 | + E = envi.envi(envifile) | ||
24 | + else: | ||
25 | + mask = scipy.misc.imread(trainmask, flatten=True) | ||
26 | + E = envi.envi(envifile, mask=mask) | ||
27 | + | ||
23 | mask = classify.random_mask(E.mask, N) | 28 | mask = classify.random_mask(E.mask, N) |
29 | + scipy.misc.imsave("random.bmp", mask) | ||
24 | 30 | ||
25 | Ft = E.loadmask(mask).transpose() | 31 | Ft = E.loadmask(mask).transpose() |
26 | 32 | ||
27 | stain = numpy.rollaxis(scipy.misc.imread(stainfile), 2) | 33 | stain = numpy.rollaxis(scipy.misc.imread(stainfile), 2) |
28 | - Tt = spectral.sift2(stain, mask).transpose() | 34 | + Tt = hyperspectral.sift2(stain, mask).transpose() |
29 | 35 | ||
36 | + print("Training MLPRegressor...") | ||
30 | CLASS = sklearn.neural_network.MLPRegressor(solver='lbfgs', alpha=1e-5, hidden_layer_sizes=(), random_state=1, verbose=True) | 37 | CLASS = sklearn.neural_network.MLPRegressor(solver='lbfgs', alpha=1e-5, hidden_layer_sizes=(), random_state=1, verbose=True) |
31 | CLASS.fit(Ft, Tt) | 38 | CLASS.fit(Ft, Tt) |
32 | 39 | ||
33 | if validate == False: | 40 | if validate == False: |
34 | return CLASS | 41 | return CLASS |
35 | 42 | ||
36 | - plt.ion() | 43 | + print("Validating Stain...") |
44 | + plt.ion() | ||
45 | + if not maskfile == "": | ||
46 | + E.close() #close the ENVI file | ||
47 | + mask = scipy.misc.imread(maskfile, flatten=True) | ||
48 | + print(numpy.count_nonzero(mask)) | ||
49 | + E = envi.envi(envifile, mask=mask) | ||
50 | + | ||
37 | Fv = E.loadbatch(batch_size) #load the first batch | 51 | Fv = E.loadbatch(batch_size) #load the first batch |
38 | n = 0 | 52 | n = 0 |
39 | while not Fv == []: #loop until an empty batch is returned | 53 | while not Fv == []: #loop until an empty batch is returned |
@@ -41,7 +55,7 @@ def generate_stain(envifile, stainfile, N=5000, batch_size=10000, validate=True) | @@ -41,7 +55,7 @@ def generate_stain(envifile, stainfile, N=5000, batch_size=10000, validate=True) | ||
41 | Tv = CLASS.predict(Fv.transpose()).transpose() | 55 | Tv = CLASS.predict(Fv.transpose()).transpose() |
42 | else: | 56 | else: |
43 | Tv = numpy.append(Tv, CLASS.predict(Fv.transpose()).transpose(), 1) #append the predicted labels from this batch to those of previous batches | 57 | 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 | 58 | + COLORS = hyperspectral.unsift2(Tv, E.batchmask()) #convert the matrix of class labels to a 2D array |
45 | RGB = numpy.rollaxis(COLORS, 0, 3).astype(numpy.ubyte) | 59 | RGB = numpy.rollaxis(COLORS, 0, 3).astype(numpy.ubyte) |
46 | plt.imshow(RGB) #display it | 60 | plt.imshow(RGB) #display it |
47 | plt.pause(0.05) | 61 | plt.pause(0.05) |
python/envi.py
@@ -100,11 +100,11 @@ class envi_header: | @@ -100,11 +100,11 @@ class envi_header: | ||
100 | #t = map(str.strip, t) #strip all of the tokens in the token list | 100 | #t = map(str.strip, t) #strip all of the tokens in the token list |
101 | 101 | ||
102 | #handle the simple conditions | 102 | #handle the simple conditions |
103 | - if l[li].startswith("file type"): | ||
104 | - if not l[li].strip().endswith("ENVI Standard"): | ||
105 | - print("ERROR: unsupported ENVI file format: " + l[li].strip()) | ||
106 | - return | ||
107 | - elif l[li].startswith("samples"): | 103 | + #if l[li].startswith("file type"): |
104 | + # if not l[li].strip().endswith("ENVI Standard"): | ||
105 | + # print("ERROR: unsupported ENVI file format: " + l[li].strip()) | ||
106 | + # return | ||
107 | + if l[li].startswith("samples"): | ||
108 | self.samples = int(l[li].split()[-1]) | 108 | self.samples = int(l[li].split()[-1]) |
109 | elif l[li].startswith("lines"): | 109 | elif l[li].startswith("lines"): |
110 | self.lines = int(l[li].split()[-1]) | 110 | self.lines = int(l[li].split()[-1]) |
python/stim_spectral.py renamed to python/hyperspectral.py