From 0af7694115d53218738747fb117a9b4d7c1becd6 Mon Sep 17 00:00:00 2001 From: HaleySchuhl <haleyschuhl@gmail.com> Date: Mon, 9 Dec 2024 16:06:37 -0600 Subject: [PATCH 1/4] format morphology syntax of coordinates output --- plantcv/utils/converters.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/plantcv/utils/converters.py b/plantcv/utils/converters.py index 901f58479..905715acb 100644 --- a/plantcv/utils/converters.py +++ b/plantcv/utils/converters.py @@ -67,7 +67,9 @@ def json2csv(json_file, csv_prefix): for sample, var in itertools.product(entity["observations"].keys(), multi_vars): data_rows = _create_data_rows(var=var, obs=entity["observations"][sample]) for row in data_rows: - csv.write(",".join(map(str, meta_row + [sample] + row)) + "\n") + coord_f = str(row[1]).replace(",", " ") + row_formatted = [str(row[0]), str(coord_f), str(row[2])] + csv.write(",".join(map(str, meta_row + [sample] + row_formatted)) + "\n") # Create a CSV file of scalar traits # Initialize a dictionary to store the data From 2dd09850ba8fb9338cf51194d33fada28a499b92 Mon Sep 17 00:00:00 2001 From: HaleySchuhl <haleyschuhl@gmail.com> Date: Tue, 10 Dec 2024 11:56:19 -0600 Subject: [PATCH 2/4] update segment_id accept reassignment --- plantcv/plantcv/morphology/segment_id.py | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/plantcv/plantcv/morphology/segment_id.py b/plantcv/plantcv/morphology/segment_id.py index bf24db742..a28d21971 100644 --- a/plantcv/plantcv/morphology/segment_id.py +++ b/plantcv/plantcv/morphology/segment_id.py @@ -7,7 +7,7 @@ from plantcv.plantcv._debug import _debug -def segment_id(skel_img, objects, mask=None): +def segment_id(skel_img, objects, mask=None, optimal_assignment=None): """Plot segment IDs. Inputs: @@ -38,9 +38,14 @@ def segment_id(skel_img, objects, mask=None): # Create a color scale, use a previously stored scale if available rand_color = color_palette(num=len(objects), saved=True) + # Plot all segment contours for i, cnt in enumerate(objects): - cv2.drawContours(segmented_img, cnt, -1, rand_color[i], params.line_thickness, lineType=8) + if optimal_assignment is not None: + color_index = optimal_assignment[i] + else: + color_index = i + cv2.drawContours(segmented_img, cnt, -1, rand_color[color_index], params.line_thickness, lineType=8) # Store coordinates for labels label_coord_x.append(objects[i][0][0][0]) label_coord_y.append(objects[i][0][0][1]) @@ -48,12 +53,20 @@ def segment_id(skel_img, objects, mask=None): labeled_img = segmented_img.copy() for i, cnt in enumerate(objects): - # Label slope lines + if optimal_assignment is not None: + # relabel IDs + text = f"{optimal_assignment[i]}" + color_index = optimal_assignment[i] + + else: + text = f"{i}" + color_index = i + # Label segments w = label_coord_x[i] h = label_coord_y[i] - text = f"ID:{i}" + cv2.putText(img=labeled_img, text=text, org=(w, h), fontFace=cv2.FONT_HERSHEY_SIMPLEX, - fontScale=params.text_size, color=rand_color[i], thickness=params.text_thickness) + fontScale=params.text_size, color=rand_color[color_index], thickness=params.text_thickness) _debug(visual=labeled_img, filename=os.path.join(params.debug_outdir, f"{params.device}_segmented_ids.png")) From 576178187bb448c1770b9f8c247716b2ed827b45 Mon Sep 17 00:00:00 2001 From: HaleySchuhl <haleyschuhl@gmail.com> Date: Fri, 17 Jan 2025 15:13:28 -0600 Subject: [PATCH 3/4] update segment_id remove optimal assignment --- plantcv/plantcv/morphology/segment_id.py | 25 ++++++------------------ 1 file changed, 6 insertions(+), 19 deletions(-) diff --git a/plantcv/plantcv/morphology/segment_id.py b/plantcv/plantcv/morphology/segment_id.py index a28d21971..5daa7f8a7 100644 --- a/plantcv/plantcv/morphology/segment_id.py +++ b/plantcv/plantcv/morphology/segment_id.py @@ -7,7 +7,7 @@ from plantcv.plantcv._debug import _debug -def segment_id(skel_img, objects, mask=None, optimal_assignment=None): +def segment_id(skel_img, objects, mask=None): """Plot segment IDs. Inputs: @@ -38,14 +38,9 @@ def segment_id(skel_img, objects, mask=None, optimal_assignment=None): # Create a color scale, use a previously stored scale if available rand_color = color_palette(num=len(objects), saved=True) - # Plot all segment contours for i, cnt in enumerate(objects): - if optimal_assignment is not None: - color_index = optimal_assignment[i] - else: - color_index = i - cv2.drawContours(segmented_img, cnt, -1, rand_color[color_index], params.line_thickness, lineType=8) + cv2.drawContours(segmented_img, cnt, -1, rand_color[i], params.line_thickness, lineType=8) # Store coordinates for labels label_coord_x.append(objects[i][0][0][0]) label_coord_y.append(objects[i][0][0][1]) @@ -53,21 +48,13 @@ def segment_id(skel_img, objects, mask=None, optimal_assignment=None): labeled_img = segmented_img.copy() for i, cnt in enumerate(objects): - if optimal_assignment is not None: - # relabel IDs - text = f"{optimal_assignment[i]}" - color_index = optimal_assignment[i] - - else: - text = f"{i}" - color_index = i - # Label segments + # Label slope lines w = label_coord_x[i] h = label_coord_y[i] - + text = f"ID:{i}" cv2.putText(img=labeled_img, text=text, org=(w, h), fontFace=cv2.FONT_HERSHEY_SIMPLEX, - fontScale=params.text_size, color=rand_color[color_index], thickness=params.text_thickness) + fontScale=params.text_size, color=rand_color[i], thickness=params.text_thickness) _debug(visual=labeled_img, filename=os.path.join(params.debug_outdir, f"{params.device}_segmented_ids.png")) - return segmented_img, labeled_img + return segmented_img, labeled_img \ No newline at end of file From 9bc4a9d70983f1d976994199e3a4f3fc25ded293 Mon Sep 17 00:00:00 2001 From: HaleySchuhl <haleyschuhl@gmail.com> Date: Fri, 17 Jan 2025 15:14:34 -0600 Subject: [PATCH 4/4] line return --- plantcv/plantcv/morphology/segment_id.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plantcv/plantcv/morphology/segment_id.py b/plantcv/plantcv/morphology/segment_id.py index 5daa7f8a7..bf24db742 100644 --- a/plantcv/plantcv/morphology/segment_id.py +++ b/plantcv/plantcv/morphology/segment_id.py @@ -57,4 +57,4 @@ def segment_id(skel_img, objects, mask=None): _debug(visual=labeled_img, filename=os.path.join(params.debug_outdir, f"{params.device}_segmented_ids.png")) - return segmented_img, labeled_img \ No newline at end of file + return segmented_img, labeled_img