sqed 0.4.3 → 0.4.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/lib/sqed/boundary_finder.rb +25 -12
 - data/lib/sqed/boundary_finder/color_line_finder.rb +4 -4
 - data/lib/sqed/version.rb +1 -1
 - data/lib/sqed_utils.rb +7 -9
 - data/spec/lib/sqed/boundary_finder_spec.rb +5 -4
 - data/spec/lib/stage_handling/seven_slot_spec.rb +9 -0
 - data/spec/support/files/stage_images/frost_7_slot.jpg +0 -0
 - data/spec/support/image_helpers.rb +4 -0
 - metadata +4 -2
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: df36b8e8052dc45504b1a8cfb4f511b7d5af680f
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 2557f8b06d2c521893d4bbace2c9433be420e376
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: a190d03073872ad472a422d96b8f62fce283c2936a18d53d6b90f7409e07acfc6f407a5125d88350a04ccecccef3709e7c4c82fa2059ba806f52685cb86948eb
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: d29c8d94a3d04c4a8461e11573fafdb7be8383d305ccb7222a05b9cb123fd4e18d135f27df551eee96970552324a91e67688e81754cad37c631472bd41dd0fb3
         
     | 
    
        data/lib/sqed/boundary_finder.rb
    CHANGED
    
    | 
         @@ -130,8 +130,31 @@ class Sqed 
     | 
|
| 
       130 
130 
     | 
    
         | 
| 
       131 
131 
     | 
    
         
             
                  image_width = image.send(scan)
         
     | 
| 
       132 
132 
     | 
    
         
             
                  sample_subdivision_size = get_subdivision_size(image_width) if sample_subdivision_size.nil?
         
     | 
| 
       133 
     | 
    
         
            -
                  samples_to_take = (image_width / sample_subdivision_size).to_i - 1
         
     | 
| 
       134 
133 
     | 
    
         | 
| 
      
 134 
     | 
    
         
            +
                  attempts = 0
         
     | 
| 
      
 135 
     | 
    
         
            +
                  while attempts < 5 do
         
     | 
| 
      
 136 
     | 
    
         
            +
                    samples_to_take = (image_width / sample_subdivision_size).to_i - 1
         
     | 
| 
      
 137 
     | 
    
         
            +
                    border_hits = sample_border(image, boundary_color, samples_to_take, sample_subdivision_size, scan)
         
     | 
| 
      
 138 
     | 
    
         
            +
                    
         
     | 
| 
      
 139 
     | 
    
         
            +
                    break if border_hits.select{|k,v| v > 1}.size > 2 || sample_subdivision_size == 1
         
     | 
| 
      
 140 
     | 
    
         
            +
             
     | 
| 
      
 141 
     | 
    
         
            +
                    sample_subdivision_size = (sample_subdivision_size.to_f / 2.0).to_i
         
     | 
| 
      
 142 
     | 
    
         
            +
                    attempts += 1
         
     | 
| 
      
 143 
     | 
    
         
            +
                  end
         
     | 
| 
      
 144 
     | 
    
         
            +
             
     | 
| 
      
 145 
     | 
    
         
            +
                  return nil if border_hits.length < 2
         
     | 
| 
      
 146 
     | 
    
         
            +
             
     | 
| 
      
 147 
     | 
    
         
            +
                  if sample_cutoff_factor.nil?
         
     | 
| 
      
 148 
     | 
    
         
            +
                    cutoff = max_difference(border_hits.values)
         
     | 
| 
      
 149 
     | 
    
         
            +
                    cutoff = border_hits.values.first - 1 if cutoff == 0 # difference of two identical things is 0
         
     | 
| 
      
 150 
     | 
    
         
            +
                  else
         
     | 
| 
      
 151 
     | 
    
         
            +
                    cutoff = (samples_to_take * sample_cutoff_factor).to_i
         
     | 
| 
      
 152 
     | 
    
         
            +
                  end
         
     | 
| 
      
 153 
     | 
    
         
            +
             
     | 
| 
      
 154 
     | 
    
         
            +
                  frequency_stats(border_hits, cutoff)
         
     | 
| 
      
 155 
     | 
    
         
            +
                end
         
     | 
| 
      
 156 
     | 
    
         
            +
             
     | 
| 
      
 157 
     | 
    
         
            +
                def self.sample_border(image, boundary_color, samples_to_take, sample_subdivision_size, scan)
         
     | 
| 
       135 
158 
     | 
    
         
             
                  border_hits = {}
         
     | 
| 
       136 
159 
     | 
    
         | 
| 
       137 
160 
     | 
    
         
             
                  (0..samples_to_take).each do |s|
         
     | 
| 
         @@ -160,17 +183,7 @@ class Sqed 
     | 
|
| 
       160 
183 
     | 
    
         
             
                    end
         
     | 
| 
       161 
