ハフ変換

ruby-opencvでハフ変換をして、画像の線分抽出をする。

require "opencv"
include OpenCV

original_window = GUI::Window.new "original"
hough_windowS = GUI::Window.new "hough(standard)"
hough_windowP = GUI::Window.new "hough(probabilistic)"

img = IplImage::load(ARGV.shift)
gry = img.BGR2GRAY
resultS = gry.GRAY2BGR
resultP = resultS.clone

linesS = gry.canny(50,200,3).hough_lines(CV_HOUGH_STANDARD, 1, Math::PI/180, 50, 0, 0)
linesP = gry.canny(50,200,3).hough_lines(CV_HOUGH_PROBABILISTIC, 1, Math::PI/180, 50, 50, 10)

cnt = 250
linesS.each do |l|
  cos,sin = Math::cos(l.theta), Math::sin(l.theta)
  x0,y0 = l.rho*cos,l.rho*sin
#  puts "#{l.rho},#{l.theta}, #{cos},#{sin}"
  resultS.line!(CvPoint.new(x0-1000*sin,y0+1000*cos), CvPoint.new(x0+1000*sin,y0-1000*cos),
          {:color=>CvColor::Red,:thickness=>1})
  cnt-=1;break if cnt<0
end
puts linesS.size

linesP.each do |l|
#  puts "#{l.point1},#{l.point2}"
  resultP.line!(l.point1, l.point2,
          {:color=>CvColor::Red,:thickness=>1})
end
puts linesP.size

original_window.show img
hough_windowS.show resultS
hough_windowP.show resultP
GUI::wait_key