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