From: Henry Amrhein Date: Wed, 16 Nov 2016 01:11:45 +0000 (-0800) Subject: renamed file X-Git-Url: http://woldlab.caltech.edu/gitweb/?p=fishhook.git;a=commitdiff_plain;h=52ed75b8dba628a17f39abc5c37e26d5178ce4cf renamed file --- diff --git a/dots.py b/dots.py new file mode 100644 index 0000000..3a42aac --- /dev/null +++ b/dots.py @@ -0,0 +1,85 @@ + +import pandas as pd +import numpy as np +import libtiff +import skimage.exposure +import skimage.feature +import skimage.filters +import skimage.morphology + +def make_mask(zstack, nbins=32768): + thresh = skimage.filters.threshold_otsu(zstack, nbins=32768) + return zstack > thresh + +def build_blob_array(stack): + data = [[[False for i in range(len(stack[0][0]))] for j in range(len(stack[0]))] for k in range(len(stack))] + for im in range(len(stack))): #was stack + print "processing " + str(im) + yx = skimage.exposure.equalize_adapthist(stack[im], clip_limit=0.00025, nbins=32768) + + zmx = np.max(yx) + zmn = np.min(yx) + yx = (yx - zmn) / (zmx - zmn) + + blobs_log = skimage.feature.blob_log(yx, min_sigma=1, max_sigma=3, num_sigma=20, threshold=0.025) + print str(len(blobs_log)) + " blobs found" + if len(blobs_log) > 1: + blobs_log[:, 2] = blobs_log[:, 2] * math.sqrt(2) + for i in blobs_log: + data[im][int(i[0])][int(i[1])] = True + return data + +def make_watershed(mask): + distance = ndi.distance_transform_edt(mask) + local_max = skimage.feature.peak_local_max(distance, indices=False, footprint=np.ones((31, 31)), labels=mask) + markers = ndi.label(local_max)[0] + labels = skimage.morphology.watershed(-distance, markers, mask=mask) + return labels + +def make_gene_layers(gene_tif): + gene_z = gene_tif.get_tiff_array() + gene_s = np.arange(0, len(gene_z)+1, len(gene_z) / 6) + gene_r = zip(gene_s[:-1], (gene_s + 1)[1:]) + gene_y = np.array(gene_z[gene_r[2][0]:gene_r[2][1]], dtype=np.uint16) + return gene_y + +def make_nissl_watershed(nissl_tif): + nissl_z = nissl_tif.get_tiff_array() + nissl_s = np.arange(0, len(nissl_z)+1, len(nissl_z) / 6) + nissl_r = zip(nissl_s[:-1], (nissl_s + 1)[1:]) + nissl_y = np.array(nissl_z[nissl_r[1][0]:nissl_r[1][1]], dtype=np.uint16) + nissl_watershed = [[] for k in range(len(nissl_y))] + + for i in range(len(nissl_y)): + mask = make_mask(nissl_y[i]) + watershed = make_watershed(mask) + nissl_watershed[i] = watershed + return nissl_watershed + +def correct_labels(nissl_watershed): + nissl_watershed_corrected = [[[0 for i in range(len(nissl_watershed[0][0]))] for j in range(len(nissl_watershed[0]))] for k in range(len(nissl_watershed))] + nissl_watershed_corrected[0] = [i for i in nissl_watershed[0]] + nissl_watershed_corrected = np.asarray(nissl_watershed_corrected) + + for k in range(1, len(nissl_watershed_corrected)): + cell_number_max = nissl_watershed_corrected[k-1].max() #changed to corrected to keep accurate count + cell_number_two_max = nissl_watershed[k].max() + and_map = np.logical_and(nissl_watershed[k-1], nissl_watershed[k]) + and_map_pos = np.where(and_map) + cell_set = set(nissl_watershed[k-1][np.where(and_map)]) + inter_layer_dict = dict() + for i in range(len(and_map_pos[0])): + inter_layer_dict[nissl_watershed[k][and_map_pos[0][i]][and_map_pos[1][i]]] = nissl_watershed[k-1][and_map_pos[0][i]][and_map_pos[1][i]] + counter = 0 + inter_layer_dict[0] = 0 + for i in range(1, cell_number_two_max + 1): + if not i in inter_layer_dict: + counter += 1 + inter_layer_dict[i] = cell_number_max + counter + + + for j in range(1024): + for i in range(1024): + nissl_watershed_corrected[k][i][j] = inter_layer_dict[nissl_watershed[k][i][j]] + + return nissl_watershed_corrected diff --git a/dots_v0.1.py b/dots_v0.1.py deleted file mode 100644 index 3a42aac..0000000 --- a/dots_v0.1.py +++ /dev/null @@ -1,85 +0,0 @@ - -import pandas as pd -import numpy as np -import libtiff -import skimage.exposure -import skimage.feature -import skimage.filters -import skimage.morphology - -def make_mask(zstack, nbins=32768): - thresh = skimage.filters.threshold_otsu(zstack, nbins=32768) - return zstack > thresh - -def build_blob_array(stack): - data = [[[False for i in range(len(stack[0][0]))] for j in range(len(stack[0]))] for k in range(len(stack))] - for im in range(len(stack))): #was stack - print "processing " + str(im) - yx = skimage.exposure.equalize_adapthist(stack[im], clip_limit=0.00025, nbins=32768) - - zmx = np.max(yx) - zmn = np.min(yx) - yx = (yx - zmn) / (zmx - zmn) - - blobs_log = skimage.feature.blob_log(yx, min_sigma=1, max_sigma=3, num_sigma=20, threshold=0.025) - print str(len(blobs_log)) + " blobs found" - if len(blobs_log) > 1: - blobs_log[:, 2] = blobs_log[:, 2] * math.sqrt(2) - for i in blobs_log: - data[im][int(i[0])][int(i[1])] = True - return data - -def make_watershed(mask): - distance = ndi.distance_transform_edt(mask) - local_max = skimage.feature.peak_local_max(distance, indices=False, footprint=np.ones((31, 31)), labels=mask) - markers = ndi.label(local_max)[0] - labels = skimage.morphology.watershed(-distance, markers, mask=mask) - return labels - -def make_gene_layers(gene_tif): - gene_z = gene_tif.get_tiff_array() - gene_s = np.arange(0, len(gene_z)+1, len(gene_z) / 6) - gene_r = zip(gene_s[:-1], (gene_s + 1)[1:]) - gene_y = np.array(gene_z[gene_r[2][0]:gene_r[2][1]], dtype=np.uint16) - return gene_y - -def make_nissl_watershed(nissl_tif): - nissl_z = nissl_tif.get_tiff_array() - nissl_s = np.arange(0, len(nissl_z)+1, len(nissl_z) / 6) - nissl_r = zip(nissl_s[:-1], (nissl_s + 1)[1:]) - nissl_y = np.array(nissl_z[nissl_r[1][0]:nissl_r[1][1]], dtype=np.uint16) - nissl_watershed = [[] for k in range(len(nissl_y))] - - for i in range(len(nissl_y)): - mask = make_mask(nissl_y[i]) - watershed = make_watershed(mask) - nissl_watershed[i] = watershed - return nissl_watershed - -def correct_labels(nissl_watershed): - nissl_watershed_corrected = [[[0 for i in range(len(nissl_watershed[0][0]))] for j in range(len(nissl_watershed[0]))] for k in range(len(nissl_watershed))] - nissl_watershed_corrected[0] = [i for i in nissl_watershed[0]] - nissl_watershed_corrected = np.asarray(nissl_watershed_corrected) - - for k in range(1, len(nissl_watershed_corrected)): - cell_number_max = nissl_watershed_corrected[k-1].max() #changed to corrected to keep accurate count - cell_number_two_max = nissl_watershed[k].max() - and_map = np.logical_and(nissl_watershed[k-1], nissl_watershed[k]) - and_map_pos = np.where(and_map) - cell_set = set(nissl_watershed[k-1][np.where(and_map)]) - inter_layer_dict = dict() - for i in range(len(and_map_pos[0])): - inter_layer_dict[nissl_watershed[k][and_map_pos[0][i]][and_map_pos[1][i]]] = nissl_watershed[k-1][and_map_pos[0][i]][and_map_pos[1][i]] - counter = 0 - inter_layer_dict[0] = 0 - for i in range(1, cell_number_two_max + 1): - if not i in inter_layer_dict: - counter += 1 - inter_layer_dict[i] = cell_number_max + counter - - - for j in range(1024): - for i in range(1024): - nissl_watershed_corrected[k][i][j] = inter_layer_dict[nissl_watershed[k][i][j]] - - return nissl_watershed_corrected