184 
     | 
    
         
             
                  end
         
     | 
| 
       162 
185 
     | 
    
         | 
| 
       163 
     | 
    
         
            -
                   
     | 
| 
       164 
     | 
    
         
            -
             
     | 
| 
       165 
     | 
    
         
            -
                  if sample_cutoff_factor.nil?
         
     | 
| 
       166 
     | 
    
         
            -
                    cutoff = max_difference(border_hits.values)
         
     | 
| 
       167 
     | 
    
         
            -
             
     | 
| 
       168 
     | 
    
         
            -
                    cutoff = border_hits.values.first - 1 if cutoff == 0 # difference of two identical things is 0
         
     | 
| 
       169 
     | 
    
         
            -
                  else
         
     | 
| 
       170 
     | 
    
         
            -
                    cutoff = (samples_to_take * sample_cutoff_factor).to_i
         
     | 
| 
       171 
     | 
    
         
            -
                  end
         
     | 
| 
       172 
     | 
    
         
            -
             
     | 
| 
       173 
     | 
    
         
            -
                  frequency_stats(border_hits, cutoff)
         
     | 
| 
      
 186 
     | 
    
         
            +
                  border_hits
         
     | 
| 
       174 
187 
     | 
    
         
             
                end
         
     | 
| 
       175 
188 
     | 
    
         | 
| 
       176 
189 
     | 
    
         
             
                def self.is_green?(pixel)
         
     | 
| 
         @@ -30,7 +30,6 @@ class Sqed::BoundaryFinder::ColorLineFinder < Sqed::BoundaryFinder 
     | 
|
| 
       30 
30 
     | 
    
         
             
              def find_bands
         
     | 
| 
       31 
31 
     | 
    
         
             
                case layout    # boundaries.coordinates are referenced from stage image
         
     | 
| 
       32 
32 
     | 
    
         | 
| 
       33 
     | 
    
         
            -
                # No specs for this yet
         
     | 
| 
       34 
33 
     | 
    
         
             
                when :lep_stage
         
     | 
| 
       35 
34 
     | 
    
         
             
                  top_bottom_split = Sqed::BoundaryFinder.color_boundary_finder(image: image, scan: :columns, boundary_color: boundary_color)              # detect vertical division [array]
         
     | 
| 
       36 
35 
     | 
    
         
             
                  left_right_split = Sqed::BoundaryFinder.color_boundary_finder(image: image, sample_subdivision_size: 2, boundary_color: boundary_color)  # detect horizontal division [array]
         
     | 
| 
         @@ -48,8 +47,7 @@ class Sqed::BoundaryFinder::ColorLineFinder < Sqed::BoundaryFinder 
     | 
|
| 
       48 
47 
     | 
    
         | 
| 
       49 
48 
     | 
    
         
             
                  boundaries.set(0, [0, 0, left_top_split[1], top_bottom_split[0]] ) # keep as 1 for safety
         
     | 
| 
       50 
49 
     | 
    
         | 
| 
       51 
     | 
    
         
            -
                  boundaries.set(1, [left_top_split[2], 0, left_top_image.columns - left_top_split[2], top_bottom_split[0]] )  
     | 
| 
       52 
     | 
    
         
            -
             
     | 
| 
      
 50 
     | 
    
         
            +
                  boundaries.set(1, [left_top_split[2], 0, left_top_image.columns - left_top_split[2], top_bottom_split[0]] ) 
         
     | 
| 
       53 
51 
     | 
    
         
             
                  boundaries.set(2, [left_right_split[2], 0, image.columns - left_right_split[0], top_bottom_split[0]] )
         
     | 
| 
       54 
52 
     | 
    
         | 
| 
       55 
53 
     | 
    
         
             
                  bottom_right_image =  image.crop(left_right_split[2], top_bottom_split[2], image.columns - left_right_split[2], image.rows - top_bottom_split[2], true)
         
     | 
| 
         @@ -92,11 +90,13 @@ class Sqed::BoundaryFinder::ColorLineFinder < Sqed::BoundaryFinder 
     | 
|
| 
       92 
90 
     | 
    
         
             
                  right_bottom_image = image.crop(left_right_split[2], top_bottom_split[2], image.columns - left_right_split[2], image.rows - top_bottom_split[2], true)  # sections 3,4,5
         
     | 
| 
       93 
91 
     | 
    
         | 
| 
       94 
92 
     | 
    
         
             
                  right_top_split = ::SqedUtils.corrected_frequency(
         
     | 
| 
       95 
     | 
    
         
            -
                    Sqed::BoundaryFinder.color_boundary_finder(image: right_top_image, boundary_color: boundary_color),
         
     | 
| 
      
 93 
     | 
    
         
            +
                    Sqed::BoundaryFinder.color_boundary_finder(image: right_top_image, boundary_color: boundary_color, scan: :rows),
         
     | 
| 
       96 
94 
     | 
    
         
             
                    width_factor: 1.8,
         
     | 
| 
       97 
95 
     | 
    
         
             
                    max_width: right_top_image.columns
         
     | 
| 
       98 
96 
     | 
    
         
             
                  ) # vertical line b/w 1 & 2, use "corrected_frequency" to account for color bleed from previous crop
         
     | 
