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