panomosity 0.1.5 → 0.1.6

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA256:
3
- metadata.gz: d7d65793e972cbf9d8367f1530b60910163841a24a5517bbfea254a21e0a583c
4
- data.tar.gz: cac1ed82d1567b8b0ede45b4697dd273d9383d1f951ee5eace80b95734d7e1f5
2
+ SHA1:
3
+ metadata.gz: 7c4ae12aafbe71dafef734aa8d3cf7135e6b621f
4
+ data.tar.gz: 75f253b42482a6320150ef4021470892ffcef765
5
5
  SHA512:
6
- metadata.gz: 8476d6c4ef2615c878b18232b929828ac03db88d133c654b9b04104db64ef370e5c13feb5f47573f8513397f612cc48a8c19d3fa551b01e9586c9332bdee68e9
7
- data.tar.gz: f411883b85d56232f9b38f67161c80e32d682f56c842d87b1d0b31352c157748065922751f1ce99315e9cf67151c2ff173e09def1c6da8b08f3ca1295aa43d5e
6
+ metadata.gz: 70e0a23cd375a3448ddbf5ad079eb9d00c8919560151e2ac8e3b6109a28a9be1717bbc075c285c00fc2eff30e60bf7a4be5dd66dc99b354051868d843034d17a
7
+ data.tar.gz: 67e15c8220e398c9f1b556bac173bcbcc17b8f042b543d707e1c1169f038cc3000f2a95e29be60784b6739ff04e62491574c4ebbed6ad001bbd90ba8280a0ae1
@@ -100,7 +100,7 @@ module Panomosity
100
100
  average_y, y_std = *calculate_average_and_std(name: :y, values: cps.map(&:py))
101
101
 
102
102
  max_removal = ((@options[:max_removal] || 0.2) * cps.count).floor
103
- min_cps = 10
103
+ min_cps = 8
104
104
  max_iterations = 10
105
105
  iterations = 0
106
106
  bad_cps = cps.select { |cp| (cp.px - average_x).abs >= x_std || (cp.py - average_y).abs >= y_std }
@@ -322,7 +322,10 @@ module Panomosity
322
322
  logger.info unconnected_image_pairs.map { |i| { type: i[:type], pair: i[:pair].map(&:id) } }
323
323
 
324
324
  logger.info 'finding control points with unrealistic distances (<1)'
325
- fake_control_points = control_points.select { |cp| cp.pdist <= 1.0 }
325
+ bad_control_points = control_points.select { |cp| cp.pdist <= 1.0 }
326
+ logger.info 'adding pairs that have do not have enough control points (<3)'
327
+ changing_control_points_pairs = control_points.group_by { |cp| [cp.n1, cp.n2] }.select { |_, cps| cps.count < 3 }
328
+ changed_pairs = []
326
329
 
327
330
  logger.info 'writing new control points'
328
331
  control_point_lines_started = false
@@ -374,9 +377,11 @@ module Panomosity
374
377
  end
375
378
  else
376
379
  control_point_lines_started = true
377
- fake_control_point = fake_control_points.find { |cp| cp.raw == line }
378
- if fake_control_point
379
- if fake_control_point.conn_type == :horizontal
380
+ bad_control_point = bad_control_points.find { |cp| cp.raw == line }
381
+ changing_control_point_pair = changing_control_points_pairs.find { |_, cps| cps.find { |cp| cp.raw == line } }
382
+
383
+ if bad_control_point
384
+ if bad_control_point.conn_type == :horizontal
380
385
  control_point = horizontal_control_points_of_pair.first
381
386
  else
382
387
  control_point = vertical_control_points_of_pair.first
@@ -388,8 +393,8 @@ module Panomosity
388
393
  x1 = x_diff <= 0 ? -x_diff + 15 : 0
389
394
  y1 = y_diff <= 0 ? -y_diff + 15 : 0
390
395
 
391
- control_point[:n] = fake_control_point[:n]
392
- control_point[:N] = fake_control_point[:N]
396
+ control_point[:n] = bad_control_point[:n]
397
+ control_point[:N] = bad_control_point[:N]
393
398
  control_point[:x] = x1
394
399
  control_point[:X] = x1 + x_diff
395
400
  control_point[:y] = y1
@@ -411,6 +416,44 @@ module Panomosity
411
416
  end
412
417
  control_point.to_s
413
418
  end.join
419
+ elsif changing_control_point_pair && !changed_pairs.include?(changing_control_point_pair.first)
420
+ changed_pairs << changing_control_point_pair.first
421
+ bad_control_point = changing_control_point_pair.last.first
422
+ if bad_control_point.conn_type == :horizontal
423
+ control_point = horizontal_control_points_of_pair.first
424
+ else
425
+ control_point = vertical_control_points_of_pair.first
426
+ end
427
+
428
+ x_diff = control_point.x2 - control_point.x1
429
+ y_diff = control_point.y2 - control_point.y1
430
+
431
+ x1 = x_diff <= 0 ? -x_diff + 15 : 0
432
+ y1 = y_diff <= 0 ? -y_diff + 15 : 0
433
+
434
+ control_point[:n] = bad_control_point[:n]
435
+ control_point[:N] = bad_control_point[:N]
436
+ control_point[:x] = x1
437
+ control_point[:X] = x1 + x_diff
438
+ control_point[:y] = y1
439
+ control_point[:Y] = y1 + y_diff
440
+
441
+ logger.debug "adding control points connecting #{control_point.n1} <> #{control_point.n2}"
442
+ i = images.first
443
+ 3.times.map do
444
+ if control_point.conn_type == :horizontal
445
+ control_point[:x] += 5
446
+ control_point[:X] += 5
447
+ control_point[:y] += i.h * 0.25
448
+ control_point[:Y] += i.h * 0.25
449
+ else
450
+ control_point[:x] += i.w * 0.25
451
+ control_point[:X] += i.w * 0.25
452
+ control_point[:y] += 5
453
+ control_point[:Y] += 5
454
+ end
455
+ control_point.to_s
456
+ end.join
414
457
  else
415
458
  next line
416
459
  end
@@ -1,3 +1,3 @@
1
1
  module Panomosity
2
- VERSION = '0.1.5'
2
+ VERSION = '0.1.6'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: panomosity
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Oliver Garcia
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-09-21 00:00:00.000000000 Z
11
+ date: 2018-09-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -102,7 +102,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
102
102
  version: '0'
103
103
  requirements: []
104
104
  rubyforge_project:
105
- rubygems_version: 2.7.3
105
+ rubygems_version: 2.4.6
106
106
  signing_key:
107
107
  specification_version: 4
108
108
  summary: Wrapper for the PTO file parsing needed for PanoTools.