Core modules¶
Core image processing functions. Any function can be executed in manual mode (python code) or interactive mode (yaml files). In general, the typical order in which the different steps are performed is something like:
preprocessing > segmentation > measurement > visualization > export
However, since phenopype version 2 you can arrange them however you like.
Preprocessing¶
- phenopype.core.preprocessing.blur(image, kernel_size=5, method='averaging', sigma_color=75, sigma_space=75, verbose=False, custom_kernel=None, **kwargs)¶
Apply a blurring algorithm to an image with enhanced features.
- Parameters:
image (ndarray) – The input image.
kernel_size (int, optional) – Size of the blurring kernel, must be positive and odd.
method (str, optional) – Blurring algorithm: ‘averaging’, ‘gaussian’, ‘median’, ‘bilateral’, or ‘custom’.
sigma_color (int, optional) – For ‘bilateral’ filter, the filter sigma in the color space.
sigma_space (int, optional) – For ‘bilateral’ filter, the filter sigma in the coordinate space.
verbose (bool, optional) – If True, prints additional details about the process.
custom_kernel (ndarray, optional) – Custom kernel for convolution if method is ‘custom’.
- Returns:
The blurred image.
- Return type:
ndarray
- phenopype.core.preprocessing.clip_histogram(image, percent=1)¶
Enhances the contrast of an image by clipping the histogram and applying histogram stretching.
- Parameters:
image (ndarray) – The input grayscale image.
percent (float, optional) – The percentage of the histogram to be clipped from both tails. Default is 1%.
- Returns:
image – The contrast-enhanced image.
- Return type:
ndarray
- phenopype.core.preprocessing.create_mask(image, tool='rectangle', include=True, label=None, line_colour='default', line_width='auto', label_colour='default', label_size='auto', label_width='auto', **kwargs)¶
Mask an area by drawing a rectangle or polygon. Multiple mask components count as the same mask - e.g., if objects that you would like to mask out or include can be scattered across the image. Rectangles will finish upon lifting the mouse button, polygons are completed by pressing CTRL.
ANNOTATION FUNCTION
- Parameters:
image (array) – input image
tool ({"rectangle","polygon"} str, optional) – Type of mask tool to be used. The default is “rectangle”.
include (bool, optional) – include or exclude area inside mask
label (str, optional) – label string for this mask and all its components
line_colour ({"default", ... see phenopype.print_colours()} str, optional) – contour line colour - default colour as specified in settings
line_width ({"auto", ... int > 0} int, optional) – contour line width - automatically scaled to image by default
label_colour ({"default", ... see phenopype.print_colours()} str, optional) – contour label colour - default colour as specified in settings
label_size ({"auto", ... int > 0} int, optional) – contour label font size - automatically scaled to image by default
label_width ({"auto", ... int > 0} int, optional) – contour label font thickness - automatically scaled to image by default
- Returns:
annotations – phenopype annotation containing mask coordinates
- Return type:
dict
- phenopype.core.preprocessing.detect_mask(image, include=True, label=None, shape='circle', resize=1, circle_args={'dp': 1, 'max_radius': 0, 'min_dist': 50, 'min_radius': 0, 'param1': 200, 'param2': 100}, **kwargs)¶
Detects geometric shapes in a single channel image (currently only circles are implemented) and converts boundary contours to a mask to include or exclude parts of the image. Depending on the object type, different settings apply.
- Parameters:
image (ndarray) – input image (single channel).
include (bool, optional) – should the resulting mask include or exclude areas. The default is True.
shape (str, optional) – which geometric shape to be detected. The default is “circle”.
resize ((0.1-1) float, optional) – resize factor for image (some shape detection algorithms are slow if the image is very large). The default is 1.
circle_args (dict, optional) –
A set of options for circle detection (for details see https://docs.opencv.org/3.4.9/dd/d1a/group__imgproc__feature.html ):
dp: inverse ratio of the accumulator resolution to the image ressolution
min_dist: minimum distance between the centers of the detected circles
param1: higher threshold passed to the canny-edge detector
param2: accumulator threshold - smaller = more false positives
min_radius: minimum circle radius
max_radius: maximum circle radius
The default is:
{ "dp":1, "min_dist":50, "param1":200, "param2":100, "min_radius":0, "max_radius":0 }
- Returns:
annotations – phenopype annotation
- Return type:
dict
- phenopype.core.preprocessing.create_reference(image, unit='mm', line_colour='default', line_width='auto', label=True, label_colour='default', label_size='auto', label_width='auto', mask=False, **kwargs)¶
Measure a size or colour reference card. Minimum input interaction is measuring a size reference: click on two points inside the provided image, and enter the distance - returns the pixel-to-mm-ratio.
In an optional second step, drag a rectangle mask over the reference card to exclude it from anysubsequent image segementation. The mask can also be stored as a template for automatic reference detection with the “detect_reference” function.
- Parameters:
image (ndarray) – input image
mask (bool, optional) – mask a reference card inside the image and return its coordinates as
line_colour ({"default", ... see phenopype.print_colours()} str, optional) – contour line colour - default colour as specified in settings
line_width ({"auto", ... int > 0} int, optional) – contour line width - automatically scaled to image by default
label_colour ({"default", ... see phenopype.print_colours()} str, optional) – contour label colour - default colour as specified in settings
label_size ({"auto", ... int > 0} int, optional) – contour label font size - automatically scaled to image by default
label_width ({"auto", ... int > 0} int, optional) – contour label font thickness - automatically scaled to image by default
- Returns:
annotations – phenopype annotation
- Return type:
dict
- phenopype.core.preprocessing.detect_reference(image, template, px_ratio, unit, template_id='a', get_mask=True, manual_fallback=True, correct_colours=False, min_matches=10, resize=1, **kwargs)¶
Find reference from a template created with “create_reference”. Image registration is run by the “AKAZE” algorithm. Future implementations will include more algorithms to select from. First, use “create_reference” with “mask=True” and pass the template to this function. This happends automatically in the low and high throughput workflow. Use “equalize=True” to adjust the histograms of all colour channels to the reference image.
AKAZE: http://www.bmva.org/bmvc/2013/Papers/paper0013/abstract0013.pdf
- Parameters:
image (ndarray) – input image
template (array) – template image-crop containing reference card
px_ratio – px-mm-ratio of template image
get_mask (bool) – retrieve mask and create annotation. The default is True.
manual_fallback (bool) – use manual reference-tool in case detection fails. The default is True.
correct_colours (bool, optional) – should the provided image be colour corrected to match the template images’ histogram
min_matches (int, optional) – minimum key point matches for image registration
resize (num, optional) – resize image to speed up detection process. default: 0.5 for images with diameter > 5000px (WARNING: too low values may result in poor detection performance or even crashes)
- Returns:
annotations – phenopype annotation
- Return type:
dict
- phenopype.core.preprocessing.detect_QRcode(image, rot_steps=10, preprocess=True, rotate=True, max_dim=1000, enter_manually=False, label='ID', label_colour='default', label_size='auto', label_width='auto', **kwargs)¶
Find and read out a QR code that is contained inside an image. Rotate image until code is detected, or enter code manually if detection fails.
- Parameters:
image (ndarray) – input image
rot_steps (int, optional) – angle by which image is rotated (until 360 is reached). The default is 20.
enter_manually (bool, optional) – enter code manually if detection fails. The default is False.
show_results (bool, optional) – show the detection results. The default is False.
label_colour ({"default", ... see phenopype.print_colours()} str, optional) – text colour - default colour as specified in settings
label_size ({"auto", ... int > 0} int, optional) – text label font size - automatically scaled to image by default
label_width ({"auto", ... int > 0} int, optional) – text label font thickness - automatically scaled to image by default
- Returns:
annotations – phenopype annotation
- Return type:
dict
- phenopype.core.preprocessing.decompose_image(image, channel='gray', invert=False, **kwargs)¶
Extract single channel from multi-channel array.
- Parameters:
image (ndarray) – input image
channel ({"raw", "gray", "red", "green", "blue", "hue", "saturation", "value"} str, optional) – select specific image channel
invert (false, bool) – invert all pixel intensities in image (e.g. 0 to 255 or 100 to 155)
- Returns:
image – decomposed image.
- Return type:
ndarray
- phenopype.core.preprocessing.write_comment(image, label='ID', label_colour='default', label_size='auto', label_width='auto', **kwargs)¶
Add a comment.
- Parameters:
image (ndarray) – input image
field (str, optional) – name the comment-field (useful for later processing). The default is “ID”.
- Returns:
annotation_ref – phenopype annotation containing comment
- Return type:
dict
Segmentation¶
- phenopype.core.segmentation.contour_to_mask(annotations, include=True, label=None, box_margin=0, largest=True, **kwargs)¶
Converts a contour to a mask annotation, e.g. for the purpose of creating an ROI and exporting it or for subsequent segmentation inside that mask. Creates a rectangle bounding box around the largest or all contours.
- Parameters:
annotation (dict) – phenopype annotation containing contours
include (bool, optional) – include or exclude area inside mask
label (str, optional) – text label for this mask and all its components
box_margin (int, optional) – margin that is added between the outer perimeter of the contour and the box
largest (bool, optional) – either use only the largest contour or concatenate all supplied contours
- Returns:
annotation – phenopype annotation containing contours
- Return type:
dict
- phenopype.core.segmentation.detect_contour(image, approximation='simple', retrieval='ext', match_against=None, apply_drawing=False, offset_coords=[0, 0], stats_mode='circle', min_nodes=3, max_nodes=inf, min_area=0, max_area=inf, min_diameter=0, max_diameter=inf, **kwargs)¶
Find objects in binarized image. The input image needs to be a binarized image A flavor of different approximation algorithms and retrieval intstructions can be applied. The contours can also be filtered for minimum area, diameter or nodes (= number of corners).
- Parameters:
image (ndarray) – input image (binary)
approximation ({"none", "simple", "L1", "KCOS"] str, optional) –
- contour approximation algorithm:
none: no approximation, all contour coordinates are returned
simple: only the minimum coordinates required are returned
L1: Teh-Chin chain approximation algorithm
KCOS: Teh-Chin chain approximation algorithm
retrieval ({"ext", "list", "tree", "ccomp", "flood"} str, optional) –
- contour retrieval procedure:
ext: retrieves only the extreme outer contours
list: retrieves all of the contours without establishing any hierarchical relationships
tree: retrieves all of the contours and reconstructs a full hierarchy of nested contours
ccomp: retrieves all of the contours and organizes them into a two-level hierarchy (parent and child)
flood: flood-fill algorithm
offset_coords (tuple, optional) – offset by which every contour point is shifted.
min_nodes (int, optional) – minimum number of coordinates
max_nodes (int, optional) – maximum number of coordinates
min_area (int, optional) – minimum contour area in pixels
max_area (int, optional) – maximum contour area in pixels
min_diameter (int, optional) – minimum diameter of boundary circle
max_diameter (int, optional) – maximum diameter of boundary circle
- Returns:
annotation – phenopype annotation containing contours
- Return type:
dict
- phenopype.core.segmentation.edit_contour(image, annotations, line_width='auto', overlay_blend=0.2, overlay_colour_left='default', overlay_colour_right='default', **kwargs)¶
Edit contours with a “paintbrush”. The brush size can be controlled by pressing Tab and using the mousewhell. Right-click removes, and left-click adds areas to contours. Overlay colour, transparency (blend) and outline can be controlled.
- Parameters:
image (ndarray) – input image
annotations (dict) – phenopype annotation containing contours
overlay_blend (float, optional) – transparency / colour-mixing of the contour overlay
line_width (int, optional) – add outline to the contours. useful when overlay_blend == 0
left_colour (str, optional) – overlay colour for left click (include). (for options see pp.colour)
right_colour (str, optional) – overlay colour for right click (exclude). (for options see pp.colour)
- Returns:
annotations – phenopype annotation containing contours
- Return type:
dict
- phenopype.core.segmentation.mask_to_contour(annotations, include=True, box_margin=0, **kwargs)¶
Converts a mask to contour annotation, e.g. for the purpose of extracting information from this mask.
- Parameters:
annotation (dict) – phenopype annotation containing masks
include (bool, optional) – include or exclude area inside contour
box_margin (int, optional) – margin that is added between the outer perimeter of the mask and the box
- Returns:
annotation – phenopype annotation containing contours
- Return type:
dict
- phenopype.core.segmentation.morphology(image, kernel_size=5, shape='rect', operation='close', iterations=1, **kwargs)¶
Performs advanced morphological transformations using erosion and dilation as basic operations. Provides different kernel shapes and a suite of operation types (read more about morphological operations here: https://docs.opencv.org/master/db/df6/tutorial_erosion_dilatation.html)
- Parameters:
image (ndarray) – input image (binary)
kernel_size (int, optional) – size of the morphology kernel (has to be odd - even numbers will be ceiled)
shape ({"rect", "cross", "ellipse"} str, optional) – shape of the kernel
operation ({erode, dilate, open, close, gradient, tophat, blackhat, hitmiss} str, optional) –
- the morphology operation to be performed:
erode: remove pixels from the border
dilate: add pixels to the border
open: erosion followed by dilation
close: dilation followed by erosion
gradient: difference between dilation and erosion of an input image
tophat: difference between input image and opening of input image
blackhat: difference between input image and closing of input image
hitmiss: find patterns in binary images (read more here: https://docs.opencv.org/master/db/d06/tutorial_hitOrMiss.html)
iterations (int, optional) – number of times to run morphology operation
- Returns:
image – processed binary image
- Return type:
ndarray
- phenopype.core.segmentation.threshold(image, method='otsu', constant=1, blocksize=99, value=127, channel=None, mask=True, invert=False, **kwargs)¶
Applies a threshold to create a binary image from a grayscale or a multichannel image (see phenopype.core.preprocessing.decompose_image for channel options).
- Three types of thresholding algorithms are supported:
otsu: use Otsu algorithm to choose the optimal threshold value
adaptive: dynamic threshold values across image (uses arguments “blocksize” and “constant”)
binary: fixed threshold value (uses argument “value”)
Mask annotations can be supplied to include or exclude areas.
- Parameters:
image (ndarray) – input image
method ({"otsu", "adaptive", "binary"} str, optional) – type of thresholding algorithm to be used
blocksize (int, optional) – Size of a pixel neighborhood that is used to calculate a threshold value for the pixel (has to be odd - even numbers will be ceiled; for “adaptive” method)
constant (int, optional) – value to subtract from binarization output (for “adaptive” method)
value ({between 0 and 255} int, optional) – thesholding value (for “binary” method)
{"gray" (channel) – which channel of the image to use for thresholding
"red" (str, optional) – which channel of the image to use for thresholding
"green" (str, optional) – which channel of the image to use for thresholding
"blue"} (str, optional) – which channel of the image to use for thresholding
- Returns:
image – binary image
- Return type:
ndarray
- phenopype.core.segmentation.watershed(image, annotations, iterations=1, kernel_size=3, distance_cutoff=0.8, distance_mask=0, distance_type='l1', **kwargs)¶
Performs non-parametric marker-based segmentation - useful if many detected contours are touching or overlapping with each other. Input image should be a binary image that serves as the true background. Iteratively, edges are eroded, the difference serves as markers.
- Parameters:
image (ndarray) – input image
image_thresh (array) – binary image (e.g. from threshold)
kernel_size (int, optional) – size of the diff-kernel (has to be odd - even numbers will be ceiled)
iterations (int, optional) – number of times to apply diff-operation
distance_cutoff ({between 0 and 1} float, optional) – watershed distance transform cutoff (larger values discard more pixels)
distance_mask ({0, 3, 5} int, optional) – size of distance mask - not all sizes work with all distance types (will be coerced to 0)
distance_type ({"user", "l1", "l2", "C", "l12", "fair", "welsch", "huber"} str, optional) – distance transformation type
- Returns:
image – binary image
- Return type:
ndarray
Measurement¶
- phenopype.core.measurement.set_landmark(image, point_colour='default', point_size='auto', label=True, label_colour='default', label_size='auto', label_width='auto', **kwargs)¶
Place landmarks. Note that modifying the appearance of the points will only be effective for the placement, not for subsequent drawing, visualization, and export.
- Parameters:
image (ndarray) – input image
point_colour (str, optional) – landmark point colour (for options see pp.colour)
point_size (int, optional) – landmark point size in pixels
label (bool, optional) – add text label
label_colour (str, optional) – landmark label colour (for options see pp.colour)
label_size (int, optional) – landmark label font size (scaled to image)
label_width (int, optional) – landmark label font width (scaled to image)
- Returns:
annotations – phenopype annotation containing landmarks
- Return type:
dict
- phenopype.core.measurement.set_polyline(image, line_width='auto', line_colour='default', **kwargs)¶
Set points, draw a connected line between them, and measure its length. Note that modifying the appearance of the lines will only be effective for the placement, not for subsequent drawing, visualization, and export.
- Parameters:
image (ndarray) – input image
line_width (int, optional) – width of polyline
line_colour (str, optional) – poly line colour (for options see pp.colour)
- Returns:
annotations – phenopype annotation containing polylines
- Return type:
dict
- phenopype.core.measurement.detect_skeleton(annotations, thinning='zhangsuen', **kwargs)¶
Applies a binary blob thinning operation, to achieve a skeletization of the input image using the technique, i.e. retrieve the topological skeleton (https://en.wikipedia.org/wiki/Topological_skeleton), using the algorithms of Thang-Suen or Guo-Hall.
- Parameters:
image (ndarray) – input image
annotation (dict) – phenopype annotation containing contours
thinning ({"zhangsuen", "guohall"} str, optional) – type of thinning algorithm to apply
- Returns:
annotations – phenopype annotation containing skeleton coords
- Return type:
dict
- phenopype.core.measurement.compute_shape_features(annotations, features=['basic'], min_diameter=5, **kwargs)¶
Collects a set of 41 shape descriptors from every contour. There are three sets of descriptors: basic shape descriptors, moments, and hu moments. Two additional features, contour area and diameter are already provided by the find_contours function. https://docs.opencv.org/3.4.9/d3/dc0/group__imgproc__shape.html
Of the basic shape descriptors, all 12 are translational invariants, 8 are rotation invariant (rect_height and rect_width are not) and 4 are also scale invariant (circularity, compactness, roundness, solidity). https://en.wikipedia.org/wiki/Shape_factor_(image_analysis_and_microscopy)
The moments set encompasses 10 raw spatial moments (some are translation and rotation invariants, but not all), 7 central moments (all translational invariant) and 7 central normalized moments (all translational and scale invariant). https://en.wikipedia.org/wiki/Image_moment
The 7 hu moments are derived of the central moments, and are all translation, scale and rotation invariant. http://www.sci.utah.edu/~gerig/CS7960-S2010/handouts/Hu.pdf
- Basic shape descriptors:
circularity = 4 * np.pi * contour_area / contour_perimeter_length^2
compactness = √(4 * contour_area / pi) / contour_diameter
min_rect_max = minimum bounding rectangle major axis
min_rect_min = minimum bounding rectangle minor axis
perimeter_length = total length of contour perimenter
rect_height = height of the bounding rectangle (“caliper dim 1”)
rect_width = width of the bounding rectangle (“caliper dim 2”)
roundness = (4 * contour_area) / (pi * contour_perimeter_length^2)
solidity = contour_area / convex_hull_area
tri_area = area of minimum bounding triangle
- Moments:
raw moments = m00, m10, m01, m20, m11, m02, m30, m21, m12, m03
central moments = mu20, mu11, mu02, mu30, mu21, mu12, mu03,
normalized central moments = nu20, nu11, nu02, nu30, nu21, nu12, nu03
- Hu moments:
- hu moments:
hu1 - hu7
- Parameters:
image (ndarray) – input image
features (["basic", "moments", "hu_moments"]) – type of shape features to extract
- Returns:
annotations – phenopype annotation containing shape features
- Return type:
dict
- phenopype.core.measurement.compute_texture_features(image, annotations, features=['firstorder'], channel_names=['blue', 'green', 'red'], min_diameter=5, **kwargs)¶
Collects 120 texture features using the pyradiomics feature extractor ( https://pyradiomics.readthedocs.io/en/latest/features.html ):
firstorder: First Order Statistics (19 features)
shape2d: Shape-based (2D) (16 features)
glcm: Gray Level Cooccurence Matrix (24 features)
gldm: Gray Level Dependence Matrix (14 features)
glrm: Gray Level Run Length Matrix (16 features)
glszm: Gray Level Size Zone Matrix (16 features)
ngtdm: Neighbouring Gray Tone Difference Matrix (5 features)
Features are collected from every contour that is supplied along with the raw image, which, depending on the number of contours, may result in long computing time and very large dataframes.
The specified channels correspond to the channels that can be selected in phenopype.core.preprocessing.decompose_image.
- Parameters:
image (ndarray) – input image
annotation (dict) – phenopype annotation containing contours
features (["firstorder", "shape", "glcm", "gldm", "glrlm", "glszm", "ngtdm"] list, optional) – type of texture features to extract
channels (list, optional) – image channel to extract texture features from. if none is given, will extract from all channels in image
min_diameter (int, optional) – minimum diameter of the contour (shouldn’t be too small for sensible feature extraction’)
- Returns:
annotations – phenopype annotation containing texture features
- Return type:
dict
Visualization¶
- phenopype.core.visualization.draw_comment(image, annotations, label_colour='default', label_size='auto', label_width='auto', background=True, background_colour='white', background_pad=10, background_border='black', font='simplex', **kwargs)¶
- Parameters:
image (ndarray) – image used as canvas
annotation (dict) – phenopype annotation containing QR-code (comment)
line_colour ({"default", ... see phenopype.print_colours()} str, optional) – contour line colour - default colour as specified in settings
line_width ({"auto", ... int > 0} int, optional) – contour line width - automatically scaled to image by default
label (bool, optional) – draw reference label
label_colour ({"default", ... see phenopype.print_colours()} str, optional) – contour label colour - default colour as specified in settings
label_size ({"auto", ... int > 0} int, optional) – contour label font size - automatically scaled to image by default
label_width ({"auto", ... int > 0} int, optional) – contour label font thickness - automatically scaled to image by default
**kwargs (TYPE) – DESCRIPTION.
- Returns:
image – canvas with contours
- Return type:
ndarray
- phenopype.core.visualization.draw_contour(image, annotations, fill=0.3, line_colour='default', line_width='auto', label=False, label_colour='default', label_size='auto', label_width='auto', offset_coords=None, bbox=False, bbox_ext=20, bbox_colour='default', bbox_line_width='auto', **kwargs)¶
Draw contours and their labels onto a canvas. Can be filled or empty, offset coordinates can be supplied.
- Parameters:
image (ndarray) – image used as canvas
annotation (dict) – phenopype annotation containing contours
offset_coords (tuple, optional) – offset coordinates, will be added to all contours
label (bool, optional) – draw contour label
fill (float, optional) – background transparency for contour fill (0=no fill).
level (int, optional) – the default is 3.
line_colour ({"default", ... see phenopype.print_colours()} str, optional) – contour line colour - default colour as specified in settings
line_width ({"auto", ... int > 0} int, optional) – contour line width - automatically scaled to image by default
label_colour ({"default", ... see phenopype.print_colours()} str, optional) – contour label colour - default colour as specified in settings
label_size ({"auto", ... int > 0} int, optional) – contour label font size - automatically scaled to image by default
label_width ({"auto", ... int > 0} int, optional) – contour label font thickness - automatically scaled to image by default
bounding_box (bool, optional) – draw bounding box around the contour
bounding_box_ext (in, optional) – value in pixels by which the bounding box should be extended
bounding_box_colour ({"green", "red", "blue", "black", "white"} str, optional) – bounding box line colour
bounding_box_line_width (int, optional) – bounding box line width
- Returns:
image – canvas with contours
- Return type:
ndarray
- phenopype.core.visualization.draw_landmark(image, annotations, label=True, label_colour='default', label_size='auto', label_width='auto', offset=0, point_colour='default', point_size='auto', **kwargs)¶
Draw landmarks into an image.
- Parameters:
image (ndarray) – image used as canvas
annotation (dict) – phenopype annotation containing landmarks
label (bool, optional) – draw landmark label
label_colour ({"default", ... see phenopype.print_colours()} str, optional) – contour label colour - default colour as specified in settings
label_size ({"auto", ... int > 0} int, optional) – contour label font size - automatically scaled to image by default
label_width ({"auto", ... int > 0} int, optional) – contour label font thickness - automatically scaled to image by default
offset (int, optional) – add offset (in pixels) to text location (to bottom-left corner of the text string)
point_colour ({"green", "red", "blue", "black", "white"} str, optional) – landmark point colour
point_size (int, optional) – landmark point size in pixels
- Returns:
image – canvas with landmarks
- Return type:
ndarray
- phenopype.core.visualization.draw_mask(image, annotations, line_colour='default', line_width='auto', fill=0, label=False, label_colour='default', label_size='auto', label_width='auto', **kwargs)¶
Draw masks into an image. This function is also used to draw the perimeter of a created or detected reference card.
- Parameters:
image (ndarray) – image used as canvas
annotation (dict) – phenopype annotation containing masks
label (bool, optional) – draw mask label
line_colour ({"default", ... see phenopype.print_colours()} str, optional) – contour line colour - default colour as specified in settings
line_width ({"auto", ... int > 0} int, optional) – contour line width - automatically scaled to image by default
label_colour ({"default", ... see phenopype.print_colours()} str, optional) – contour label colour - default colour as specified in settings
label_size ({"auto", ... int > 0} int, optional) – contour label font size - automatically scaled to image by default
label_width ({"auto", ... int > 0} int, optional) – contour label font thickness - automatically scaled to image by default
- Returns:
image – canvas with masks
- Return type:
ndarray
- phenopype.core.visualization.draw_polyline(image, annotations, line_colour='default', line_width='auto', show_nodes=False, node_colour='default', node_size='auto', **kwargs)¶
Draw masks into an image. This function is also used to draw the perimeter of a created or detected reference card.
- Parameters:
image (ndarray) – image used as canvas
annotation (dict) – phenopype annotation containing lines
line_colour ({"default", ... see phenopype.print_colours()} str, optional) – contour line colour - default colour as specified in settings
line_width ({"auto", ... int > 0} int, optional) – contour line width - automatically scaled to image by default DESCRIPTION. The default is “auto”.
show_nodes (bool, optional) – show nodes of polyline. The default is False.
node_colour (str, optional) – colour of node points. The default is “default”.
node_size (int, optional) – size of node points. The default is “auto”.
- Returns:
image – canvas with lines
- Return type:
ndarray
- phenopype.core.visualization.draw_QRcode(image, annotations, line_colour='default', line_width='auto', label=True, label_colour='default', label_size='auto', label_width='auto', **kwargs)¶
- Parameters:
image (ndarray) – image used as canvas
annotation (dict) – phenopype annotation containing QR-code (comment)
line_colour ({"default", ... see phenopype.print_colours()} str, optional) – contour line colour - default colour as specified in settings
line_width ({"auto", ... int > 0} int, optional) – contour line width - automatically scaled to image by default
label (bool, optional) – draw reference label
label_colour ({"default", ... see phenopype.print_colours()} str, optional) – contour label colour - default colour as specified in settings
label_size ({"auto", ... int > 0} int, optional) – contour label font size - automatically scaled to image by default
label_width ({"auto", ... int > 0} int, optional) – contour label font thickness - automatically scaled to image by default
**kwargs (TYPE) – DESCRIPTION.
- Returns:
canvas – DESCRIPTION.
- Return type:
TYPE
- phenopype.core.visualization.draw_reference(image, annotations, line_colour='default', line_width='auto', label=True, label_colour='default', label_size='auto', label_width='auto', **kwargs)¶
- Parameters:
image (ndarray) – image used as canvas
annotation (dict) – phenopype annotation containing reference data
line_colour ({"default", ... see phenopype.print_colours()} str, optional) – contour line colour - default colour as specified in settings
line_width ({"auto", ... int > 0} int, optional) – contour line width - automatically scaled to image by default
label (bool, optional) – draw reference label
label_colour ({"default", ... see phenopype.print_colours()} str, optional) – contour label colour - default colour as specified in settings
label_size ({"auto", ... int > 0} int, optional) – contour label font size - automatically scaled to image by default
label_width ({"auto", ... int > 0} int, optional) – contour label font thickness - automatically scaled to image by default
- Returns:
canvas – DESCRIPTION.
- Return type:
TYPE
- phenopype.core.visualization.select_canvas(image, canvas='raw', multi_channel=True, invert=False, **kwargs)¶
Isolate a colour channel from an image or select canvas for the pype method.
- Parameters:
image (ndarray) – image used as canvas
canvas ({"mod", "bin", "gray", "raw", "red", "green", "blue"} str, optional) – the type of canvas to be used for visual feedback. some types require a function to be run first, e.g. “bin” needs a segmentation algorithm to be run first. black/white images don’t have colour channels. coerced to 3D array by default
multi (bool, optional) – coerce returned array to multichannel (3-channel)
- Returns:
canvas – canvas for drawing
- Return type:
ndarray
Export¶
- phenopype.core.export.convert_annotation(annotations, annotation_type, annotation_id, annotation_type_new, annotation_id_new, overwrite=False, **kwargs)¶
convert coordinates from one annotation type to another. currently, only converting from contour to mask format is possible
- Parameters:
annotations (dict) – A phenopype annotation dictionary.
annotation_type (str | list of str) – If dict contains multiple annotation types, select one or more to load. None will load all types.
annotation_id (str | list of str) – If file contains multiple annotation IDs, select one or more to load. None will load all IDs within a type.
annotation_type_new (str) – target annotation type
annotation_id_new (str | list of str, optional) – target annotation id
overwrite (bool, optional) – if target exists, overwrite? The default is False.
- Return type:
None.
- phenopype.core.export.export_csv(annotations, dir_path, annotation_type=None, image_name=None, overwrite=False, **kwargs)¶
export annotations from json to csv format.
- Parameters:
annotations (dict) – A phenopype annotation dictionary.
dir_path (str) – To which folder should the csv file be exported. PYPE: Automatically set to the current image directory
annotation_type (str / list, optional) – Which annotation types should be exported - can be string or list of strings.
image_name (str) – Image name to be added as a column PYPE: Automatically adds the image name.
overwrite (bool, optional) – Should an existing csv file be overwritten. The default is False.
- Return type:
None.
- phenopype.core.export.load_annotation(filepath, annotation_type=None, annotation_id=None, tag=None, **kwargs)¶
load phenopype annotations file
- Parameters:
filepath (str) – Path to JSON file containing annotations
annotation_type (str | list of str, optional) – If file contains multiple annotation types, select one or more to load. None will load all types. The default is None.
annotation_id (str | list of str, optional) – If file contains multiple annotation IDs, select one or more to load. None will load all IDs within a type. The default is None.
- Returns:
Loaded annotations.
- Return type:
dict
- phenopype.core.export.save_annotation(annotations, dir_path, annotation_type=None, annotation_id=None, overwrite=False, **kwargs)¶
save phenopype annotations file
- Parameters:
annotation (dict) –
Annotation dictionary formatted by phenopype specifications:
{ annotation_type = { annotation_id = annotation, annotation_id = annotation, ... }, annotation_type = { annotation_id = annotation, annotation_id = annotation, ... }, ... }
annotation_id (str, optional) – String (“a”-“z”) specifying the annotation ID to be saved. None will save all IDs. The default is None.
dir_path (str, optional) – Path to folder where annotation should be saved. None will save the annotation in the current Python working directory. The default is None.
file_name (str, optional) – Filename for JSON file containing annotation. The default is “annotations.json”.
overwrite (bool, optional) –
Overwrite options should file or annotation entry in file exist:
False = Neither file or entry will be overwritten
True or “entry” = A single entry will be overwritten
”file” = The whole will be overwritten.
The default is False.
- Return type:
None.
- phenopype.core.export.save_ROI(image, annotations, dir_path, file_name, channel='raw', counter=True, which='all', suffix=None, rotate=False, rotate_padding=5, angle_apply=None, align='v', ext='jpg', background='original', canvas_dim=False, canvas_fit=False, min_dim=False, max_dim=False, padding=True, **kwargs)¶
Save a region of interest (ROI) indicated by contour or mask coordinates as a crop of the original image, optionally with white background
- Parameters:
image (ndarray) – An image containing regions of interest (ROI).
annotations (dict) – A phenopype annotation dict containing one or more contour coordinate entries.
dir_path (str, optional) – Path to folder where annotation should be saved. None will save the annotation in the current Python working directory. The default is None.
file_name (str) – Name for ROI series (should reflect image content, not “ROI” or the like which is specified with prefix or suffix arguments). The contour index will be added as a numeric string at the end of the filename.
channel (str, optional) – Which channel to save. The default is “raw”.
counter (TYPE, optional) – Whether to add a contour to the filename. The default is True.
prefix (str, optional) – Prefix to prepend to individual ROI filenames. The default is None.
suffix (str, optional) – Suffix to append to individual ROI filenames. The default is “roi”.
extension (str, optional) – New e. The default is “png”.
background (str, optional) – Sets background. The default is “original”, providing the background contained within the bounding rectangle. “transparent” will produce a png file with tranparent background. “white”, “black” or any other color will produce a different background color.
- Return type:
None.
- phenopype.core.export.save_canvas(image, file_path, ext='jpg', resize=0.5, overwrite=True, **kwargs)¶
- Parameters:
image (ndarray) – A canvas to be saved.
save_suffix (str) – A suffix to be appended to the filename.
dir_path (str) – Path to directory to save canvas.
resize (float, optional) – resize factor for the image (1 = 100%, 0.5 = 50%, 0.1 = 10% of
- Return type:
None.