http://vision.eng.shu.ac.uk/jan/shef11.pdf                      Computer vision with special reference to                 ...
http://vision.eng.shu.ac.uk/jan/shef11.pdf                         Ruby: Open Classes and Closures                 # open ...
http://vision.eng.shu.ac.uk/jan/shef11.pdf                              Ruby: Ruby Extensions   // gcc -shared -fPIC -I/us...
http://vision.eng.shu.ac.uk/jan/shef11.pdf                      Example: Histogram-Based Classificationc 2011 Jan Wedekind ...
http://vision.eng.shu.ac.uk/jan/shef11.pdf                                   Hue-Saturation                               ...
http://vision.eng.shu.ac.uk/jan/shef11.pdf                                 Similarity Measure                             ...
http://vision.eng.shu.ac.uk/jan/shef11.pdf                                                          Source Code           ...
Upcoming SlideShare
Loading in …5
×

Computer vision with special reference to Ruby (2011)

731 views
663 views

Published on

Here is a small presentation showing histogram-based classification with Ruby. You can download the slides here: http://vision.eng.shu.ac.uk/jan/shef11.pdf

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
731
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
4
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Computer vision with special reference to Ruby (2011)

  1. 1. http://vision.eng.shu.ac.uk/jan/shef11.pdf Computer vision with special reference to Ruby Computer vision with special reference to Ruby Jan Wedekind Wed Apr 06 14:00:00 BST 2011c 2011 Jan Wedekind 1/7
  2. 2. http://vision.eng.shu.ac.uk/jan/shef11.pdf Ruby: Open Classes and Closures # open classes class Fixnum def times three File.open( ’test.txt’ , ’r’ ) do |f| 3 * self 3.times { puts f.readline } end end end 4.times three # 12 http://www.ruby-lang.org/c 2011 Jan Wedekind 2/7
  3. 3. http://vision.eng.shu.ac.uk/jan/shef11.pdf Ruby: Ruby Extensions // gcc -shared -fPIC -I/usr/lib/ruby/1.8/x86 64-linux // -o myextension.so myextension.c #include <ruby.h> #include <math.h> VALUE wrap logx( VALUE self, VALUE x ) { return rb float new( log( NUM2DBL( self ) ) / log( NUM2DBL( x ) ) ); } void Init myextension(void) { VALUE numeric = rb const get( rb cObject, rb intern( "Numeric" ) ); rb define method( numeric, "logx" , RUBY METHOD FUNC( wrap logx ), 1 ); } #!/usr/bin/env ruby require ’myextension’ e = 1024.logx( 2 ) puts "2 ** #{e} = 1024"c 2011 Jan Wedekind 3/7
  4. 4. http://vision.eng.shu.ac.uk/jan/shef11.pdf Example: Histogram-Based Classificationc 2011 Jan Wedekind 4/7
  5. 5. http://vision.eng.shu.ac.uk/jan/shef11.pdf Hue-Saturation α = 1 (2 R − G − B) 2 histogram β = sqrt3 (G − B) 2 H ≈ atan2(β, α) C ≈ α2 + β2 « « http://en.wikipedia.org/wiki/HSL_and_HSVc 2011 Jan Wedekind 5/7
  6. 6. http://vision.eng.shu.ac.uk/jan/shef11.pdf Similarity Measure ai, j − bi, j similarity(a, b) i, j ai, j + bi, j ⇓ ⇓ ⇓ ⇓c 2011 Jan Wedekind 6/7
  7. 7. http://vision.eng.shu.ac.uk/jan/shef11.pdf Source Code MAXC = 117.0 HBINS, CBINS = 8, 8 THRESHOLD, N = 32, 5 BOX = [220 ... 420, 140 ... 340] class Node def hsv hist(hbins = HBINS, cbins = CBINS) alpha = 2 * r.to sint - g - b beta = Math.sqrt(3) / 2 * ( g.to sint - b ) h = ( (Math.atan2(beta, alpha) + PI) * (HBINS / PI2) ).to int.clip 0 .. HBINS - 1 c = ( Math.sqrt(alpha ** 2 + beta ** 2) * (CBINS / MAXC) ).to int.clip 0 .. CBINS - 1 [h, c].histogram(hbins, cbins).to int end def cmp(other) (self - other) / (self + other).major(1.0) end end input = V4L2Input.new mask = MultiArray.bool(640, 480).fill! mask[*BOX] = true labels = [ ’reference’ , ’dragon’ , ’knight’ , ’camel’ ] hists = labels.collect { |object| MultiArray.load ubytergb( "#{object}.jpg" ).hsv hist } history = [ ’reference’ ] * N X11Display.show do img = input.read ubytergb img hist = img[*BOX].hsv hist similarities = hists.collect { |hist| img hist.cmp(hist).abs.sum } label = labels[similarities.index(similarities.min)] history = [label] + history[0 ... N - 1] if history == [label] * N system "echo ’#{label}’ | festival --tts" if label != ’reference’ end history != [ ’reference’ ] * N ? mask.conditional(img, img >> 1) : img endc 2011 Jan Wedekind 7/7

×