def convert_input(inputFolder, saveLocation, remove_bad=True):
    """Function for converting data from imageJ ROIs + data to mem_mapped arrays for preprocessing + batch generation to pass to cnn
    """
    #get pairs
    tfs = listdirfull(inputFolder, keyword=".tif")
    zps = [xx for xx in listdirfull(inputFolder) if ".tif" not in xx]

    #make empty zip files if no labels (useful to train on negative data?)
    for tf in tfs:
        if tf[:-4] + "RoiSet.zip" not in zps:
            print(tf)
            nm = tf[:-4] + "RoiSet.zip"
            with zipfile.ZipFile(os.path.join(inputFolder, nm), "w") as file:
                pass

    pairs = [[tf, zp] for tf in tfs for zp in zps if tf[:-4] in zp]

    #make saveLocation if doesn"t exist:
    makedir(saveLocation)

    #make mem_mapped arrays once, to be more cluster friendly
    print("Starting conversion...")
    p = mp.Pool(12)
    iterlst = [(pair[0], pair[1], saveLocation) for pair in pairs]
    bad = p.starmap(basic_convert, iterlst)
    p.terminate()
    print("Completed!\n\nBad list: {}".format(bad))

    #check all and make dictionary of points (nx3)
    file_points_dct = {}
    print("Checking all files have valid input and anns...")
    for a in listdirfull(saveLocation, "npy"):
        arr = load_np(a)
        sh = np.nonzero(arr[0])[0].shape[0]
        pnts = np.nonzero(arr[1])
        shh = pnts[0].shape[0]
        if sh == 0 or shh == 0:
            print(
                "File: {} \n  input images nonzeros=={}, annotation nonzeros=={}"
                .format(a, sh, shh))
            if remove_bad:
                os.remove(a)
                print("removing")
        else:
            file_points_dct[os.path.basename(a)] = list(zip(*pnts))

    #save out points
    save_dictionary(
        os.path.join(os.path.dirname(saveLocation), "points_dictionary.p"),
        file_points_dct)
    print("Saved dictionary in {}".format(saveLocation))

    return
Example #2
0
def otsu_par(saveLocation, otsufld, size, otsu_factor):
    """
    for inn in listdirfull(saveLocation, "npy"):
        print inn
        #load
        arr = load_np(inn)
        raw = np.copy(arr[0])
        lbl = np.copy(arr[1])
        
        #save input
        inrawfld = os.path.join(otsufld, "inputRawImages"); makedir(inrawfld)
        #[tifffile.imsave(os.path.join(inrawfld, "{}_{}_inputRawImages.tif".format(os.path.basename(inn)[:-4], str(i).zfill(4))), ii) for i, ii in enumerate(arr[0])]
        f = h5.File(os.path.join(inrawfld, "{}_inputRawImages.h5".format(os.path.basename(inn)[:-4])), "w")
        f["/main"] = raw
        f.close()
        
        #save input
        #OTSU?
        inlblfld = os.path.join(otsufld, "inputLabelImages"); makedir(inlblfld)
        otsu = otsu_dilate(raw, lbl, size=size, otsu_factor=otsu_factor).astype("float32")
        f = h5.File(os.path.join(inlblfld, "{}_inputLabelImages-segmentation.h5".format(os.path.basename(inn)[:-4])), "w")
        f["/main"] = otsu
        f.close()
    """
    #otsu
    p = mp.Pool(12)
    iterlst = [(otsufld, inn, size, otsu_factor) for inn in listdirfull(saveLocation, "npy")]
    p.starmap(otsu_helper, iterlst)
    p.terminate()
    return
def otsu_par(saveLocation, otsufld, size, otsu_factor):

    #otsu
    p = mp.Pool(12)
    iterlst = [(otsufld, inn, size, otsu_factor)
               for inn in listdirfull(saveLocation, "npy")]
    p.starmap(otsu_helper, iterlst)
    p.terminate()
    return
    if verbose:
        sys.stdout.write(
            "done.\n\n***Memmapped array generated successfully***\n\n")
        sys.stdout.flush()

    return arr


#%%

if __name__ == "__main__":
    #convert first
    inputFolder = "/home/wanglab/Documents/cfos_raw_inputs/"
    saveLocation = "/home/wanglab/Documents/cfos_inputs/memmap"
    makedir(saveLocation)
    otsufld = "/home/wanglab/Documents/cfos_inputs/otsu"
    makedir(otsufld)
    size = (5, 10, 10)
    otsu_factor = 0.8

    #convert
    convert_input(inputFolder, saveLocation, remove_bad=True)

    #check all
    for a in listdirfull(saveLocation, "npy"):
        sh = np.nonzero(load_np(a))[0].shape[0]
        if sh == 0: print(a, sh)
#%%
#otsu_par
    otsu_par(saveLocation, otsufld, size, otsu_factor)