Sfoglia il codice sorgente

Change grid colour threshold detection method.

Andrew Klopper 6 anni fa
parent
commit
dfe0a1ed67
1 ha cambiato i file con 16 aggiunte e 2 eliminazioni
  1. 16 2
      home/xword.py

+ 16 - 2
home/xword.py

@@ -1,3 +1,4 @@
1
+import itertools
1 2
 import math
2 3
 import cv2
3 4
 import numpy as np
@@ -152,6 +153,18 @@ def extract_grid_colours(img, num_rows, num_cols, sampling_block_size_ratio):
152 153
     return grid
153 154
 
154 155
 
156
+def get_grid_colour_threshold(grid_colours):
157
+    pixels = sorted(itertools.chain.from_iterable(grid_colours))
158
+    delta_max = -1
159
+    i_max = -1
160
+    for i in range(1, len(pixels)):
161
+        delta = pixels[i] - pixels[i - 1]
162
+        if delta > delta_max:
163
+            delta_max = delta
164
+            i_max = i
165
+    return (pixels[i_max] + pixels[i_max - 1]) / 2
166
+
167
+
155 168
 def grid_colours_to_blocks(grid_colours, num_rows, num_cols, sampling_threshold):
156 169
     grid = copy.deepcopy(grid_colours)
157 170
     warning = False
@@ -246,13 +259,14 @@ def extract_crossword_grid(
246 259
         warnings.append("Crossword is not square")
247 260
 
248 261
     block_img = extract_square(original, top_left, top_right, bottom_right, bottom_left)
262
+    grid_colours = extract_grid_colours(block_img, num_rows, num_cols, sampling_block_size_ratio)
249 263
 
250 264
     if sampling_threshold is None:
251
-        sampling_threshold = get_threshold_from_quantile(block_img, sampling_threshold_quantile)
265
+        #sampling_threshold = get_threshold_from_quantile(block_img, sampling_threshold_quantile)
266
+        sampling_threshold = get_grid_colour_threshold(grid_colours)
252 267
     else:
253 268
         sampling_threshold = sampling_threshold
254 269
 
255
-    grid_colours = extract_grid_colours(block_img, num_rows, num_cols, sampling_block_size_ratio)
256 270
     warning, grid = grid_colours_to_blocks(grid_colours, num_rows, num_cols, sampling_threshold)
257 271
     if warning:
258 272
         warnings.append("Some blocks may be the wrong colour")