| 
       99 
97 
     | 
    
         | 
| 
      
 98 
     | 
    
         
            +
             
     | 
| 
      
 99 
     | 
    
         
            +
             
     | 
| 
       100 
100 
     | 
    
         
             
                  boundaries.set(1, [left_right_split[2], 0, right_top_split[0], top_bottom_split[0]] )
         
     | 
| 
       101 
101 
     | 
    
         
             
                  boundaries.set(2, [left_right_split[2] + right_top_split[2], 0, right_top_image.columns - right_top_split[2], top_bottom_split[0]])
         
     | 
| 
       102 
102 
     | 
    
         | 
    
        data/lib/sqed/version.rb
    CHANGED
    
    
    
        data/lib/sqed_utils.rb
    CHANGED
    
    | 
         @@ -11,6 +11,9 @@ module SqedUtils 
     | 
|
| 
       11 
11 
     | 
    
         
             
              # @param frequency_stats [Array]
         
     | 
| 
       12 
12 
     | 
    
         
             
              #   like [1,2,3]
         
     | 
| 
       13 
13 
     | 
    
         
             
              #
         
     | 
| 
      
 14 
     | 
    
         
            +
              # @param width_factor [Float]
         
     | 
| 
      
 15 
     | 
    
         
            +
              #    
         
     | 
| 
      
 16 
     | 
    
         
            +
              #  
         
     | 
| 
       14 
17 
     | 
    
         
             
              # @param max_width [Integer]
         
     | 
| 
       15 
18 
     | 
    
         
             
              #   required, the width of the image in question
         
     | 
| 
       16 
19 
     | 
    
         
             
              #
         
     | 
| 
         @@ -33,9 +36,6 @@ module SqedUtils 
     | 
|
| 
       33 
36 
     | 
    
         
             
                a = (m - v0).abs
         
     | 
| 
       34 
37 
     | 
    
         
             
                b = (v2 - m).abs
         
     | 
| 
       35 
38 
     | 
    
         | 
| 
       36 
     | 
    
         
            -
                c = a * width_factor
         
     | 
| 
       37 
     | 
    
         
            -
                d = b * width_factor
         
     | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
       39 
39 
     | 
    
         
             
                largest = (a > b ? a : b)
         
     | 
| 
       40 
40 
     | 
    
         | 
| 
       41 
41 
     | 
    
         
             
                l = (m - b / 2) 
         
     | 
| 
         @@ -44,17 +44,15 @@ module SqedUtils 
     | 
|
| 
       44 
44 
     | 
    
         
             
                r = (m + a / 2)
         
     | 
| 
       45 
45 
     | 
    
         
             
                r = max_width if r > max_width
         
     | 
| 
       46 
46 
     | 
    
         | 
| 
       47 
     | 
    
         
            -
                 
     | 
| 
       48 
     | 
    
         
            -
                 
     | 
| 
      
 47 
     | 
    
         
            +
                c = a * width_factor
         
     | 
| 
      
 48 
     | 
    
         
            +
                d = b * width_factor
         
     | 
| 
       49 
49 
     | 
    
         | 
| 
       50 
50 
     | 
    
         
             
                [
         
     | 
| 
       51 
     | 
    
         
            -
                   
     | 
| 
      
 51 
     | 
    
         
            +
                  c > largest ? l : v0,
         
     | 
| 
       52 
52 
     | 
    
         
             
                  m,
         
     | 
| 
       53 
     | 
    
         
            -
                   
     | 
| 
      
 53 
     | 
    
         
            +
                  d > largest ? r : v2
         
     | 
| 
       54 
54 
     | 
    
         
             
                ]
         
     | 
| 
       55 
55 
     | 
    
         | 
| 
       56 
56 
     | 
    
         
             
              end
         
     | 
| 
       57 
57 
     | 
    
         | 
| 
       58 
     | 
    
         
            -
             
     | 
| 
       59 
     | 
    
         
            -
             
     | 
| 
       60 
58 
     | 
    
         
             
            end
         
     | 
| 
         @@ -60,10 +60,11 @@ describe Sqed::BoundaryFinder do 
     | 
|
| 
       60 
60 
     | 
    
         
             
                    expect(center).to be < 2495 
         
     | 
| 
       61 
61 
     | 
    
         
             
                  end
         
     | 
| 
       62 
62 
     | 
    
         | 
| 
       63 
     | 
    
         
            -
                   
     | 
| 
       64 
     | 
    
         
            -
             
     | 
