9
9
import glob
10
10
import json
11
11
import os
12
- import pdb
13
- import pickle
14
12
import re
15
13
import shutil
16
14
import threading
25
23
import numpy as np
26
24
import tifffile
27
25
import xmltodict
26
+ from eda_original .SmartMicro import ImageTiles , NNfeeder
28
27
from matplotlib .widgets import RectangleSelector
29
28
from skimage import io
30
29
from toolbox .image_processing import deconvolve
31
30
from tqdm import tqdm
32
31
33
- from . import ImageTiles , NNfeeder
34
-
35
32
36
33
def loadiSIMmetadata (folder ):
37
34
""" Load the information written by matlab about the generated DAQ signals for all in folder
@@ -236,7 +233,7 @@ def saveTifStack(target_file, stack1, stack2):
236
233
237
234
238
235
def loadTifFolder (folder , resizeParam = 1 , order = 0 , progress = None ,
239
- cropSquare = True , outputs = None , decon_id :str = 'None' ) -> np .ndarray :
236
+ cropSquare = True , outputs = None , decon_id : str = 'None' ) -> np .ndarray :
240
237
"""Function to load SATS data from a folder with the individual tif files written by
241
238
microManager. Inbetween there might be neural network images that are also loaded into
242
239
an array. Mainly used with NN_GUI_v2.py
@@ -261,7 +258,7 @@ def loadDecon(filePath, stackDecon, frame):
261
258
if decon_id == 'None' :
262
259
deconPath = filePath [:- 8 ] + 'decon.tiff'
263
260
else :
264
- deconPath = sorted (glob .glob (os .path .join (os .path .dirname (filePath ),decon_id )))
261
+ deconPath = sorted (glob .glob (os .path .join (os .path .dirname (filePath ), decon_id )))
265
262
deconPath = deconPath [frame ]
266
263
267
264
try :
@@ -387,6 +384,7 @@ def cropToSquare(stack):
387
384
def loadTifStack (stack , order = None , outputElapsed = False , cropSquare = True , img_range = None ):
388
385
""" Load a tif stack and deinterleave depending on the order (0 or 1). Also get the
389
386
elapsed time on the images and give them back as list."""
387
+ print (stack )
390
388
imageMitoOrig = io .imread (stack , key = img_range )
391
389
392
390
print (imageMitoOrig .shape )
@@ -612,35 +610,51 @@ def calculateNNforFolder(folder, model=None):
612
610
tifffile .imwrite (nn_file , nnImage .astype (np .uint8 ))
613
611
614
612
615
- def deconvoleStack (file : str , mode : str = 'cpu' ):
613
+ def deconvoleStack (file : str , mode : str = 'cpu' , cuda_params = None , name = "" , channel = "network" ):
616
614
""" Deconvolve the struct part of a stack of foci/struct data using the deconvolve function
617
615
in the toolbox."""
618
- _ , stack_struct = loadTifStack (file )
616
+ if channel == "network" :
617
+ _ , stack_struct = loadTifStack (file )
618
+ elif channel == "peaks" :
619
+ stack_struct , _ = loadTifStack (file )
619
620
stackDecon = np .zeros (stack_struct .shape , dtype = np .uint16 )
620
621
if mode == 'cuda' :
621
622
from toolbox .image_processing import cuda_decon
622
- cuda_params = cuda_decon .CudaParams ()
623
+ if cuda_params is None :
624
+ cuda_params = cuda_decon .CudaParams (background = 1 , sigma = 3.04 / 2.355 , after_gaussian = 2 )
625
+ print ("DECONVOLE STACK" )
626
+ print ('sigma: ' , cuda_params .kernel ['sigma' ], '\n background: ' , cuda_params .background )
623
627
624
628
for frame in tqdm (range (stack_struct .shape [0 ])):
625
629
if mode == 'cpu' :
626
630
stackDecon [frame , :, :] = deconvolve .full_richardson_lucy (stack_struct [frame , :, :])
627
631
else :
628
632
stackDecon [frame , :, :] = cuda_decon .richardson_lucy (stack_struct [frame , :, :],
629
633
params = cuda_params )
634
+ if cuda_params .after_gaussian :
635
+ stackDecon [frame , :, :] = cv2 .GaussianBlur (stackDecon [frame , :, :], (0 , 0 ),
636
+ cuda_params .after_gaussian )
630
637
631
- out_file = file [:- 8 ] + '_decon.tiff'
638
+ out_file = file [:- 8 ] + '_decon' + name + '.tiff'
639
+ print (f"{ file } -> { out_file } " )
632
640
tifffile .imwrite (out_file , stackDecon )
633
641
634
642
635
- def deconvolveFolder (folder , n_threads = 10 , mode = 'cpu' , cuda_params = None , subfolder = None ):
643
+ def deconvolveFolder (folder , n_threads = 10 , mode = 'cpu' , cuda_params = None , subfolder = None ,
644
+ channel = 'network' ):
636
645
""" Wrapper function for deconvolveOneFolder to allow for parallel computation """
637
646
638
647
if isinstance (folder , list ) and mode == 'cpu' :
639
648
with Pool (n_threads ) as p :
640
- p .map (deconvolveOneFolder , folder , subfolder )
649
+ p .map (deconvolveOneFolder , folder , subfolder , channel )
641
650
elif isinstance (folder , list ):
642
651
for single_folder in folder :
643
- deconvolveOneFolder (single_folder , mode , cuda_params , subfolder )
652
+ try :
653
+ deconvolveOneFolder (single_folder , mode , cuda_params , subfolder , channel )
654
+ except TypeError :
655
+ files , _ = get_files (single_folder )
656
+ print (files ['stack' ][0 ])
657
+ deconvoleStack (files ['stack' ][0 ], mode , cuda_params , subfolder [1 :- 2 ], channel )
644
658
else :
645
659
deconvolveOneFolder (folder , mode , cuda_params , subfolder )
646
660
@@ -652,11 +666,12 @@ def deconvolveOneFolder(folder, mode='cpu', cuda_params=None, subfolder=None, ch
652
666
from toolbox .image_processing import cuda_decon
653
667
654
668
if cuda_params is None and mode == 'cuda' :
655
- print ('Using default coda_params' )
656
- cuda_params = cuda_decon .CudaParams (background = 1.05 , sigma = 3.9 / 2.335 ) # 0.92 mito 1 for caulo highlight
669
+ print ('Using default cuda_params' )
670
+ # bg 0.92 mito 1 for caulo highlight 1.05 otherwise
671
+ cuda_params = cuda_decon .CudaParams (background = 1 , sigma = 3.04 / 2.355 , after_gaussian = 2 )
672
+ # 3.04 = sqrt(2)*120/56
657
673
print ('sigma: ' , cuda_params .kernel ['sigma' ], '\n background: ' , cuda_params .background )
658
674
659
- print (folder )
660
675
files , _ = get_files (folder )
661
676
files = files [channel ]
662
677
for idx , file in enumerate (tqdm (files )):
@@ -872,6 +887,7 @@ def transfer_nn_to_folder(folder):
872
887
shutil .copyfile (file , os .path .join (folder , 'nn' , str (idx ) + '_neural.tif' ))
873
888
os .remove (file )
874
889
890
+
875
891
def transfer_decon_to_folder (folder ):
876
892
files = sorted (glob .glob (folder + '/**/*decon*' ))
877
893
print (files )
@@ -883,15 +899,27 @@ def transfer_decon_to_folder(folder):
883
899
884
900
def main ():
885
901
""" Main method calculating a nn stack for a set of old Mito/drp stacks """
886
- from Analysis import data_locations
887
-
902
+ from eda_original .Analysis import data_locations
888
903
# folder = 'W:/Watchdog/microM_test/cell_IntSmart_30pc_488_50pc_561_band_4'
889
904
# calculateNNforFolder(folder)
890
905
# transfer_nn_to_folder(folder)
891
906
# ats_folders = data_locations.caulo_folders['fast']
892
-
893
- ats_folders = data_locations .mito_folders ['ats' ]
894
- deconvolveFolder (ats_folders , mode = 'cuda' , subfolder = None )
907
+ from toolbox .image_processing import cuda_decon
908
+ cuda_params = cuda_decon .CudaParams (background = 0.8 , sigma = 3.9 / 2.355 , after_gaussian = 1.5 )
909
+ dataset = data_locations .mito_folders
910
+
911
+ ats_folders = [sorted (dataset ['ats' ])[1 ]]
912
+ # ats_folders.append('C:/Users/stepp/Documents/02_Raw/Caulobacter_iSIM/210506_01')
913
+ deconvolveFolder (ats_folders , mode = 'cuda' , cuda_params = cuda_params , subfolder = 'decon_pr' ,
914
+ channel = 'network' )
915
+
916
+ # slow_folders = dataset['slow']
917
+ # deconvolveFolder(slow_folders, mode='cuda', cuda_params=cuda_params, subfolder='decon_corr3',
918
+ # channel='network')
919
+
920
+ # fast_files = [dataset['fast'][2]]
921
+ # deconvolveFolder(fast_files, mode='cuda', cuda_params=cuda_params, subfolder='decon_net',
922
+ # channel='network')
895
923
896
924
# slow_folders = data_locations.mito_folders['fast']
897
925
# for folder in slow_folders:
0 commit comments