--- a +++ b/10x/batch_old.py @@ -0,0 +1,65 @@ +import os + +import numpy as np + +import skimage as ski +from skimage import io, filter, color, exposure, morphology, feature, measure, transform + +from sklearn.linear_model import BayesianRidge +from sklearn.mixture import GMM + +from scipy import spatial, ndimage, signal, stats + +import matplotlib.pyplot as plt + + + + +dirq = "data/" +files = [] +for i in os.listdir(dirq) : + if i.endswith(".jpg") : + files.append(dirq + i) + + +for f in files : + + image = exposure.equalize_adapthist(io.imread(f)) + + binary = filter.threshold_adaptive(exposure.adjust_sigmoid(image[:, :, 0], cutoff=0.4, gain = 30), 301).astype(bool) + clean = morphology.binary_closing(binary, morphology.disk(3)).astype(bool) + clean = morphology.remove_small_objects(clean, 200) + clean = morphology.remove_small_objects( (1-clean).astype(bool), 200) + + local_density = filter.gaussian_filter(clean, 61) + + ent = filter.gaussian_filter(filter.rank.entropy(local_density, morphology.disk(3)), 75) + + ent -= ent.min() + ent /= ent.max() + + local_density -= local_density.min() + local_density /= local_density.max() + + info = ent * (1 + local_density) + + bw = (info) > filter.threshold_otsu(info) + + + C = measure.find_contours(bw, 0.5) + centroid = [] + vals = [] + + for c in C : + centroid.append(np.linalg.norm([c[:, 1].mean() - bw.shape[1] / 2, c[:, 0].mean() - bw.shape[0] / 2])) + vals.append(local_density.T[c.astype(int)].sum()) + + cent = C[np.argmin(centroid / np.array(vals))] + + + fix, ax = plt.subplots() + plt.imshow(image) + ax.plot(cent[:, 1], cent[:, 0], lw=5, c="k", alpha = 0.7) + + plt.savefig(f.split("Sheep")[1]) + print ("Done " + f.split("Sheep")[1])