Previous changeset 4:0a53256b48c6 (2023-11-10) Next changeset 6:5bc8cdc17fd0 (2024-04-24) |
Commit message:
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tree/master/tools/2d_feature_extraction/ commit c045f067a57e8308308cf6329060c7ccd3fc372f |
modified:
2d_feature_extraction.py 2d_feature_extraction.xml test-data/input.tiff test-data/out.tsv |
added:
creators.xml |
b |
diff -r 0a53256b48c6 -r 2436a8807ad1 2d_feature_extraction.py --- a/2d_feature_extraction.py Fri Nov 10 14:23:12 2023 +0000 +++ b/2d_feature_extraction.py Thu Apr 04 15:23:23 2024 +0000 |
[ |
b"@@ -8,119 +8,120 @@\n import skimage.morphology\n import skimage.segmentation\n \n-# TODO make importable by python script\n \n-parser = argparse.ArgumentParser(description='Extract Features 2D')\n+if __name__ == '__main__':\n+\n+ parser = argparse.ArgumentParser(description='Extract image features')\n \n-# TODO create factory for boilerplate code\n-features = parser.add_argument_group('compute features')\n-features.add_argument('--all', dest='all_features', action='store_true')\n-features.add_argument('--label', dest='add_label', action='store_true')\n-features.add_argument('--patches', dest='add_roi_patches', action='store_true')\n-features.add_argument('--max_intensity', dest='max_intensity', action='store_true')\n-features.add_argument('--mean_intensity', dest='mean_intensity', action='store_true')\n-features.add_argument('--min_intensity', dest='min_intensity', action='store_true')\n-features.add_argument('--moments_hu', dest='moments_hu', action='store_true')\n-features.add_argument('--centroid', dest='centroid', action='store_true')\n-features.add_argument('--bbox', dest='bbox', action='store_true')\n-features.add_argument('--area', dest='area', action='store_true')\n-features.add_argument('--filled_area', dest='filled_area', action='store_true')\n-features.add_argument('--convex_area', dest='convex_area', action='store_true')\n-features.add_argument('--perimeter', dest='perimeter', action='store_true')\n-features.add_argument('--extent', dest='extent', action='store_true')\n-features.add_argument('--eccentricity', dest='eccentricity', action='store_true')\n-features.add_argument('--equivalent_diameter', dest='equivalent_diameter', action='store_true')\n-features.add_argument('--euler_number', dest='euler_number', action='store_true')\n-features.add_argument('--inertia_tensor_eigvals', dest='inertia_tensor_eigvals', action='store_true')\n-features.add_argument('--major_axis_length', dest='major_axis_length', action='store_true')\n-features.add_argument('--minor_axis_length', dest='minor_axis_length', action='store_true')\n-features.add_argument('--orientation', dest='orientation', action='store_true')\n-features.add_argument('--solidity', dest='solidity', action='store_true')\n-features.add_argument('--moments', dest='moments', action='store_true')\n-features.add_argument('--convexity', dest='convexity', action='store_true')\n+ # TODO create factory for boilerplate code\n+ features = parser.add_argument_group('compute features')\n+ features.add_argument('--all', dest='all_features', action='store_true')\n+ features.add_argument('--label', dest='add_label', action='store_true')\n+ features.add_argument('--patches', dest='add_roi_patches', action='store_true')\n+ features.add_argument('--max_intensity', dest='max_intensity', action='store_true')\n+ features.add_argument('--mean_intensity', dest='mean_intensity', action='store_true')\n+ features.add_argument('--min_intensity', dest='min_intensity', action='store_true')\n+ features.add_argument('--moments_hu', dest='moments_hu', action='store_true')\n+ features.add_argument('--centroid', dest='centroid', action='store_true')\n+ features.add_argument('--bbox', dest='bbox', action='store_true')\n+ features.add_argument('--area', dest='area', action='store_true')\n+ features.add_argument('--filled_area', dest='filled_area', action='store_true')\n+ features.add_argument('--convex_area', dest='convex_area', action='store_true')\n+ features.add_argument('--perimeter', dest='perimeter', action='store_true')\n+ features.add_argument('--extent', dest='extent', action='store_true')\n+ features.add_argument('--eccentricity', dest='eccentricity', action='store_true')\n+ features.add_argument('--equivalent_diameter', dest='equivalent_diameter', action='store_true')\n+ features.add_argument('--euler_number', dest='euler_number', action='store_true')\n+ features.add_argument('--inertia_tensor_eigvals', dest='inertia_tensor_eigvals', action='store_true')\n+ features.add_argument("..b"s.all_features:\n- df['perimeter'] = df['it'].map(lambda ait: regions[ait].perimeter)\n-if args.extent or args.all_features:\n- df['extent'] = df['it'].map(lambda ait: regions[ait].extent)\n-if args.eccentricity or args.all_features:\n- df['eccentricity'] = df['it'].map(lambda ait: regions[ait].eccentricity)\n-if args.equivalent_diameter or args.all_features:\n- df['equivalent_diameter'] = df['it'].map(lambda ait: regions[ait].equivalent_diameter)\n-if args.euler_number or args.all_features:\n- df['euler_number'] = df['it'].map(lambda ait: regions[ait].euler_number)\n-if args.inertia_tensor_eigvals or args.all_features:\n- df['inertia_tensor_eigvals'] = df['it'].map(lambda ait: regions[ait].inertia_tensor_eigvals)\n-if args.major_axis_length or args.all_features:\n- df['major_axis_length'] = df['it'].map(lambda ait: regions[ait].major_axis_length)\n-if args.minor_axis_length or args.all_features:\n- df['minor_axis_length'] = df['it'].map(lambda ait: regions[ait].minor_axis_length)\n-if args.orientation or args.all_features:\n- df['orientation'] = df['it'].map(lambda ait: regions[ait].orientation)\n-if args.solidity or args.all_features:\n- df['solidity'] = df['it'].map(lambda ait: regions[ait].solidity)\n-if args.moments or args.all_features:\n- df['moments'] = df['it'].map(lambda ait: regions[ait].moments)\n-if args.convexity or args.all_features:\n- perimeter = df['it'].map(lambda ait: regions[ait].perimeter)\n- area = df['it'].map(lambda ait: regions[ait].area)\n- df['convexity'] = area / (perimeter * perimeter)\n+ if args.centroid or args.all_features:\n+ df['centroid'] = df['it'].map(lambda ait: regions[ait].centroid)\n+ if args.bbox or args.all_features:\n+ df['bbox'] = df['it'].map(lambda ait: regions[ait].bbox)\n+ if args.area or args.all_features:\n+ df['area'] = df['it'].map(lambda ait: regions[ait].area)\n+ if args.filled_area or args.all_features:\n+ df['filled_area'] = df['it'].map(lambda ait: regions[ait].filled_area)\n+ if args.convex_area or args.all_features:\n+ df['convex_area'] = df['it'].map(lambda ait: regions[ait].convex_area)\n+ if args.perimeter or args.all_features:\n+ df['perimeter'] = df['it'].map(lambda ait: regions[ait].perimeter)\n+ if args.extent or args.all_features:\n+ df['extent'] = df['it'].map(lambda ait: regions[ait].extent)\n+ if args.eccentricity or args.all_features:\n+ df['eccentricity'] = df['it'].map(lambda ait: regions[ait].eccentricity)\n+ if args.equivalent_diameter or args.all_features:\n+ df['equivalent_diameter'] = df['it'].map(lambda ait: regions[ait].equivalent_diameter)\n+ if args.euler_number or args.all_features:\n+ df['euler_number'] = df['it'].map(lambda ait: regions[ait].euler_number)\n+ if args.inertia_tensor_eigvals or args.all_features:\n+ df['inertia_tensor_eigvals'] = df['it'].map(lambda ait: regions[ait].inertia_tensor_eigvals)\n+ if args.major_axis_length or args.all_features:\n+ df['major_axis_length'] = df['it'].map(lambda ait: regions[ait].major_axis_length)\n+ if args.minor_axis_length or args.all_features:\n+ df['minor_axis_length'] = df['it'].map(lambda ait: regions[ait].minor_axis_length)\n+ if args.orientation or args.all_features:\n+ df['orientation'] = df['it'].map(lambda ait: regions[ait].orientation)\n+ if args.solidity or args.all_features:\n+ df['solidity'] = df['it'].map(lambda ait: regions[ait].solidity)\n+ if args.moments or args.all_features:\n+ df['moments'] = df['it'].map(lambda ait: regions[ait].moments)\n+ if args.convexity or args.all_features:\n+ perimeter = df['it'].map(lambda ait: regions[ait].perimeter)\n+ area = df['it'].map(lambda ait: regions[ait].area)\n+ df['convexity'] = area / (perimeter * perimeter)\n \n-del df['it']\n-df.to_csv(out_file, sep='\\t', line_terminator='\\n', index=False)\n+ del df['it']\n+ df.to_csv(out_file, sep='\\t', line_terminator='\\n', index=False)\n" |
b |
diff -r 0a53256b48c6 -r 2436a8807ad1 2d_feature_extraction.xml --- a/2d_feature_extraction.xml Fri Nov 10 14:23:12 2023 +0000 +++ b/2d_feature_extraction.xml Thu Apr 04 15:23:23 2024 +0000 |
b |
@@ -1,5 +1,13 @@ -<tool id="ip_2d_feature_extraction" name="Extract 2D features" version="0.1.1-2"> +<tool id="ip_2d_feature_extraction" name="Extract image features" version="@TOOL_VERSION@+galaxy@VERSION_SUFFIX@" profile="20.05"> <description>with scikit-image</description> + <macros> + <import>creators.xml</import> + <token name="@TOOL_VERSION@">0.14.2</token> + <token name="@VERSION_SUFFIX@">0</token> + </macros> + <creator> + <expand macro="creators/bmcv" /> + </creator> <edam_operations> <edam_operation>operation_3443</edam_operation> </edam_operations> @@ -8,8 +16,8 @@ <xref type="biii">scikit-image</xref> </xrefs> <requirements> + <requirement type="package" version="@TOOL_VERSION@">scikit-image</requirement> <requirement type="package" version="0.23.4">pandas</requirement> - <requirement type="package" version="0.14.2">scikit-image</requirement> <requirement type="package" version="1.15.4">numpy</requirement> <requirement type="package" version="0.15.1">tifffile</requirement> </requirements> @@ -28,15 +36,15 @@ ]]> </command> <inputs> - <param name="input_label" type="data" format="tiff" label="Label file" /> + <param name="input_label" type="data" format="tiff,png" label="Label map" /> <conditional name="use_raw_option"> - <param label="Use original image to compute additional features" name="use_raw" type="select"> - <option selected="True" value="no_original">No original image</option> - <option value="raw_image">Use original image</option> + <param label="Use the intensity image to compute additional features" name="use_raw" type="select"> + <option selected="True" value="no_original">No intensity image</option> + <option value="raw_image">Use intensity image</option> </param> <when value="no_original"></when> <when value="raw_image"> - <param name="input_raw" type="data" format="tiff" label="Original image file" /> + <param name="input_raw" type="data" format="tiff,png" label="Intensity image" /> </when> </conditional> <conditional name="feature_options"> @@ -47,25 +55,25 @@ <when value="all"> </when> <when value="select"> <param name="selected_features" type="select" label="Available features" multiple="true" display="checkboxes"> - <option value="--label">Add label id of label image</option> + <option value="--label">Label from the label map</option> <option value="--patches">Patches (requires original image)</option> <option value="--max_intensity">Max Intensity (requires original image)</option> <option value="--mean_intensity">Mean Intensity (requires original image)</option> <option value="--min_intensity">Minimum Intensity (requires original image)</option> <option value="--moments_hu">Moments Hu</option> <option value="--centroid">Centroid</option> - <option value="--bbox">Bounding Box</option> + <option value="--bbox">Bounding box</option> <option value="--area">Area</option> - <option value="--filled_area">Filled Area</option> - <option value="--convex_area">Convex Area</option> + <option value="--filled_area">Filled area</option> + <option value="--convex_area">Convex area</option> <option value="--perimeter">Perimeter</option> <option value="--extent">Extent</option> <option value="--eccentricity">Eccentricity</option> - <option value="--equivalent_diameter">Equivalent Diameter</option> - <option value="--euler_number">Euler Number</option> - <option value="--inertia_tensor_eigvals">Inertia Tensor Eigenvalues</option> - <option value="--major_axis_length">Major Axis Length</option> - <option value="--minor_axis_length">Minor Axis Length</option> + <option value="--equivalent_diameter">Equivalent diameter</option> + <option value="--euler_number">Euler number</option> + <option value="--inertia_tensor_eigvals">Inertia tensor eigenvalues</option> + <option value="--major_axis_length">Major axis length</option> + <option value="--minor_axis_length">Minor axis length</option> <option value="--orientation">Orientation</option> <option value="--solidity">Solidity</option> <option value="--moments">Moments</option> @@ -81,14 +89,19 @@ <test> <param name="input_label" value="input.tiff"/> <param name="features" value="select"/> - <param name="selected_features" value="--area"/> + <param name="selected_features" value="--label,--area"/> <output name="output" ftype="tabular" value="out.tsv"/> </test> </tests> <help> - **What it does** + + **Computes features of a label map.** - This tool computes several features of a 2D label image and optionally more features using the original image. + The computed features are computed based solely on the properties of the labels in the label map, + or, optionally, by also taking the intensities from a corresponding intensity image into account. + + The label map must be a 2-D or 3-D single-channel image. + </help> <citations> <citation type="doi">10.1016/j.jbiotec.2017.07.019</citation> |
b |
diff -r 0a53256b48c6 -r 2436a8807ad1 creators.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/creators.xml Thu Apr 04 15:23:23 2024 +0000 |
b |
@@ -0,0 +1,23 @@ +<macros> + + <xml name="creators/bmcv"> + <organization name="Biomedical Computer Vision Group, Heidelberg Universtiy" alternateName="BMCV" url="http://www.bioquant.uni-heidelberg.de/research/groups/biomedical_computer_vision.html" /> + <yield /> + </xml> + + <xml name="creators/alliecreason"> + <person givenName="Allison" familyName="Creason"/> + <yield/> + </xml> + + <xml name="creators/bugraoezdemir"> + <person givenName="Bugra" familyName="Oezdemir"/> + <yield/> + </xml> + + <xml name="creators/thawn"> + <person givenName="Till" familyName="Korten"/> + <yield/> + </xml> + +</macros> |
b |
diff -r 0a53256b48c6 -r 2436a8807ad1 test-data/input.tiff |
b |
Binary file test-data/input.tiff has changed |
b |
diff -r 0a53256b48c6 -r 2436a8807ad1 test-data/out.tsv --- a/test-data/out.tsv Fri Nov 10 14:23:12 2023 +0000 +++ b/test-data/out.tsv Thu Apr 04 15:23:23 2024 +0000 |
b |
@@ -1,12 +1,3 @@ -area -612 -612 -375 -375 -729 -729 -399 -399 -3 -3 -434042 +label area +1 8 +2 9 |