金子邦彦研究室プログラミングRuby プログラミングSIFT, MSER を複数画像で一括実行(VLFeat,Ruby を使用)

SIFT, MSER を複数画像で一括実行(VLFeat,Ruby を使用)

前準備

VLFeat のインストール

Windows での VLFeat のインストール: 別ページ »で説明

Ubuntu での VLFeat のインストール: 別ページ »で説明している.

Ruby プログラム

#! ruby -Ks
# coding: windows-31j

# usage: ruby imagesift.rb filelist.rb key                  frame
#        ruby imagesift.rb [file name] [sub directory name] [sub directory name]

# This program 
# SIFT and MSER 

# generate image file list
#   input : a YAML file that discribe pattern(s) of file names
#           [example of "filelist.rb"]
#           $a = <<-EOS
#           - path: /home/www/teaimage/20100524syouhin
#             pattern: *.JPG
#           - path: /home/www/teaimage/20100524syouhin_data
#             pattern: *.JPG
#           EOS
#   output : SIFT and MSER file

require 'rubygems'
require 'progressbar'
require 'yaml'
require 'digest/sha2'

load ARGV[0] 
key_sub_dir = ARGV[1] 
frame_sub_dir = ARGV[1] 

b = YAML.load( $a )

for i in b
  # from a pattern to a file list
  files = Dir.glob( i["path"] + "/" + i["pattern"] ).sort
  progress_bar = ProgressBar.new( File.basename(i["path"]), files.length )
  # create thumbnails directory 
  if i["path"][0] = "/" then
    path = i["path"]
  else
    path = Dir.pwd + "/" + i["path"]
  end

  system( "mkdir " + path + "/" + key_sub_dir )
  system( "mkdir " + path + "/" + frame_sub_dir )

  for j in files
    basename = File.basename( j )
    basename2 = File.basename( basename, File.extname( basename ) )
    system( "convert -resize 1280x1024 " + j + " /tmp/" + basename2.gsub("(","\(").gsub(")","\)") + ".pgm" )
    system( "siftpp -p /tmp/ /tmp/" + basename2.gsub("(","\(").gsub(")","\)") + ".pgm > /dev/null" )
    system( "cp /tmp/" + basename2.gsub("(","\(").gsub(")","\)") + ".key" + " " + path + "/" + key_sub_dir )
    system( "cd /tmp; mser /tmp/" + basename2.gsub("(","\(").gsub(")","\)") + ".pgm > /dev/null" )
    system( "cp /tmp/" + basename2.gsub("(","\(").gsub(")","\)") + ".frame" + " " + path + "/" + frame_sub_dir )

    progress_bar.inc
  end
  progress_bar.finish
end