Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add background_removal tool (skimage) #125

Merged
merged 9 commits into from
Jul 15, 2024
5 changes: 5 additions & 0 deletions macros/creators.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,11 @@
<yield />
</xml>

<xml name="creators/rmassei">
kostrykin marked this conversation as resolved.
Show resolved Hide resolved
<person givenName="Riccardo" familyName="Massei"/>
<yield/>
</xml>

<xml name="creators/alliecreason">
<person givenName="Allison" familyName="Creason"/>
<yield/>
Expand Down
8 changes: 8 additions & 0 deletions tools/background_removal/.shed.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
categories:
- Imaging
description: Background removal filters using scikit-image
long_description: Tool to perform a background removal using 1) Rolling-Ball Algorithm, 2) Difference of Gaussians and 3) Top-Hat Filter
name: background_removal
owner: ufz
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the owner is wrong, we can only push to imgteam

homepage_url: https://github.com/bmcv
remote_repository_url: https://github.com/BMCV/galaxy-image-analysis/tools/background_removal
43 changes: 43 additions & 0 deletions tools/background_removal/background_removal.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
import argparse
import warnings


import skimage.io
from skimage.filters import difference_of_gaussians
from skimage.io import imread
from skimage.morphology import disk, white_tophat
from skimage.restoration import rolling_ball


def process_image(args):
image = imread(args.input_image)

if args.filter == "rolling_ball":
background_rolling = rolling_ball(image, radius=args.radius)
output_image = image - background_rolling

elif args.filter == "dog":
output_image = difference_of_gaussians(image, low_sigma=0, high_sigma=args.radius)

elif args.filter == "top_hat":
output_image = white_tophat(image, disk(args.radius))

with warnings.catch_warnings():
output_image = skimage.util.img_as_uint(output_image)
kostrykin marked this conversation as resolved.
Show resolved Hide resolved
skimage.io.imsave(args.output, output_image, plugin="tifffile")

kostrykin marked this conversation as resolved.
Show resolved Hide resolved

def main():
parser = argparse.ArgumentParser(description="Background removal script using skiimage")
parser.add_argument('input_image', help="Input image path")
parser.add_argument('filter', choices=['rolling_ball', 'dog', 'top_hat'],
help="Background removal algorithm")
parser.add_argument('radius', type=float, help="Radius")
parser.add_argument('output', help="Output image path")

args = parser.parse_args()
process_image(args)


if __name__ == '__main__':
main()
65 changes: 65 additions & 0 deletions tools/background_removal/background_removal.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
<tool id="background_removal" name="Remove image background" version="@TOOL_VERSION@+galaxy@VERSION_SUFFIX@" profile="20.05">
<description>with scikit-image</description>
<macros>
<import>creators.xml</import>
<import>tests.xml</import>
<token name="@TOOL_VERSION@">0.24.0</token>
<token name="@VERSION_SUFFIX@">0</token>
</macros>
<creator>
<expand macro="creators/rmassei"/>
</creator>
<requirements>
<requirement type="package" version="0.24.0">scikit-image</requirement>
</requirements>
<command detect_errors="aggressive">
<![CDATA[
python "$__tool_directory__/background_removal.py" $input_image $filter $radius $output
]]>
</command>
<inputs>
<param name="input_image" type="data" format="tiff, jpg, jpeg, png, tif" label="Input Image"/>
<param name="filter" type="select" label="Select Filter">
<option value="rolling_ball">Rolling-Ball Algorithm</option>
<option value="dog">Difference of Gaussians</option>
<option value="top_hat">Top-Hat Filter</option>
</param>
<param name="radius" type="float" label="Radius" value="20"/>
</inputs>
<outputs>
<data name="output" format="tiff" label="Background substraction output"/>
</outputs>
<tests>
<test>
kostrykin marked this conversation as resolved.
Show resolved Hide resolved
<param name="input_image" value="img.jpg"/>
<param name="filter" value="rolling_ball"/>
<param name="radius" value="20"/>
<expand macro="tests/intensity_image_diff" name="output" value="img_output_rb.tif" ftype="tiff"/>
kostrykin marked this conversation as resolved.
Show resolved Hide resolved
kostrykin marked this conversation as resolved.
Show resolved Hide resolved
</test>
</test>
kostrykin marked this conversation as resolved.
Show resolved Hide resolved
<test>
<param name="input_image" value="img.png"/>
<param name="filter" value="dog"/>
<param name="radius" value="20"/>
<expand macro="tests/intensity_image_diff" name="output" value="img_output_dog.tif" ftype="tiff"/>
kostrykin marked this conversation as resolved.
Show resolved Hide resolved
</test>
<test>
<param name="input_image" value="sample.tif"/>
kostrykin marked this conversation as resolved.
Show resolved Hide resolved
<param name="filter" value="top_hat"/>
<param name="radius" value="15"/>
<expand macro="tests/intensity_image_diff" name="output" value="img_output_tophat.tif" ftype="tiff"/>
kostrykin marked this conversation as resolved.
Show resolved Hide resolved
</test>
</tests>
<help>
This tools applied different background removal algorithm to the image:

- Rolling-Ball Algorithm

- Difference of Gaussians

- Top-Hat Filter
kostrykin marked this conversation as resolved.
Show resolved Hide resolved
</help>
<citations>
<citation type="doi">10.1109/MC.1983.1654163</citation>
</citations>
</tool>
1 change: 1 addition & 0 deletions tools/background_removal/creators.xml
Binary file added tools/background_removal/test-data/img.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added tools/background_removal/test-data/out_dog.tif
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file added tools/background_removal/test-data/sample.tif
Binary file not shown.
1 change: 1 addition & 0 deletions tools/background_removal/tests.xml
Loading