sqed 0.1.8 → 0.1.9

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 639226420485cffa59f748b6c0e5c66db21b239e
4
- data.tar.gz: 425bd2c26e16339e4ef7b61b605f90bf2efb42db
3
+ metadata.gz: e5f4d8affdf54fbd1921fd0d0ab561017a8f4afc
4
+ data.tar.gz: 1faccf4ba6649eaceb6a4c4aadc0a4eb21efb574
5
5
  SHA512:
6
- metadata.gz: 0b40ba1db0b861fb88769d99997c840931f916dacd1731b0f321828c54fbe033e552c879298a0e2a5057b3859a534487c298e8870fbd4ea7316b3351e95a4504
7
- data.tar.gz: 7bd37213c089d409778291ad30aa63c5c65a0ebdd10a311ed376388b9eddc2134da234b788600b7d4213042c6290ccb88a120969d5de08aed9571cd9d5c2a2f6
6
+ metadata.gz: 1cd78f97cf39d56ddbee8ef065e7a2cc8a5fe4ca6cd318e966cb1e50afc9a3b24291361216de4223a946e8e5fef3ea379fd8675c3aae69f1aa969b7e6975e6d4
7
+ data.tar.gz: 7f7b7f8d30d060f889080733e49dce6d34af01e190cf6ab33e21955f01d0dd55ac31f6f365bb2888ff8a732db41ba3d44fb0a3260fae9b9f86e36b57ea3f5c3c
@@ -4,6 +4,7 @@
4
4
  class Sqed::BoundaryFinder
5
5
 
6
6
  THUMB_SIZE = 100
7
+ COLOR_DELTA = 1.3 # color (e.g. red) must be this much be *COLOR_DELTA > than other values (e.g. blue/green)
7
8
 
8
9
  # the passed image
9
10
  attr_reader :img
@@ -161,15 +162,15 @@ class Sqed::BoundaryFinder
161
162
  end
162
163
 
163
164
  def self.is_green?(pixel)
164
- (pixel.green > pixel.red*1.2) && (pixel.green > pixel.blue*1.2)
165
+ (pixel.green > pixel.red*COLOR_DELTA) && (pixel.green > pixel.blue*COLOR_DELTA)
165
166
  end
166
167
 
167
168
  def self.is_blue?(pixel)
168
- (pixel.blue > pixel.red*1.2) && (pixel.blue > pixel.green*1.2)
169
+ (pixel.blue > pixel.red*COLOR_DELTA) && (pixel.blue > pixel.green*COLOR_DELTA)
169
170
  end
170
171
 
171
172
  def self.is_red?(pixel)
172
- (pixel.red > pixel.blue*1.2) && (pixel.red > pixel.green*1.2)
173
+ (pixel.red > pixel.blue*COLOR_DELTA) && (pixel.red > pixel.green*COLOR_DELTA)
173
174
  end
174
175
 
175
176
  def self.is_black?(pixel)
@@ -210,6 +211,32 @@ class Sqed::BoundaryFinder
210
211
  [hit_ranges.first, hit_ranges[(hit_ranges.length / 2).to_i], hit_ranges.last]
211
212
  end
212
213
 
214
+ # @return [Array]
215
+ # like [0,1,2]
216
+ # If median-min or max-median * width_factor are different from one another (by more than width_factor) then replace the larger wth the median +/- 1/2 the smaller
217
+ # Given [10, 12, 20] and width_factor 2 the result will be [10, 12, 13]
218
+ #
219
+ def corrected_frequency(frequency_stats, width_factor = 3.0 )
220
+ v0 = frequency_stats[0]
221
+ m = frequency_stats[1]
222
+ v2 = frequency_stats[2]
223
+
224
+ a = m - v0
225
+ b = v2 - m
226
+
227
+ largest = (a > b ? a : b)
228
+
229
+ if a * width_factor > largest
230
+ [(m - (v2 - m)/2).to_i, m, v2]
231
+ elsif b * width_factor > largest
232
+ [ v0, m, (m + (m - v0)/2).to_i ]
233
+ else
234
+ frequency_stats
235
+ end
236
+ end
237
+
238
+
239
+
213
240
  # Returns an Integer, the maximum of the pairwise differences of the values in the array
214
241
  # For example, given
215
242
  # [1,2,3,9,6,2,0]
@@ -32,17 +32,17 @@ class Sqed::BoundaryFinder::ColorLineFinder < Sqed::BoundaryFinder
32
32
  right_top_img = img.crop( left_right_split[2], 0, img.columns - left_right_split[2], top_bottom_split[0] , true) # sections 1,2
33
33
  right_bottom_img = img.crop(left_right_split[2], top_bottom_split[2], img.columns - left_right_split[2], img.rows - top_bottom_split[2], true) # sections 3,4,5
34
34
 
35
- right_top_split = Sqed::BoundaryFinder.color_boundary_finder(image: right_top_img, boundary_color: @boundary_color) # vertical line b/w 1 & 2
36
-
37
- boundaries.set(1, [left_right_split[2], 0, left_right_split[2] + right_top_split[0], top_bottom_split[0] ])
35
+ right_top_split = corrected_frequency(Sqed::BoundaryFinder.color_boundary_finder(image: right_top_img, boundary_color: @boundary_color)) # vertical line b/w 1 & 2, use "corrected_frequency" to account for color bleed from previous crop
36
+
37
+ boundaries.set(1, [left_right_split[2], 0, right_top_split[0], top_bottom_split[0] ])
38
38
  boundaries.set(2, [left_right_split[2] + right_top_split[2], 0, right_top_img.columns - right_top_split[2], top_bottom_split[0] ] )
39
39
 
40
- right_bottom_split = Sqed::BoundaryFinder.color_boundary_finder(image: right_bottom_img, scan: :columns, sample_subdivision_size: 2, boundary_color: @boundary_color) # horizontal line b/w (5,3) & 4
40
+ right_bottom_split = corrected_frequency(Sqed::BoundaryFinder.color_boundary_finder(image: right_bottom_img, scan: :columns, sample_subdivision_size: 2, boundary_color: @boundary_color)) # horizontal line b/w (5,3) & 4, use "corrected_frequency" to account for color bleed from previous crop
41
41
 
42
- bottom_right_top_img = right_bottom_img.crop(0,0, img.columns - left_right_split[2], right_bottom_split[1], true) # 3,5 - we leave right_bottom_split at [1] (not 2) to take into account possible overlap error (crop gets full line at top of image)
42
+ bottom_right_top_img = right_bottom_img.crop(0,0, img.columns - left_right_split[2], right_bottom_split[2], true) # 3,5
43
43
 
44
44
  boundaries.set(3, [ left_right_split[2] + right_top_split[2], top_bottom_split[2], left_right_split[2] + right_top_split[2], bottom_right_top_img.rows ] )
45
- boundaries.set(5, [ left_right_split[2], top_bottom_split[2], left_right_split[2] + right_top_split[0], bottom_right_top_img.rows ] )
45
+ boundaries.set(5, [ left_right_split[2], top_bottom_split[2], right_top_split[0], bottom_right_top_img.rows ] )
46
46
 
47
47
  boundaries.set(4, [ left_right_split[2], top_bottom_split[2] + right_top_split[2], img.columns - left_right_split[2], right_bottom_img.rows - right_top_split[2] ] )
48
48
 
@@ -1,3 +1,3 @@
1
1
  class Sqed
2
- VERSION = "0.1.8"
2
+ VERSION = "0.1.9"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sqed
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.8
4
+ version: 0.1.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt Yoder
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-12-21 00:00:00.000000000 Z
12
+ date: 2015-12-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake