Interactive Ruby session

Here is an example session with interactive Ruby (irb).  It shows how HornetsEye can be used interactively.

See also

interactive.rb(main):001:0> require 'hornetseye'
=> true
interactive.rb(main):002:0> include Hornetseye
=> Object
interactive.rb(main):003:0> img = MultiArray.load_rgb24( "../data/images/fubk.png" ) # read an image
=> MultiArray.ubytergb(384,288):
[ [ RGB( 77, 77, 77 ), RGB( 77, 77, 77 ), RGB( 77, 77, 77 ), ... ],
  [ RGB( 77, 77, 77 ), RGB( 77, 77, 77 ), RGB( 77, 77, 77 ), ... ],
  [ RGB( 77, 77, 77 ), RGB( 77, 77, 77 ), RGB( 77, 77, 77 ), ... ],
  [ RGB( 255, 255, 255 ), RGB( 255, 255, 255 ), ... ],
  [ RGB( 77, 77, 77 ), RGB( 77, 77, 77 ), RGB( 77, 77, 77 ), ... ],
  [ RGB( 77, 77, 77 ), RGB( 77, 77, 77 ), RGB( 77, 77, 77 ), ... ],
  [ RGB( 77, 77, 77 ), RGB( 77, 77, 77 ), RGB( 77, 77, 77 ), ... ],
  [ RGB( 77, 77, 77 ), RGB( 77, 77, 77 ), RGB( 77, 77, 77 ), ... ],
  [ RGB( 77, 77, 77 ), RGB( 77, 77, 77 ), RGB( 77, 77, 77 ), ... ],
  [ RGB( 77, 77, 77 ), RGB( 77, 77, 77 ), RGB( 77, 77, 77 ), ... ],
...
interactive.rb(main):004:0> region = img[ 71...312, 43...244 ] # copy a region from this image
=> MultiArray.ubytergb(241,201):
[ [ RGB( 255, 255, 255 ), RGB( 255, 255, 255 ), ... ],
  [ RGB( 255, 255, 255 ), RGB( 192, 192, 192 ), ... ],
  [ RGB( 255, 255, 255 ), RGB( 192, 192, 192 ), ... ],
  [ RGB( 255, 255, 255 ), RGB( 192, 192, 192 ), ... ],
  [ RGB( 255, 255, 255 ), RGB( 192, 192, 192 ), ... ],
  [ RGB( 255, 255, 255 ), RGB( 192, 192, 192 ), ... ],
  [ RGB( 255, 255, 255 ), RGB( 192, 192, 192 ), ... ],
  [ RGB( 255, 255, 255 ), RGB( 192, 192, 192 ), ... ],
  [ RGB( 255, 255, 255 ), RGB( 192, 192, 192 ), ... ],
  [ RGB( 255, 255, 255 ), RGB( 192, 192, 192 ), ... ],
...
interactive.rb(main):005:0> channels = [ region.r, region.g, region.b ]
=> [MultiArray.ubyte(241,201):
[ [ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, ... ],
  [ 255, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, ... ],
  [ 255, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, ... ],
  [ 255, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, ... ],
  [ 255, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, ... ],
  [ 255, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, ... ],
  [ 255, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, ... ],
  [ 255, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, ... ],
  [ 255, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, ... ],
  [ 255, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, ... ],
..., MultiArray.ubyte(241,201):
[ [ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, ... ],
  [ 255, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, ... ],
  [ 255, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, ... ],
  [ 255, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, ... ],
  [ 255, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, ... ],
  [ 255, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, ... ],
  [ 255, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, ... ],
  [ 255, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, ... ],
  [ 255, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, ... ],
  [ 255, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, ... ],
..., MultiArray.ubyte(241,201):
[ [ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, ... ],
  [ 255, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, ... ],
  [ 255, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, ... ],
  [ 255, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, ... ],
  [ 255, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, ... ],
  [ 255, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, ... ],
  [ 255, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, ... ],
  [ 255, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, ... ],
  [ 255, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, ... ],
  [ 255, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, ... ],
...]
interactive.rb(main):006:0> edges = channels.collect do |channel| # apply Sobel operator to each channel
interactive.rb(main):007:1*   tmp = channel.to_type( MultiArray::SINT )
interactive.rb(main):008:1>   ( tmp.sobel_x ** 2 + tmp.sobel_y ** 2 ).sqrt.normalise
interactive.rb(main):009:1> end
=> [MultiArray.dfloat(241,201):
[ [ 221.99189174382, 186.350476253752, 171.730020671984, ... ],
  [ 186.350476253752, 59.7670477771824, 56.3489130329947, ... ],
  [ 171.730020671984, 56.3489130329947, 0.0, 0.0, 0.0, 0.0, 0.0, ... ],
  [ 171.730020671984, 56.3489130329947, 0.0, 0.0, 0.0, 0.0, 0.0, ... ],
  [ 171.730020671984, 56.3489130329947, 0.0, 0.0, 0.0, 0.0, 0.0, ... ],
  [ 171.730020671984, 56.3489130329947, 0.0, 0.0, 0.0, 0.0, 0.0, ... ],
  [ 171.730020671984, 56.3489130329947, 0.0, 0.0, 0.0, 0.0, 0.0, ... ],
  [ 171.730020671984, 56.3489130329947, 0.0, 0.0, 0.0, 0.0, 0.0, ... ],
  [ 171.730020671984, 56.3489130329947, 0.0, 0.0, 0.0, 0.0, 0.0, ... ],
  [ 171.730020671984, 56.3489130329947, 0.0, 0.0, 0.0, 0.0, 0.0, ... ],
..., MultiArray.dfloat(241,201):
[ [ 221.99189174382, 186.350476253752, 171.730020671984, ... ],
  [ 186.350476253752, 59.7670477771824, 56.3489130329947, ... ],
  [ 171.730020671984, 56.3489130329947, 0.0, 0.0, 0.0, 0.0, 0.0, ... ],
  [ 171.730020671984, 56.3489130329947, 0.0, 0.0, 0.0, 0.0, 0.0, ... ],
  [ 171.730020671984, 56.3489130329947, 0.0, 0.0, 0.0, 0.0, 0.0, ... ],
  [ 171.730020671984, 56.3489130329947, 0.0, 0.0, 0.0, 0.0, 0.0, ... ],
  [ 171.730020671984, 56.3489130329947, 0.0, 0.0, 0.0, 0.0, 0.0, ... ],
  [ 171.730020671984, 56.3489130329947, 0.0, 0.0, 0.0, 0.0, 0.0, ... ],
  [ 171.730020671984, 56.3489130329947, 0.0, 0.0, 0.0, 0.0, 0.0, ... ],
  [ 171.730020671984, 56.3489130329947, 0.0, 0.0, 0.0, 0.0, 0.0, ... ],
..., MultiArray.dfloat(241,201):
[ [ 221.99189174382, 186.350476253752, 171.730020671984, ... ],
  [ 186.350476253752, 59.7670477771824, 56.3489130329947, ... ],
  [ 171.730020671984, 56.3489130329947, 0.0, 0.0, 0.0, 0.0, 0.0, ... ],
  [ 171.730020671984, 56.3489130329947, 0.0, 0.0, 0.0, 0.0, 0.0, ... ],
  [ 171.730020671984, 56.3489130329947, 0.0, 0.0, 0.0, 0.0, 0.0, ... ],
  [ 171.730020671984, 56.3489130329947, 0.0, 0.0, 0.0, 0.0, 0.0, ... ],
  [ 171.730020671984, 56.3489130329947, 0.0, 0.0, 0.0, 0.0, 0.0, ... ],
  [ 171.730020671984, 56.3489130329947, 0.0, 0.0, 0.0, 0.0, 0.0, ... ],
  [ 171.730020671984, 56.3489130329947, 0.0, 0.0, 0.0, 0.0, 0.0, ... ],
  [ 171.730020671984, 56.3489130329947, 0.0, 0.0, 0.0, 0.0, 0.0, ... ],
...]
interactive.rb(main):010:0> # Combine the edge images and save the result.
interactive.rb(main):011:0* cedges = MultiArray.new( MultiArray::UBYTERGB, *region.shape )
=> MultiArray.ubytergb(241,201):
[ [ RGB( 0, 0, 0 ), RGB( 0, 0, 0 ), RGB( 0, 0, 0 ), RGB( 0, 0, 0 ), ... ],
  [ RGB( 0, 0, 0 ), RGB( 0, 0, 0 ), RGB( 0, 0, 0 ), RGB( 0, 0, 0 ), ... ],
  [ RGB( 0, 0, 0 ), RGB( 0, 0, 0 ), RGB( 0, 0, 0 ), RGB( 0, 0, 0 ), ... ],
  [ RGB( 0, 0, 0 ), RGB( 0, 0, 0 ), RGB( 0, 0, 0 ), RGB( 0, 0, 0 ), ... ],
  [ RGB( 0, 0, 0 ), RGB( 0, 0, 0 ), RGB( 0, 0, 0 ), RGB( 0, 0, 0 ), ... ],
  [ RGB( 0, 0, 0 ), RGB( 0, 0, 0 ), RGB( 0, 0, 0 ), RGB( 0, 0, 0 ), ... ],
  [ RGB( 0, 0, 0 ), RGB( 0, 0, 0 ), RGB( 0, 0, 0 ), RGB( 0, 0, 0 ), ... ],
  [ RGB( 0, 0, 0 ), RGB( 0, 0, 0 ), RGB( 0, 0, 0 ), RGB( 0, 0, 0 ), ... ],
  [ RGB( 0, 0, 0 ), RGB( 0, 0, 0 ), RGB( 0, 0, 0 ), RGB( 0, 0, 0 ), ... ],
  [ RGB( 0, 0, 0 ), RGB( 0, 0, 0 ), RGB( 0, 0, 0 ), RGB( 0, 0, 0 ), ... ],
...
interactive.rb(main):012:0> cedges.r, cedges.g, cedges.b = *edges
=> [MultiArray.dfloat(241,201):
[ [ 221.99189174382, 186.350476253752, 171.730020671984, ... ],
  [ 186.350476253752, 59.7670477771824, 56.3489130329947, ... ],
  [ 171.730020671984, 56.3489130329947, 0.0, 0.0, 0.0, 0.0, 0.0, ... ],
  [ 171.730020671984, 56.3489130329947, 0.0, 0.0, 0.0, 0.0, 0.0, ... ],
  [ 171.730020671984, 56.3489130329947, 0.0, 0.0, 0.0, 0.0, 0.0, ... ],
  [ 171.730020671984, 56.3489130329947, 0.0, 0.0, 0.0, 0.0, 0.0, ... ],
  [ 171.730020671984, 56.3489130329947, 0.0, 0.0, 0.0, 0.0, 0.0, ... ],
  [ 171.730020671984, 56.3489130329947, 0.0, 0.0, 0.0, 0.0, 0.0, ... ],
  [ 171.730020671984, 56.3489130329947, 0.0, 0.0, 0.0, 0.0, 0.0, ... ],
  [ 171.730020671984, 56.3489130329947, 0.0, 0.0, 0.0, 0.0, 0.0, ... ],
..., MultiArray.dfloat(241,201):
[ [ 221.99189174382, 186.350476253752, 171.730020671984, ... ],
  [ 186.350476253752, 59.7670477771824, 56.3489130329947, ... ],
  [ 171.730020671984, 56.3489130329947, 0.0, 0.0, 0.0, 0.0, 0.0, ... ],
  [ 171.730020671984, 56.3489130329947, 0.0, 0.0, 0.0, 0.0, 0.0, ... ],
  [ 171.730020671984, 56.3489130329947, 0.0, 0.0, 0.0, 0.0, 0.0, ... ],
  [ 171.730020671984, 56.3489130329947, 0.0, 0.0, 0.0, 0.0, 0.0, ... ],
  [ 171.730020671984, 56.3489130329947, 0.0, 0.0, 0.0, 0.0, 0.0, ... ],
  [ 171.730020671984, 56.3489130329947, 0.0, 0.0, 0.0, 0.0, 0.0, ... ],
  [ 171.730020671984, 56.3489130329947, 0.0, 0.0, 0.0, 0.0, 0.0, ... ],
  [ 171.730020671984, 56.3489130329947, 0.0, 0.0, 0.0, 0.0, 0.0, ... ],
..., MultiArray.dfloat(241,201):
[ [ 221.99189174382, 186.350476253752, 171.730020671984, ... ],
  [ 186.350476253752, 59.7670477771824, 56.3489130329947, ... ],
  [ 171.730020671984, 56.3489130329947, 0.0, 0.0, 0.0, 0.0, 0.0, ... ],
  [ 171.730020671984, 56.3489130329947, 0.0, 0.0, 0.0, 0.0, 0.0, ... ],
  [ 171.730020671984, 56.3489130329947, 0.0, 0.0, 0.0, 0.0, 0.0, ... ],
  [ 171.730020671984, 56.3489130329947, 0.0, 0.0, 0.0, 0.0, 0.0, ... ],
  [ 171.730020671984, 56.3489130329947, 0.0, 0.0, 0.0, 0.0, 0.0, ... ],
  [ 171.730020671984, 56.3489130329947, 0.0, 0.0, 0.0, 0.0, 0.0, ... ],
  [ 171.730020671984, 56.3489130329947, 0.0, 0.0, 0.0, 0.0, 0.0, ... ],
  [ 171.730020671984, 56.3489130329947, 0.0, 0.0, 0.0, 0.0, 0.0, ... ],
...]
interactive.rb(main):013:0> cedges.to_type(MultiArray::UBYTERGB).save_rgb24( "interactive.png" )
=> 241x201 RGB24-image
interactive.rb(main):014:0> (end code)
Install Wirble for Ruby and RubyGems.
Close