ååå

ソフトウェア演習Ⅱ〔課題 7 画像検索〕
青野雅樹
以下の問題に対する解答を、C++言語でのプログラム等(クラスのヘッダーファイルを含む)
を作成し,プログラムと実行結果(kadai7.html)を Moodle にアップロードせよ。締め切
りは 8 月 7 日(金)正午(12 時)までとする。
資料 7 で紹介した JPEG を処理するプログラムを参考に、ImageRetrieval クラスを作成
し画像検索を行うプログラムを作成せよ。条件は以下のとおりである。
【入力】http://www.kde.cs.tut.ac.jp/~aono/data/images 以下にあるカラー画像で、
名前が 101.jpg から 140.jpg までの 40 画像(実際は 150.jpg までの 50 画像がある)
。各
自の作業フォルダに、“images”という名前のフォルダを作成し、そこに 40 個の画像をコ
ピーし、プログラムからは“./images/xxx.jpg”のような名前で動作できるようにすること。
【検索クエリ】画像ファイル名(拡張子以外)の下 1 桁が学籍番号の末尾と同じもの(合
計4つある)の中からひとつ選ぶこと。検索対象は、クエリ画像を除く 39 枚の画像となる。
【出力】クエリ画像と類似度の高い上位 3 位の画像ファイル名(URL)を記入した HTML
【画像間の相違度計算】資料 7 で紹介した RGB 色モデルで、R,G,B 各成分を4段階で表
現したヒストグラム(プログラム 7-11, 7-12 参照)を作成する。2つの画像 A,B のヒスト
3
3
3
グラムが与えられたとき、dist( A, B ) = ååå hist A [i][ j ][ k ] - hist B [i ][ j ][ k ] で定義す
i =0 j = 0 k =0
る。この値が小さいものから上位3つを HTML に書き出すことになる。
JPEG ファイルの処理では、http://www.kde.cs.tut.ac.jp/~aono/data/lib に置いてい
る、libjpeg.a をライブラリとして使うこと。
【コメントとヒント】課題の ImageRetrieval クラスには、資料で紹介した JpegImage ク
ラス(プログラム 7-9)、Histogram クラス(プログラム 7-11)、MergeSort クラス(プロ
グラム 7-14)等の変数を、適宜使用して結構です。本来、この課題のような情報検索では、
検索インデックス(この課題ではヒストグラム)を前処理で作成します。しかし、この課題
ではファイル数が40程度であるため、まず、(1)40枚の画像のヒストグラムを作成、
(2)クエリ画像を選択(これはプログラムの引数としてください)
、
(3)相違度計算(こ
の中でソーティングが必要となります)、(4)結果の HTML の書き出し、というステップ
でプログラムするといいと思います。JPEG 画像の読込や処理では、資料 7 にあるプログラ
ムで使用した readJpeg を利用してください(OpenCV 等は、MAC にインストールされて
いないため使用しません)。g++でリンクする際、問題内に記載した URL にある libjpeg.a
を使ってください。この libjpeg.a の詳細を知りたい人は、JPEG ライブライのソースコー
ドが http://www.kde.cs.tut.ac.jp/~aono/data/lib/jpeg-9.zip においてありますので、参
考にしてください。今回の課題では、この内部を知っている必要はありません。
実行例は以下のようです。ここではあくまでレイアウトならびにHTMLの中身の例とし
て紹介するもので、141.jpg~150.jpgは、本課題には含まれないので注意してください。
HTMLの詳細な表現方法や配置、背景、フォントなどは各自適当に工夫して結構です。大
事なのは、各自の名前、クエリ画像名、類似する上位3つの画像ファイル名、クエリ画像
との相違度が、そのHTMLをWebブラウザから見たときに、わかることです。
http://www.kde.cs.tut.ac.jp/~aono/H27/kadai7SampleOutput.htmlにあります。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<head><meta http-equiv=Content-Type content="text/html; charset=utf-8">
<title>Search from 2D</title></head>
<body>
<center><h2>(課題7)検索結果上位3位
(青野雅樹:01162069)</h2></center>
<table border="1" bgcolor="#ccccff">
<thead><tr bgcolor="#aaaaaa">
<th bgcolor="#ccccff">クエリ画像 142.jpg</th>
<th width="100"></th>
<th bgcolor="#ccccff">120.jpg </th>
<th bgcolor="#ccccff">141.jpg </th>
<th bgcolor="#ccccff">144.jpg </th>
</thead>
<tr bgcolor="#cccccc" align="center">
<td bgcolor="#ffffff"><img width="192" height="128" src="http://www.kde.cs.tut.ac.jp/~aono/data/images/142.jpg"></td>
<td width="100">検索結果<br/>上位3位</td>
<td bgcolor="#ffffff"><img width="192" height="128" src="http://www.kde.cs.tut.ac.jp/~aono/data/images/120.jpg"></td>
<td bgcolor="#ffffff"><img width="192" height="128" src="http://www.kde.cs.tut.ac.jp/~aono/data/images/141.jpg"></td>
<td bgcolor="#ffffff"><img width="192" height="128" src="http://www.kde.cs.tut.ac.jp/~aono/data/images/144.jpg"></td>
<tr bgcolor="#cccccc" align="center">
<td bgcolor="#ccccff">0</td>
<td width="100">相違度</td>
<td bgcolor="#ccccff">51832</td>
<td bgcolor="#ccccff">54570</td>
<td bgcolor="#ccccff">55364</td>
</tr></table>
</body>
</html>