HornetsEye

From MMVLWiki
(Difference between revisions)
Jump to: navigation, search
m (Dependencies)
m
 
(106 intermediate revisions by one user not shown)
Line 1: Line 1:
 
{|align="right"
 
{|align="right"
 
|-
 
|-
|[[Image:Nanoworkshop.jpg|200px]]||[[Image:Hornetseyerf.png|420px]]
+
|[[Image:AVA-Bristol-2008.jpg|thumb|240px|[http://vision.eng.shu.ac.uk/jan/ava-bristol-2008.pdf Poster] for the 2008 [http://hlsweb.dmu.ac.uk/ava/meetings/bristol2008.html AVA meeting] in Bristol]]
 +
|-
 +
|[[Image:Oscon08foils.jpg|240px|thumb|Conference presentation [http://vision.eng.shu.ac.uk/jan/oscon08-foils.pdf Real-time Computer Vision With Ruby] presented at [http://en.oreilly.com/oscon2008/ OSCON 2008]]]
 
|-
 
|-
 
|}
 
|}
 
=Introduction=
 
=Introduction=
[[Image:Hornetseye.png|right|120px]]
+
'''[http://www.wedesoft.demon.co.uk/hornetseye-api/ HornetsEye]''' is a Ruby-extension for developing video processing and real-time computer vision software under GNU/Linux offering interfaces to do image- and video-I/O with RMagick, Xine, firewire digital camera, and video for Linux. A new class of unprecedented solutions and a new way of working becomes conceivable when applying a dynamically typed, object-oriented language like Ruby to computer vision.
'''[http://www.wedesoft.demon.co.uk/hornetseye-api/ HornetsEye]''' is a [http://www.rubyist.net/~nobu/ruby/Ruby_Extension_Manual.html Ruby-extension] for real-time computer vision under GNU/Linux offering interfaces to do image- and video-I/O with [http://rmagick.rubyforge.org/ RMagick], [http://www.xinehq.de/ Xine], IIDC/DCAM-compatible firewire digital camera ([http://damien.douxchamps.net/ieee1394/libdc1394/ DC1394]) and video for Linux ([http://www.exploits.org/v4l/ V4L]).
+
 
+
'''[http://www.wedesoft.demon.co.uk/hornetseye-api/ HornetsEye]''' also is an attempt to use the Mimas library and create a ''minimalistic'' and ''consistent'' real-time computer vision library.
+
* '''minimalistic''': The library is focused on real-time computer vision. Existing libraries are being made used of.
+
* '''consistent''':: A non-redundant set of data-types is used. Also the library tries to stay consistent with existing libraries.
+
 
+
The logo was created using [http://gimp.org/ GIMP] and it is based on a nice photo published by [http://www.flickr.com/photos/olivander Olivander]. A hornet is capable of navigating and detecting objects with the limited resolution of its [http://en.wikipedia.org/wiki/Compound_eye compound eyes].
+
 
+
=Examples=
+
See [http://www.wedesoft.demon.co.uk/hornetseye-api/files/inputgrey-txt.html Hornetseye homepage] for more examples.
+
==Simple Webcam Application==
+
[[Image:Rubywebcam.jpg|thumb|320px|right|Screenshot of webcam application written in Ruby]]
+
The webcam application uses [[Hornetseye|HornetsEye-1.5]], [http://rubyforge.org/projects/rmagick/ RMagick], and [http://rubyforge.org/projects/korundum/ qt4-ruby].
+
 
+
To install [http://rubyforge.org/frs/shownotes.php?release_id=7630 qt4-qtruby-1.4.7] I had to [http://rubyforge.org/forum/message.php?msg_id=19132 change the script ./smoke/qt/qtguess.pl.in]. Otherwise on gets an error message like this:
+
problem with QListWidget missing parent at ../../kalyptus/kalyptusCxxToSmoke.pm line 2207.
+
 
+
Also [http://rubyforge.org/frs/shownotes.php?release_id=7630 qt4-qtruby-1.4.7] seems to have a [http://rubyforge.org/forum/message.php?msg_id=19077 memory leak in Qt::ByteArray]. Thanks to [http://rubyforge.org/users/rdale/ Richard Dale] the problem was solved and the bugfix will be included in the next release of qt4-qtruby. The modified code already is [http://websvn.kde.org/trunk/KDE/kdebindings/qtruby/ available via the KDE source repository].
+
<pre>
+
#!/usr/bin/ruby
+
require 'hornetseye'
+
require 'Qt'
+
app=Qt::Application.new(ARGV)
+
class VideoWidget < Qt::Label
+
  def initialize( parent = nil )
+
    super
+
    @input = Hornetseye::V4LInput.new
+
    startTimer( 0 )
+
  end
+
  def timerEvent( e )
+
    str = @input.read.to_magick.to_blob { self.format = "PPM"; self.depth = 8 }
+
    pix = Qt::Pixmap.new
+
    pix.loadFromData( Qt::ByteArray.fromRawData( str, str.size ) )
+
    setPixmap( pix )
+
    resize( pix.width, pix.height )
+
    update
+
  end
+
end
+
win = VideoWidget.new
+
win.show
+
app.exec
+
</pre>
+
==Phase Correlation==
+
{|align="right"
+
|-
+
|[[Image:Apollo left.jpg|thumb|76px|Left part of image]]||[[Image:Apollo right.jpg|thumb|114px|Right part of image]]||[[Image:Apollo result.jpg|thumb|163px|Stitched image]]
+
|-
+
|}
+
This is an implementation of the [http://en.wikipedia.org/wiki/Phase_correlation phase correlation] for aligning images.
+
The code depends on [[Hornetseye|HornetsEye-1.5]] and [http://rubyforge.org/projects/narray/ NArray-fftw3].
+
<pre>
+
#!/usr/bin/ruby
+
require 'hornetseye'
+
require 'fftw3'
+
include Hornetseye
+
syntax = <<END_OF_STRING
+
Shift estimation
+
Syntax: registration.rb <image1> <image2>
+
Example: registration.rb astronaut.jpg apollo-16.jpg
+
Example: registration.rb apollo_left.jpg apollo_right.jpg
+
END_OF_STRING
+
if ARGV.size != 2
+
  puts syntax
+
  raise "Wrong number of command-line arguments."
+
end
+
image = (0...2).collect { |i| NArray.load_grey8( ARGV[i] ) }
+
# TODO: Apply windowing function?
+
# Force images to have same size. Make image twice as big to avoid cyclical
+
# correlation.
+
maxwidth  = [ image[0].shape[0], image[1].shape[0] ].max * 2
+
maxheight = [ image[0].shape[1], image[1].shape[1] ].max * 2
+
limage = image.collect { |img|
+
  nimg = NArray.new( NArray::BYTE, maxwidth, maxheight )
+
  nimg[ 0...img.shape[0], 0...img.shape[1] ] = img
+
  nimg
+
}
+
fimage = limage.collect { |img|
+
  FFTW3.dft( img.to_type( NArray::DCOMPLEX ), +1 )
+
}
+
limage = nil
+
fshift = ( fimage[0] * fimage[1].conj ) / ( fimage[0].abs * fimage[1].abs )
+
fimage = nil
+
# TODO: Replace with native implementation for higher performance.
+
fshift = fshift.collect { |value|
+
  if value.real.nan? or value.imag.nan?
+
    0
+
  else
+
    value
+
  end
+
}
+
shift = FFTW3.dft( fshift, -1 )
+
width  = shift.shape[0]
+
height = shift.shape[1]
+
shiftx = nil
+
shifty = nil
+
maxvalue = 0
+
for i in 0...width
+
  for j in 0...height
+
    if shift[i,j] > maxvalue
+
      shiftx = i
+
      shifty = j
+
      maxvalue = shift[i,j]
+
    end
+
  end
+
end
+
shiftx = shiftx - width  if shiftx > width  / 2
+
shifty = shifty - height if shifty > height / 2
+
shift = nil
+
puts "shift-x = #{shiftx}"
+
puts "shift-y = #{shifty}"
+
minx = [ 0, shiftx ].min
+
miny = [ 0, shifty ].min
+
maxx = [ image[0].shape[0], image[1].shape[0] + shiftx ].max - 1
+
maxy = [ image[0].shape[1], image[1].shape[1] + shifty ].max - 1
+
offsetx = -minx
+
offsety = -miny
+
resultwidth  = maxx + 1 - minx
+
resultheight = maxy + 1 - miny
+
result1 = NArray.new( NArray::BYTE, resultwidth, resultheight )
+
result1[ offsetx...( offsetx + image[0].shape[0] ),
+
        offsety...( offsety + image[0].shape[1] ) ] = image[0] / 2
+
result2 = NArray.new( NArray::BYTE, resultwidth, resultheight )
+
result2[ ( shiftx + offsetx )...( shiftx + offsetx + image[1].shape[0] ),
+
        ( shifty + offsety )...( shifty + offsety + image[1].shape[1] ) ] = image[1] / 2
+
result = result1 + result2
+
result.display
+
</pre>
+
 
+
=Downloads=
+
==Hornetseye-0.15==
+
* [[Image:Hornetseye.png|48px]] '''Download [http://rubyforge.org/frs/?group_id=2714 HornetsEye-0.15] released on Jun 4th 2007'''
+
 
+
===Release Notes===
+
See [http://www.wedesoft.demon.co.uk/hornetseye-api/ HornetsEye homepage] for installation instructions.
+
 
+
===Change log===
+
* Renamed loading and saving methods to 'save_grey8', 'load_grey8', 'save_rgb24', and 'load_rgb24'.
+
* Renamed "XineInput::seek" to "XineInput::pos=" and implemented "XineInput::pos".
+
* Test for 'ruby/narray' if 'narray' is not found.
+
* hornetseye/ruby/hornetseye.cc: Bug! Red and blue channel where swapped in numerical array.
+
* hornetseye/base/colourspace.cc: Using slightly different colourspace conversions more suitable for YUV <-> RGB (ITU-R BT.709 standard). This allows YUV to grey conversion by simply stripping of the chroma components.
+
* hornetseye/ruby/hornetseye_ext.rb: Added methods for clipping grey values. Renamed method 'threshold' to 'binarise'.
+
* Implemented colour conversions RGB24-to-YV12 and Grey8-to-YV12.
+
 
+
==Hornetseye-0.14==
+
* [[Image:Hornetseye.png|48px]] '''Download [http://rubyforge.org/frs/?group_id=2714 HornetsEye-0.14] released on May 7th 2007'''
+
 
+
===Release Notes===
+
See [http://www.wedesoft.demon.co.uk/hornetseye-api/ HornetsEye homepage] for installation instructions.
+
 
+
===Change log===
+
* Added IRB example.
+
* hornetseye/ruby/hornetseye.cc: Added typechecking for arguments.
+
* hornetseye/io/dc1394input.cc: More detailed error-message for DMA transfer does not work (after testing with Unibrain Fire-i camera).
+
* configure.ac: Linking with glut not required at the moment.
+
 
+
==Hornetseye-0.13==
+
* [[Image:Hornetseye.png|48px]] '''Download [http://rubyforge.org/frs/?group_id=2714 HornetsEye-0.13] released on April 5th 2007'''
+
 
+
===Release Notes===
+
See [http://www.wedesoft.demon.co.uk/hornetseye-api/ HornetsEye homepage] for installation instructions.
+
 
+
===Change log===
+
* Porting documentation from RDoc to NaturalDocs.
+
* hornetseye/io/openglimagepainter.cc: Not including GL/glext.h any more because it leads to problems on some NVidia installations.
+
* Added methods to unmap and map X11-windows.
+
* Bug! Dimensions of NArray were swapped. All conversion to and from Hornetseye::Image as well as the filters had to be fixed.
+
 
+
==HornetsEye-0.12==
+
* [[Image:Hornetseye.png|48px]] '''Download [http://rubyforge.org/frs/?group_id=2714 HornetsEye-0.12] released on March 20th 2007'''
+
 
+
===Release Notes===
+
See [http://www.wedesoft.demon.co.uk/hornetseye-api/ HornetsEye homepage] for installation instructions.
+
 
+
===Change log===
+
* Added OpenGLOutput and XVideoOutput for displaying images and videos. Added corresponding examples in directory ''./samples/display''.
+
 
+
==HornetsEye-0.11==
+
* [[Image:Hornetseye.png|48px]] '''Download [http://rubyforge.org/frs/?group_id=2714 HornetsEye-0.11] released on March 11th 2007'''
+
 
+
===Release Notes===
+
See [http://www.wedesoft.demon.co.uk/hornetseye-api/ HornetsEye homepage] for installation instructions.
+
 
+
===Change log===
+
* hornetseye/io/dc1394input.cc: Do not prefer RGB24 in mode selection.
+
* hornetseye/io/v4linput.cc: Do not prefer RGB24 in mode selection, because it is very slow. Fixed bug in colourspace selection code. Improved speed by implementing background capture.
+
* Now also links with versions of libdc1394 older than 1.1
+
 
+
==HornetsEye-0.10==
+
* [[Image:Hornetseye.png|48px]] '''Download [http://rubyforge.org/frs/?group_id=2714 HornetsEye-0.10] released on February 1st 2007'''
+
 
+
===Release Notes===
+
See [http://www.wedesoft.demon.co.uk/hornetseye-api/ HornetsEye homepage] for installation instructions.
+
 
+
===Change log===
+
* Made display method accept more element-types.
+
* Normalisation also works on blank image.
+
 
+
==Older releases==
+
See [http://rubyforge.org/frs/?group_id=2714 Hornetseye page at Rubyforge] for older releases.
+
  
 
=See Also=
 
=See Also=
* [[Mimas]]
+
* [[Interactive Presentation Software]]
* [[Computer Vision Software]]
+
* [[Just-in-time compiler]]
 
+
* [[Lucas-Kanade tracker]]
=Dependencies=
+
* [[Hypercomplex Wavelets]]
'''HornetsEye''' brings the power of large existing free software solutions into Ruby. '''HornetsEye''' also tries to make existing Ruby extension operate with each other to enable the development of novel solutions:
+
* [[Qt4-QtRuby installer for Microsoft Windows]]
* [[Image:Qt logo.png|30px]] [http://rubyforge.org/projects/korundum/ QtRuby], [[Image:Kde.png|30px]] [http://developer.kde.org/language-bindings/ruby/ Korundum]
+
* [[TEM vision software]]
* [[Image:Xine logo.png|48px|]] [http://www.xinehq.de/ Xine]
+
* [[Image:Mimasanim.gif|40px]] [[Mimas]]
* [http://narray.rubyforge.org/ NArray]
+
* [http://rmagick.rubyforge.org/ RMagick]
+
* [http://damien.douxchamps.net/ieee1394/libdc1394/ libdc1394]
+
* [http://www.openexr.org/ OpenEXR]
+
'''HornetsEye''' is documented using [http://www.naturaldocs.org/ NaturalDocs].
+
 
+
=See Also=
+
* [[Mimas]]
+
* [[Computer Vision Software]]
+
  
 
=External Links=
 
=External Links=
* [[Image:Hornetseye.png|48px]] [http://www.wedesoft.demon.co.uk/hornetseye-api/ Hornetseye homepage]
+
* [[Image:Hornetseye.png|48px]] [http://www.wedesoft.demon.co.uk/hornetseye-api/ HornetsEye homepage]
* [[Image:Rubyforge.png|75px]] [http://rubyforge.org/projects/hornetseye/ Hornetseye at Rubyforge]
+
* [[Image:Rubyforge.png|75px]] [http://rubyforge.org/projects/hornetseye/ HornetsEye at Rubyforge]
* [[Image:Ruby.png|30px]] [http://www.ruby-lang.org/ Ruby] programming language
+
* [[Image:Sourceforge.png|58px]] [http://sourceforge.net/projects/hornetseye/ HornetsEye at Sourceforge]
 
* [[Image:Swig.png|48px]] [http://www.swig.org/ SWIG] (Simplified Wrapper and Interface Generator)
 
* [[Image:Swig.png|48px]] [http://www.swig.org/ SWIG] (Simplified Wrapper and Interface Generator)
* [http://www.csie.ntnu.edu.tw/~bbailey/Moments%20in%20IP.htm Moments in image processing]
+
 
 +
{{AddThis}}
  
 
[[Category:Projects]]
 
[[Category:Projects]]
 
[[Category:Nanorobotics]]
 
[[Category:Nanorobotics]]

Latest revision as of 20:49, 31 July 2011

Poster for the 2008 AVA meeting in Bristol
Conference presentation Real-time Computer Vision With Ruby presented at OSCON 2008

[edit] Introduction

HornetsEye is a Ruby-extension for developing video processing and real-time computer vision software under GNU/Linux offering interfaces to do image- and video-I/O with RMagick, Xine, firewire digital camera, and video for Linux. A new class of unprecedented solutions and a new way of working becomes conceivable when applying a dynamically typed, object-oriented language like Ruby to computer vision.

[edit] See Also

[edit] External Links

Bookmark and Share

Personal tools
Namespaces
Variants
Actions
Navigation
Toolbox