Sagar Bharadwaj commited on
Commit
c76c7ee
·
1 Parent(s): 804cbcd

Added shape validity check

Browse files
colorbynumber/config.py CHANGED
@@ -3,6 +3,7 @@ default_config = {
3
  "denoise_h": 100,
4
  "border_padding": 2,
5
  "area_perc_threshold": 0.05,
 
6
  "arc_length_area_ratio_threshold": 1,
7
  "border_color": (0, 0, 0),
8
  "font_size": 0.5,
 
3
  "denoise_h": 100,
4
  "border_padding": 2,
5
  "area_perc_threshold": 0.05,
6
+ "check_shape_validity": True,
7
  "arc_length_area_ratio_threshold": 1,
8
  "border_color": (0, 0, 0),
9
  "font_size": 0.5,
colorbynumber/gen_islands.py CHANGED
@@ -56,7 +56,7 @@ class GenerateIslands:
56
 
57
 
58
  def _get_cleaned_up_contours(self, island_fill, area_perc_threshold,
59
- arc_length_area_ratio_threshold):
60
  contours_image = np.ones_like(island_fill)
61
 
62
  total_area = self.indices_color_choices.shape[0] * self.indices_color_choices.shape[1]
@@ -67,13 +67,16 @@ class GenerateIslands:
67
  method = cv.CHAIN_APPROX_NONE
68
  )
69
 
70
- is_valid_shape = self._is_valid_shape(
71
- contours = contours,
72
- hierarchy = hierarchy,
73
- total_area = total_area,
74
- area_perc_threshold = area_perc_threshold,
75
- arc_length_area_ratio_threshold = arc_length_area_ratio_threshold
76
- )
 
 
 
77
 
78
  contours_selected = []
79
  hierarchy_selected = []
@@ -115,7 +118,7 @@ class GenerateIslands:
115
 
116
 
117
  def _get_islands_for_one_color(self, color_index, border_padding, area_perc_threshold,
118
- arc_length_area_ratio_threshold):
119
  # Get a binary image with just the selected color
120
  this_color = (self.indices_color_choices == color_index).astype(np.uint8)
121
  # Pad the image to enable border detection on image boundaries
@@ -133,7 +136,8 @@ class GenerateIslands:
133
  cleaned_up_contours, contours_selected, hierarchies_selected = self._get_cleaned_up_contours(
134
  island_fill = this_component,
135
  area_perc_threshold = area_perc_threshold,
136
- arc_length_area_ratio_threshold = arc_length_area_ratio_threshold
 
137
  )
138
 
139
  # Get the centroid of the island
@@ -151,6 +155,7 @@ class GenerateIslands:
151
  border_padding = config["border_padding"]
152
  area_perc_threshold = config["area_perc_threshold"]
153
  arc_length_area_ratio_threshold = config["arc_length_area_ratio_threshold"]
 
154
 
155
  for color_index in np.unique(self.indices_color_choices):
156
  self._get_islands_for_one_color(
@@ -158,6 +163,7 @@ class GenerateIslands:
158
  border_padding = border_padding,
159
  area_perc_threshold = area_perc_threshold,
160
  arc_length_area_ratio_threshold = arc_length_area_ratio_threshold,
 
161
  )
162
 
163
  # Flatten the list of borders
 
56
 
57
 
58
  def _get_cleaned_up_contours(self, island_fill, area_perc_threshold,
59
+ arc_length_area_ratio_threshold, check_shape_validity):
60
  contours_image = np.ones_like(island_fill)
61
 
62
  total_area = self.indices_color_choices.shape[0] * self.indices_color_choices.shape[1]
 
67
  method = cv.CHAIN_APPROX_NONE
68
  )
69
 
70
+ if check_shape_validity:
71
+ is_valid_shape = self._is_valid_shape(
72
+ contours = contours,
73
+ hierarchy = hierarchy,
74
+ total_area = total_area,
75
+ area_perc_threshold = area_perc_threshold,
76
+ arc_length_area_ratio_threshold = arc_length_area_ratio_threshold
77
+ )
78
+ else:
79
+ is_valid_shape = True
80
 
81
  contours_selected = []
82
  hierarchy_selected = []
 
118
 
119
 
120
  def _get_islands_for_one_color(self, color_index, border_padding, area_perc_threshold,
121
+ arc_length_area_ratio_threshold, check_shape_validity):
122
  # Get a binary image with just the selected color
123
  this_color = (self.indices_color_choices == color_index).astype(np.uint8)
124
  # Pad the image to enable border detection on image boundaries
 
136
  cleaned_up_contours, contours_selected, hierarchies_selected = self._get_cleaned_up_contours(
137
  island_fill = this_component,
138
  area_perc_threshold = area_perc_threshold,
139
+ arc_length_area_ratio_threshold = arc_length_area_ratio_threshold,
140
+ check_shape_validity = check_shape_validity
141
  )
142
 
143
  # Get the centroid of the island
 
155
  border_padding = config["border_padding"]
156
  area_perc_threshold = config["area_perc_threshold"]
157
  arc_length_area_ratio_threshold = config["arc_length_area_ratio_threshold"]
158
+ check_shape_validity = config["check_shape_validity"]
159
 
160
  for color_index in np.unique(self.indices_color_choices):
161
  self._get_islands_for_one_color(
 
163
  border_padding = border_padding,
164
  area_perc_threshold = area_perc_threshold,
165
  arc_length_area_ratio_threshold = arc_length_area_ratio_threshold,
166
+ check_shape_validity = check_shape_validity
167
  )
168
 
169
  # Flatten the list of borders