Spaces:
Runtime error
Runtime error
Commit
·
9060842
1
Parent(s):
931d86a
update
Browse files
app.py
CHANGED
@@ -115,6 +115,29 @@ def update_displayed_quadrilateral(index, point_combinations, base_image_path):
|
|
115 |
# Display the image with the selected quadrilateral
|
116 |
display_image_with_quadrilateral(base_image, quad_points)
|
117 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
118 |
def is_valid_quadrilateral(centroids):
|
119 |
if len(centroids) != 4:
|
120 |
return False
|
@@ -185,7 +208,9 @@ def process_image(image_path, flag_lower, flag_upper, plant_lower, plant_upper,
|
|
185 |
permutations_of_four = list(itertools.permutations(significant_contours, 4))
|
186 |
|
187 |
# Filter out invalid quadrilaterals
|
188 |
-
|
|
|
|
|
189 |
|
190 |
if not valid_permutations:
|
191 |
st.error("No valid quadrilaterals found.")
|
@@ -508,6 +533,7 @@ def main():
|
|
508 |
st.image(plant_rgb_warp, caption="Plant Mask Inside Plot Warped to Square", use_column_width=True)
|
509 |
# st.image(plot_rgb_warp, caption="Flag Mask", use_column_width=True)
|
510 |
with R_save:
|
|
|
511 |
if st.button('Save'):
|
512 |
# Save the masks to their respective folders
|
513 |
save_img(directory_manager.mask_flag, base_name, flag_mask)
|
|
|
115 |
# Display the image with the selected quadrilateral
|
116 |
display_image_with_quadrilateral(base_image, quad_points)
|
117 |
|
118 |
+
def quadrilateral_area(centroids):
|
119 |
+
# Assuming centroids are in correct order (A, B, C, D) to form a quadrilateral
|
120 |
+
def distance(p1, p2):
|
121 |
+
return math.sqrt((p1[0] - p2[0]) ** 2 + (p1[1] - p2[1]) ** 2)
|
122 |
+
|
123 |
+
A, B, C, D = centroids
|
124 |
+
# Using Bretschneider's formula to calculate area of a quadrilateral
|
125 |
+
a = distance(A, B)
|
126 |
+
b = distance(B, C)
|
127 |
+
c = distance(C, D)
|
128 |
+
d = distance(D, A)
|
129 |
+
p = (a + b + c + d) / 2 # semi-perimeter
|
130 |
+
return math.sqrt((p - a) * (p - b) * (p - c) * (p - d))
|
131 |
+
|
132 |
+
def sort_permutations_by_area(valid_permutations):
|
133 |
+
# Calculate area for each permutation and return sorted list
|
134 |
+
perm_areas = [(perm, quadrilateral_area(get_points_from_contours(perm))) for perm in valid_permutations]
|
135 |
+
# Sort by area in descending order (largest first)
|
136 |
+
perm_areas.sort(key=lambda x: x[1], reverse=True)
|
137 |
+
# Return only the sorted permutations, not the areas
|
138 |
+
sorted_permutations = [perm for perm, area in perm_areas]
|
139 |
+
return sorted_permutations
|
140 |
+
|
141 |
def is_valid_quadrilateral(centroids):
|
142 |
if len(centroids) != 4:
|
143 |
return False
|
|
|
208 |
permutations_of_four = list(itertools.permutations(significant_contours, 4))
|
209 |
|
210 |
# Filter out invalid quadrilaterals
|
211 |
+
valid_permutations0 = [perm for perm in permutations_of_four if is_valid_quadrilateral(get_points_from_contours(perm))]
|
212 |
+
|
213 |
+
valid_permutations = sort_permutations_by_area(valid_permutations0)
|
214 |
|
215 |
if not valid_permutations:
|
216 |
st.error("No valid quadrilaterals found.")
|
|
|
533 |
st.image(plant_rgb_warp, caption="Plant Mask Inside Plot Warped to Square", use_column_width=True)
|
534 |
# st.image(plot_rgb_warp, caption="Flag Mask", use_column_width=True)
|
535 |
with R_save:
|
536 |
+
st.write(f"Showing plot outline #{st.session_state.quad_index}")
|
537 |
if st.button('Save'):
|
538 |
# Save the masks to their respective folders
|
539 |
save_img(directory_manager.mask_flag, base_name, flag_mask)
|