pypocquant.lib.analysis
Module Contents
Functions
|
Determine the minimal euclidean distance of a set of coordinates. |
|
Assign the peaks to the corresponding bar based on the known relative position in the sensor. |
|
Inverts an image. |
|
Find all local minima of the array, separated by at least min_distance. |
|
This method is used by find_peak_bounds() and is not meant to be used as |
|
This method is used by find_peak_bounds() and is not meant to be used as |
|
Find the lower and upper bounds of current band. |
|
Use a robust linear estimator to estimate the background of the profile and subtract it. |
|
Estimate threshold for significant peaks in sensor signal. |
|
Quantify the band signal across the sensor. |
|
Returns the sensor area at the requested position without searching. |
|
Extract the sensor area from the gray strip image. |
|
Segments the strip from the box image and rotates it so that it is horizontal. |
|
Make the bounding box come closer to the strip by remove bumps along the outline. |
|
Check if the given point (x, y) is contained in the rect (x0, y0, width, height). |
|
Calculate the left and right rectangles to be used for the orientation |
|
Estimate the orientation of the strip looking at features in the area around the |
|
Try reading the given text on the strip. The text is expected to be on one |
|
Try to extract the patient data by OCR. |
-
pypocquant.lib.analysis.get_min_dist(xy1, xy2) Determine the minimal euclidean distance of a set of coordinates.
- Parameters:
xy1 – First set of coordinates
xy2 – Second set of ccordinates
- Returns:
Minimal distance
- Return type:
tuple
-
pypocquant.lib.analysis.identify_bars_alt(peak_positions: list, profile_length: int, sensor_band_names: Tuple[str, …], expected_relative_peak_positions: Tuple[float, …], tolerance: float = 0.1) Assign the peaks to the corresponding bar based on the known relative position in the sensor.
- Parameters:
peak_positions – list List of absolute peak positions in pixels.
profile_length – Length of the profile in pixels.
sensor_band_names – Tuple[str, …] Tuple of sensor band names.
expected_relative_peak_positions – Tuple[float, …} Tuple of expected relative (0.0 -> 1.0) peak positions.
tolerance – Distance tolerance between pean position and expected position for assignment.
- Returns:
dictionary of band assignments: {bar_name: index}
-
pypocquant.lib.analysis.invert_image(image, bit_depth=8) Inverts an image.
- Parameters:
image – Image to be inverted
bit_depth – Bit depth of image
- Returns:
image_inv: Inverted image.
- Return type:
uint8
-
pypocquant.lib.analysis.local_minima(array, min_distance=1) Find all local minima of the array, separated by at least min_distance.
- Parameters:
array – Signal array
min_distance – Minimal distance for local minima seperation
- Returns:
array: Array with local minimas
- Return type:
np.array
-
pypocquant.lib.analysis._find_lower_background(profile: np.ndarray, peak_index: int, lowest_bound: int, max_skip: int = 1) This method is used by find_peak_bounds() and is not meant to be used as a standalone method.
- Parameters:
profile (np.ndarray) – Signal profile
peak_index (int) – Index of the peak
lowest_bound (int) – Highest bound
max_skip (int) – Max skip
- Returns:
current_lower_bound: Upper bound
- Returns:
current_lower_background: Upper background
- Returns:
d_lower:
-
pypocquant.lib.analysis._find_upper_background(profile: np.ndarray, peak_index: int, highest_bound: int, max_skip: int = 1) This method is used by find_peak_bounds() and is not meant to be used as a standalone method.
- Parameters:
profile (np.ndarray) – Signal profile
peak_index (int) – Index of the peak
highest_bound (int) – Highest bound
max_skip (int) – Max skip
- Returns:
current_upper_bound: Upper bound
- Returns:
current_upper_background: Upper background
- Returns:
d_upper:
-
pypocquant.lib.analysis.find_peak_bounds(profile, border, peak_index, image_log, verbose=False) Find the lower and upper bounds of current band.
- Parameters:
profile (np.ndarray) – Signal profile
border (int) – Border offset
peak_index (int) – Index of the peak
image_log (list) – Image log
- Returns:
current_lower_bound: Lower bound
- Returns:
current_upper_bound: Upper bound
- Returns:
image_log: Log for this image
-
pypocquant.lib.analysis.fit_and_subtract_background(profile, border, subtract_offset=10) Use a robust linear estimator to estimate the background of the profile and subtract it.
- Parameters:
profile (np.ndarray) – Signal profile
border (int) – Border offset
subtract_offset (int) – Fixed offset to be used for substraction.
- Returns:
profile: Background corrected profile.
- Returns:
background: Estimated background.
- Returns:
background_offset: Background offset.
-
pypocquant.lib.analysis.estimate_threshold_for_significant_peaks(profile: np.ndarray, border_x: int, thresh_factor: float) Estimate threshold for significant peaks in sensor signal.
- Parameters:
profile (np.ndarray) – Signal profile
border_x (int) – Border offset in x
thresh_factor (float) – Treshold factor for estimation.
- Returns:
peak_threshold:
- Returns:
loc_min_indices
- Returns:
md
- Returns:
lowest_background_threshold
-
pypocquant.lib.analysis.analyze_measurement_window(window: np.ndarray, border_x: int = 10, border_y: int = 5, thresh_factor: float = 3.0, peak_width: int = 7, sensor_band_names: Tuple[str, …] = ('igm', 'igg', 'ctl'), peak_expected_relative_location: Tuple[float, …] = (0.27, 0.55, 0.79), control_band_index: int = - 1, subtract_background: bool = False, qc: bool = False, verbose: bool = False, out_qc_folder: Union[str, Path] = '', basename: str = '', image_log: list = []) Quantify the band signal across the sensor.
Notice: the expected relative peak positions for the original strips were: [0.30, 0.52, 0.74]
- Parameters:
window (np.ndarray) – Window (image) to be analyzed.
border_x (int) – Border offset in x from window.
border_y (int) – Border offset in y from window.
thresh_factor (float) – Threshold factor from background.
peak_width (int) – Minimal width of a peak.
sensor_band_names ([str, ..]) – Names of the sensor bands (test lines TL).
peak_expected_relative_location (tuple[float, ..]) – Tuple of relative expected peak positions in respect to the window.
control_band_index (int) – Index of the control band for the list sensor_band_names.
subtract_background (bool) – Bool to substract background.
qc (bool) – Bool to retrun qc image.
verbose (bool) – Bool to return verbose logging information
out_qc_folder (Path) – QC image output folder
basename (str) – Basename
image_log (list) – Image log list.
- Returns:
merged_results: Merged results
- Returns:
image_log Image log
-
pypocquant.lib.analysis.extract_inverted_sensor(gray, sensor_center=(119, 471), sensor_size=(40, 190)) Returns the sensor area at the requested position without searching.
- Parameters:
gray – Gray image.
sensor_center – Sensor center coordinate on gray image.
sensor_size – Sensor size on gray image.
- Returns:
inverted_image Returns the extracted sensor on an inverted image.
-
pypocquant.lib.analysis.get_sensor_contour_fh(strip_gray, sensor_center, sensor_size, sensor_search_area, peak_expected_relative_location, control_band_index=- 1, min_control_bar_width=7) Extract the sensor area from the gray strip image.
- Parameters:
strip_gray – np.ndarray Gray-value image of the extracted strip.
sensor_center – Tuple[int, int] Coordinates of the center of the sensor (x, y).
sensor_size – Tuple[int, int] Size of the sensor (width, height).
sensor_search_area – Tuple[int, int] Size of the sensor search area (width, height).
peak_expected_relative_location – list[float, …] List of expected relative peak (band) positions in the sensor (0.0 -> 1.0).
control_band_index – int Index of the control band in the peak_expected_relative_location. (Optional, default -1 := right-most)
min_control_bar_width – int Minimum width of the control bar (in pixels). (Optional, default 7)
- Returns:
Realigned sensor: np.ndarray
- Returns:
Sensor coordinates: [y0, y, x0, x]
- Returns:
sensor_score: score for the sensor extracted (obsolete: fixed at 1.0)
- Return type:
tuple
-
pypocquant.lib.analysis.extract_rotated_strip_from_box(box_gray, box) Segments the strip from the box image and rotates it so that it is horizontal.
- Parameters:
box_gray – Gray image of QR code box containing strip
box – RGB image of QR code box containing strip
- Returns:
strip_gray Extracted gray strip from box
- Returns:
strip Extracted RGB strip from box
-
pypocquant.lib.analysis.adapt_bounding_box(bw, x0, y0, width, height, fraction=0.75) Make the bounding box come closer to the strip by remove bumps along the outline.
- Parameters:
bw – Binary mask of an image.
x0 – Top left corner in x.
y0 – Top left corner in y
width – Mask width
height – Mask height
fraction –
- Returns:
new_y0:
- Returns:
new_y:
- Returns:
new_x0:
- Returns:
new_x:
-
pypocquant.lib.analysis.point_in_rect(point, rect) Check if the given point (x, y) is contained in the rect (x0, y0, width, height).
- Parameters:
point – Point to be checked if in rectangle
- :param rect
Rectangle defined by (x0, y0, width, height)
returns bool: :rtype: bool
-
pypocquant.lib.analysis.get_rectangles_from_image_and_rectangle_props(img_shape, rectangle_props=(0.52, 0.15, 0.09)) Calculate the left and right rectangles to be used for the orientation analysis using the Hough transform.
- Parameters:
img_shape – tuple
Image shape (width, height)
- Parameters:
rectangle_props –
tuple Tuple containing information about the relative position of the two rectangles to be searched for the inlet on both sides of the center of the image:
- rectangle_props[0]: relative (0..1) vertical height of the rectangle with
respect to the image height.
- rectangle_props[1]: relative distance of the left edge of the right rectangle
with respect to the center of the image.
- rectangle_props[2]: relative distance of the left edge of the left rectangle
with respect to the center of the image.
- Returns:
left_rect: Left rectangles
- Returns:
right_rect: Right rectangles
- Return type:
tuple
-
pypocquant.lib.analysis.use_hough_transform_to_rotate_strip_if_needed(img_gray, rectangle_props=(0.52, 0.15, 0.09), stretch=False, img=None, qc=False) Estimate the orientation of the strip looking at features in the area around the expected sensor position. If the orientation is estimated to be wrong, rotate the strip.
- Parameters:
img_gray – np.ndarray Gray-scale image to be analyzed.
rectangle_props –
tuple Tuple containing information about the relative position of the two rectangles to be searched for the inlet on both sides of the center of the image:
- rectangle_props[0]: relative (0..1) vertical height of the rectangle with
respect to the image height.
- rectangle_props[1]: relative distance of the left edge of the right rectangle
with respect to the center of the image.
- rectangle_props[2]: relative distance of the left edge of the left rectangle
with respect to the center of the image.
stretch – bool Set to True to apply auto-stretch to the image for Hough detection (1, 99 percentile). The original image will be rotated, if needed.
img – np.ndarray or None (default) Apply correction also to this image, if passed.
qc – bool If True, create quality control images.
- Returns:
img_gray: Gray image.
- Returns:
img: RGB Image.
- Returns:
qc_image QC imageg.
- Returns:
rotated Bool; true if was rotated
- Returns:
left_rect: Left rectangles
- Returns:
right_rect: Right rectangles
- Return type:
tuple
-
pypocquant.lib.analysis.use_ocr_to_rotate_strip_if_needed(img_gray, img=None, text='COVID', on_right=True) Try reading the given text on the strip. The text is expected to be on one side of the strip; if it is found on the other side, rotate the strip.
We apply the same rotation also to the second image, if passed.
- Parameters:
img_gray – Gray input image to be potentially rotated.
img – RGB input image to be potentially rotated.
text – Text to be identified by OCR.
on_right – Position of text to be identified in respect to the strip orientation.
- Returns:
img_gray: Gray image.
- Returns:
img: RGB Image.
- Returns:
rotated Bool; true if was rotated
-
pypocquant.lib.analysis.read_patient_data_by_ocr(image, known_manufacturers=consts.KnownManufacturers) Try to extract the patient data by OCR.
- Parameters:
image – Input image to be read with OCR.
known_manufacturers – List with known manufacturers.
- Returns:
fid: FID number.
- Returns:
manufacturer: manufacturer name.