diff --git a/extensions/chaeo/batch_jobs/coloring_book.py b/extensions/chaeo/batch_jobs/coloring_book.py new file mode 100644 index 0000000000000000000000000000000000000000..7e32ad74de366ffd1202b8d365d776315ab92b59 --- /dev/null +++ b/extensions/chaeo/batch_jobs/coloring_book.py @@ -0,0 +1,52 @@ +from pathlib import Path + +import numpy as np +import pandas as pd +from skimage.filters import gaussian +from skimage.measure import label, regionprops_table + +import tifffile + +from extensions.chaeo.accessors import MonoPatchStack +from extensions.ilastik.models import IlastikPixelClassifierModel +from model_server.accessors import write_accessor_data_to_file, InMemoryDataAccessor + +if __name__ == '__main__': + root = Path('c:/Users/rhodes/projects/proj0011-plankton-seg/exp0024') + px_ilp = root / 'px02.ilp' + sigma = 1.0 + thresh = 0.15 + min_area = 400 + + tf = tifffile.imread(root / '20231008-162336-z04-TL.tif') + instack = MonoPatchStack(np.moveaxis(tf, 0, -1)) + px_mod = IlastikPixelClassifierModel(params={'project_file': px_ilp}) + pxmaps = [] + + def pipeline(yx_img): + pxmap, _ = px_mod.infer(InMemoryDataAccessor(yx_img)) + smoothed = gaussian(pxmap.get_one_channel_data(0).data, sigma=sigma) + mask = smoothed > thresh + proc_mask = mask + lamap = label(proc_mask).astype('uint16') + df = ( + pd.DataFrame( + regionprops_table( + lamap[:, :, 0, 0], + properties=('label', 'area') + ) + ) + ) + la_keep = df.loc[df['area'] > min_area, 'label'].unique() + fil_mask = np.isin(lamap, la_keep) + inv = np.invert(fil_mask) + return InMemoryDataAccessor(inv) + + results = [] + for i in range(0, instack.count): + res = pipeline(instack.iat(i)) + results.append(res) + outfile = root / 'output' / f'res_{i:04d}.tif' + outfile.parent.mkdir(parents=True, exist_ok=True) + write_accessor_data_to_file(outfile, res) + print('Finished') \ No newline at end of file