| 
       65 
     | 
    
         
            -
             
     | 
| 
       66 
     | 
    
         
            -
                   
     | 
| 
      
 63 
     | 
    
         
            +
                  # This is found now because of increased refinement
         
     | 
| 
      
 64 
     | 
    
         
            +
                  # specify 'FAILS to find the vertical dividing line a real image, with border still present, with 200x fewer subsamples' do
         
     | 
| 
      
 65 
     | 
    
         
            +
                  #   center =  Sqed::BoundaryFinder.color_boundary_finder(image: ImageHelpers.crossy_green_line_specimen, sample_subdivision_size: 2000 )
         
     | 
| 
      
 66 
     | 
    
         
            +
                  #   expect(center).to be nil
         
     | 
| 
      
 67 
     | 
    
         
            +
                  # end
         
     | 
| 
       67 
68 
     | 
    
         | 
| 
       68 
69 
     | 
    
         
             
                  specify 'finds the vertical dividing line another real image, with border still present' do
         
     | 
| 
       69 
70 
     | 
    
         
             
                    center = Sqed::BoundaryFinder.color_boundary_finder(image: ImageHelpers.greenline_image)[1]
         
     | 
| 
         @@ -60,5 +60,14 @@ describe 'handling 7 slot stages' do 
     | 
|
| 
       60 
60 
     | 
    
         
             
                    end
         
     | 
| 
       61 
61 
     | 
    
         
             
                  end
         
     | 
| 
       62 
62 
     | 
    
         
             
                end
         
     | 
| 
      
 63 
     | 
    
         
            +
              end
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
              context 'another image' do
         
     | 
| 
      
 66 
     | 
    
         
            +
                let(:s) { Sqed.new(image: ImageHelpers.frost_seven_slot, use_thumbnail: true, pattern: :seven_slot, boundary_color: :red, has_border: false ) }
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
      
 68 
     | 
    
         
            +
                specify '#result' do
         
     | 
| 
      
 69 
     | 
    
         
            +
                  expect(s.result).to be_truthy
         
     | 
| 
      
 70 
     | 
    
         
            +
                end
         
     | 
| 
       63 
71 
     | 
    
         
             
              end 
         
     | 
| 
      
 72 
     | 
    
         
            +
             
     | 
| 
       64 
73 
     | 
    
         
             
            end
         
     | 
| 
         Binary file 
     | 
    
        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.4. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.4.4
         
     | 
| 
       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: 2018-09- 
     | 
| 
      
 12 
     | 
    
         
            +
            date: 2018-09-17 00:00:00.000000000 Z
         
     | 
| 
       13 
13 
     | 
    
         
             
            dependencies:
         
     | 
| 
       14 
14 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       15 
15 
     | 
    
         
             
              name: rake
         
     | 
| 
         @@ -171,6 +171,7 @@ files: 
     | 
|
| 
       171 
171 
     | 
    
         
             
            - spec/support/files/stage_images/boundary_left_t_yellow.jpg
         
     | 
| 
       172 
172 
     | 
    
         
             
            - spec/support/files/stage_images/boundary_offset_cross_red.jpg
         
     | 
| 
       173 
173 
     | 
    
         
             
            - spec/support/files/stage_images/boundary_right_t_green.jpg
         
     | 
| 
      
 174 
     | 
    
         
            +
            - spec/support/files/stage_images/frost_7_slot.jpg
         
     | 
| 
       174 
175 
     | 
    
         
             
            - spec/support/files/stage_images/frost_stage.jpg
         
     | 
| 
       175 
176 
     | 
    
         
             
            - spec/support/files/stage_images/frost_stage_medium.jpg
         
     | 
| 
       176 
177 
     | 
    
         
             
            - spec/support/files/stage_images/frost_stage_thumb.jpg
         
     | 
| 
         @@ -244,6 +245,7 @@ test_files: 
     | 
|
| 
       244 
245 
     | 
    
         
             
            - spec/support/files/stage_images/boundary_left_t_yellow.jpg
         
     | 
| 
       245 
246 
     | 
    
         
             
            - spec/support/files/stage_images/boundary_offset_cross_red.jpg
         
     | 
| 
       246 
247 
     | 
    
         
             
            - spec/support/files/stage_images/boundary_right_t_green.jpg
         
     | 
| 
      
 248 
     | 
    
         
            +
            - spec/support/files/stage_images/frost_7_slot.jpg
         
     | 
| 
       247 
249 
     | 
    
         
             
            - spec/support/files/stage_images/frost_stage.jpg
         
     | 
| 
       248 
250 
     | 
    
         
             
            - spec/support/files/stage_images/frost_stage_medium.jpg
         
     | 
| 
       249 
251 
     | 
    
         
             
            - spec/support/files/stage_images/frost_stage_thumb.jpg
         
     |