import os import threading def AutoSeg(image_id): # crop parameters orig and size # cr_im = crop(layerids=[[layer_0]],origin='[-77.4271,42.3765,-176.008]',size='[193.867,133.897,124.008]',replace='false'); cr_im = crop(layerids=[image_id],origin='[-77.4271,42.3765,-176.008]',size='[193.867,133.897,124.008]',replace='false'); wait_for_layer(cr_im[0]) # ostu threshold o_ims = otsuthresholdfilter(layerid=cr_im[0],amount='3'); wait_for_layer(o_ims[0]) # fill holes on third output ff_im = fillholesfilter(layerid=o_ims[0],seeds='[[-15.571,105.758,-82.2018]]',replace='false'); wait_for_layer(ff_im) return ff_im def wait_for_layer(layer): #checks to make sure that the layer is available before trying operations on it. MAX_ITERATIONS=1000 TIMEOUT=2 c = threading.Condition() c.acquire() layerStatus = get(stateid=layer+"::data") counter = 1 with c: while not layerStatus == "available": if counter > MAX_ITERATIONS: break counter += 1 c.wait(TIMEOUT) layerStatus = get(stateid=layer+"::data") print('waiting for '+layer)
On Apr 27, 2017, at 9:58 AM, Kelly Nicol <kelly.nicol@icahn.mssm.edu> wrote:<Screenshot 2017-04-23 22.08.51.png><autoseg_CA.py>Hi Jess,Thanks so much for your help.As it turns out, the RC version of Seg3D for Mac does not have the same option to copy and paste the commands from the controller window.But I got access to a windows program and was able to follow your instructions after that!I do have 2 quick follow-up questions.(1) I keep getting the error message “exception”(2) the wait function “wait_for_layer” kept giving me an error as well.Can you think of why this would be the case? Attached is my code and 1screen shot of the errors.Thanks!Kelly
Kelly Nicol
On Apr 21, 2017, 2:43 PM -0400, Jess <jess@sci.utah.edu>, wrote:
Hi Kelly,Writing scripts for Seg3D there are a couple things that should help.First, in the newest release candidate (https://github.com/SCIInstitute/Seg3D/releases) there is a new feature which you can copy the python functions from the controller window. This means that you can load an example data, perform the steps that you want, then copy the functions from the controller window and into a script file. If you are using an older version, you can still use the controller window to get the functions and parameters that you use, but you will need to convert it to python syntax, which isn’t too similar.The second aspect that you need to consider is that the python scheduler doesn’t necessarily wait for the the tools to finish before attempting the next on. Therefore, you need a wait function to allow the filters to run in series. There is an example attached that has the wait function.Because of the need for a wait function, I usually make scripts in the form of a function or a library. In the attached example, there is a function that loads the data (dicom format in this case), and some other things. It also calls the second function, which performs a series of filters and tools similar to what you want to do. You can run this example with the following functions in the python console window (it uses data from the IBBM example data, and there is a similar data set in the SCIRun dataset):path = ‘[path to IBBM dir]/2016/Image_Processing/Lab2/'exec(open('[path to IBBM dir]/2016/Python_Labs/Lab1_Seg3D/scripts/autoseg_heart.py').read())AutoSeg_file(path+'DICOM/',path,'seg_auto', [29877, 2121],[[-2.81,5.61,35.8]])You can use this example, and modify the second function to fit your needs. It will be something like this:def AutoSeg(layer,orig,sz,seed):#crop with parameters orig and szcr_im=crop(layerids=layer,origin=orig,size=size,replace=‘false’);wait_for_layer(cr_im)#filter with median filter radius 1sm_im = medianfilter(layerid = cr_im,radius=1)
wait_for_layer(sm_im)#otsu threshold gives multiple outputso_ims=otsuthresholdfilter(layerid=sm_im,amount='3’)wait_for_layer(o_ims[0])# fill holes on third otsu outputff_im=fillholesfilter(layerid=o_ims[2],seeds=seed,replace='false')wait_for_layer(ff_im)return ff_imthe parameters from the parent function should look like:orig = '[-78.3714,-74.658,6.01]'sz='[-78.3714,-74.658,6.01]’seed = [[-2.81,5.61,35.8]]These examples should hopefully get you started. There are some more python script examples in the IBBM data, and atPlease let me know if you have more questions.cheers,Jess
On Apr 20, 2017, at 3:43 PM, SCI Webmaster <webmaster@sci.utah.edu> wrote:
Kelly Nicol <kelly.nicol@icahn.mssm.edu>
Affiliation: Mount Sinai - Dept Neurosurgery
Re Software: {Software:value}
Subject: Python Console
Message: Hi there!
I attended IBBM last year. You showed us how to semi-automate our segmentations in Seg3D with this tool. I can only code for the command line and was wondering if you could help me code 4 steps for some cardiac CT scans I'm working on. (1) cropping (2) median filtering radius =1 (3) 3 part otsu threshold (4) fill holes filter
Shouldnt be too bad, but could really use your help! Thanks...Kelly
Archive powered by MHonArc 2.6.18.