-
Notifications
You must be signed in to change notification settings - Fork 17
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Update "Threshold image" tool (#109)
Squashed commit of the following: commit bc594cf Author: Leonid Kostrykin <[email protected]> Date: Mon Mar 11 15:55:40 2024 +0000 Update tool version commit 92657e4 Author: Leonid Kostrykin <[email protected]> Date: Mon Mar 11 15:54:38 2024 +0000 Update help commit f8e732a Author: Leonid Kostrykin <[email protected]> Date: Mon Mar 11 15:51:41 2024 +0000 Add help commit 6124766 Author: Leonid Kostrykin <[email protected]> Date: Mon Mar 11 15:33:11 2024 +0000 Replace `dark_bg` by `invert_output` commit a41c52f Author: Leonid Kostrykin <[email protected]> Date: Mon Mar 11 12:42:16 2024 +0000 Update UI commit 044709d Author: Leonid Kostrykin <[email protected]> Date: Mon Mar 11 12:00:05 2024 +0000 Add help commit e5630a8 Author: Leonid Kostrykin <[email protected]> Date: Mon Mar 11 12:59:42 2024 +0100 Fix test output commit 108ab02 Author: Leonid Kostrykin <[email protected]> Date: Mon Mar 11 11:50:17 2024 +0000 Add test commit 6406061 Author: Leonid Kostrykin <[email protected]> Date: Mon Mar 11 11:46:15 2024 +0000 Add `manual` thresholding method commit 0a89784 Author: Leonid Kostrykin <[email protected]> Date: Mon Mar 11 11:36:42 2024 +0000 Fix issues commit 912977e Author: Leonid Kostrykin <[email protected]> Date: Mon Mar 11 11:27:51 2024 +0000 Refactor auto_threshold.xml
- Loading branch information
Showing
3 changed files
with
94 additions
and
40 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,47 +1,49 @@ | ||
""" | ||
Copyright 2017-2022 Biomedical Computer Vision Group, Heidelberg University. | ||
Copyright 2017-2024 Biomedical Computer Vision Group, Heidelberg University. | ||
Distributed under the MIT license. | ||
See file LICENSE for detail or copy at https://opensource.org/licenses/MIT | ||
""" | ||
|
||
import argparse | ||
|
||
import numpy as np | ||
import skimage.filters | ||
import skimage.io | ||
import skimage.util | ||
import tifffile | ||
|
||
thOptions = { | ||
'otsu': lambda img_raw, bz: skimage.filters.threshold_otsu(img_raw), | ||
'li': lambda img_raw, bz: skimage.filters.threshold_li(img_raw), | ||
'yen': lambda img_raw, bz: skimage.filters.threshold_yen(img_raw), | ||
'isodata': lambda img_raw, bz: skimage.filters.threshold_isodata(img_raw), | ||
th_methods = { | ||
'manual': lambda thres, **kwargs: thres, | ||
|
||
'otsu': lambda img_raw, **kwargs: skimage.filters.threshold_otsu(img_raw), | ||
'li': lambda img_raw, **kwargs: skimage.filters.threshold_li(img_raw), | ||
'yen': lambda img_raw, **kwargs: skimage.filters.threshold_yen(img_raw), | ||
'isodata': lambda img_raw, **kwargs: skimage.filters.threshold_isodata(img_raw), | ||
|
||
'loc_gaussian': lambda img_raw, bz: skimage.filters.threshold_local(img_raw, bz, method='gaussian'), | ||
'loc_median': lambda img_raw, bz: skimage.filters.threshold_local(img_raw, bz, method='median'), | ||
'loc_mean': lambda img_raw, bz: skimage.filters.threshold_local(img_raw, bz, method='mean') | ||
'loc_gaussian': lambda img_raw, bz, **kwargs: skimage.filters.threshold_local(img_raw, bz, method='gaussian'), | ||
'loc_median': lambda img_raw, bz, **kwargs: skimage.filters.threshold_local(img_raw, bz, method='median'), | ||
'loc_mean': lambda img_raw, bz, **kwargs: skimage.filters.threshold_local(img_raw, bz, method='mean') | ||
} | ||
|
||
|
||
def auto_thresholding(in_fn, out_fn, th_method, block_size=5, dark_bg=True): | ||
def do_thresholding(in_fn, out_fn, th_method, block_size=5, threshold=0, invert_output=False): | ||
img = skimage.io.imread(in_fn) | ||
th = thOptions[th_method](img, block_size) | ||
if dark_bg: | ||
res = img > th | ||
else: | ||
res = img <= th | ||
th = th_methods[th_method](img_raw=img, bz=block_size, thres=threshold) | ||
res = img > th | ||
if invert_output: | ||
res = np.logical_not(res) | ||
tifffile.imwrite(out_fn, skimage.util.img_as_ubyte(res)) | ||
|
||
|
||
if __name__ == "__main__": | ||
parser = argparse.ArgumentParser(description='Automatic Image Thresholding') | ||
parser.add_argument('im_in', help='Path to the input image') | ||
parser.add_argument('im_out', help='Path to the output image (TIFF)') | ||
parser.add_argument('th_method', choices=thOptions.keys(), help='Thresholding method') | ||
parser.add_argument('th_method', choices=th_methods.keys(), help='Thresholding method') | ||
parser.add_argument('block_size', type=int, default=5, help='Odd size of pixel neighborhood for calculating the threshold') | ||
parser.add_argument('dark_bg', default=True, type=bool, help='True if background is dark') | ||
parser.add_argument('threshold', type=float, default=0, help='Manual thresholding value') | ||
parser.add_argument('invert_output', default=False, type=bool, help='Values below/above the threshold are labeled with 0/255 if False, and with 255/0 otherwise') | ||
args = parser.parse_args() | ||
|
||
auto_thresholding(args.im_in, args.im_out, args.th_method, args.block_size, args.dark_bg) | ||
do_thresholding(args.im_in, args.im_out, args.th_method, args.block_size, args.threshold, args.invert_output) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Binary file not shown.