情報工学実験U: 課題4: 画像がどのくらい似ているかを数値化する

課題4
2つの画像について色ヒストグラムを求めることで,
それらの画像がお互いにどのくらい似ているかを,1つの数値で出力するプログラムを作成しなさい.


<<課題4のヒント>>

● 入力となる画像ファイルが2つあるので,
./ex4 image_data/0.ppm image_data/1.ppm
と,プログラムの引数として,2つのファイルのファイル名を与えることにします.

● C言語のプログラムで,与えられた引数の個数を得るには,変数「argc」を,引数そのものを文字列として得るには,変数「argv」を使います.
● 下は,与えられた引数を,すべてそのまま,1行ずつに分けて,標準出力に出力するプログラムです.
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
  int i;
  
  for (i = 0; i < argc; i ++)
    printf("%s\n", argv[i]);

  exit(0);
}

● 標準入力(stdin)や,標準出力(stdout)以外のファイルを扱う前には,まず,そのファイルを開く必要があります.そのためには,関数「fopen」を使います.
● 標準入力(stdin)や,標準出力(stdout)以外のファイルを扱った後には,そのファイルを閉じる必要があります.そのためには,関数「fclose」を使います.


● 2つの色ヒストグラムが,どのくらい似ているのかを,どうやって1つの数値で表したらよいかは,
 自分で考えてみましょう.(他の人と相談してもよいです.)

● いくつかのヒント
 ☆ ある色が,一方の画像では,どのピクセルにも出てこないのに,他方の画像では,1000個のピクセルに出てくる.
  ・・・ これらの画像は,似ていないかも.
 ☆ ある色が,両方の画像で,どのピクセルにも出てこない.
  ・・・ これらの画像は,似ているかも.
 ☆ ある色が,一方の画像では,1000個のピクセルに出てくるし,他方の画像でも,1000個のピクセルに出てくる.
  ・・・ これらの画像は,似ているかも.
 ☆ ある色が,一方の画像では,1000個のピクセルに出てくるが,他方の画像では,5000個のピクセルに出てくる.
  ・・・ これらの画像は,どの程度似ているのか???
 ☆ 上のように考えて,64通りあるそれぞれの色で,別々に類似度を計算しておいて,それらの類似度を,後から足し合わせればよいでしょう.


 問題4-1) あなたは,どのようなアイデアにもとづいて,2つの色ヒストグラムの類似度を数値にしましたか、また、数値の求め方を数式で表しなさい。
 問題4-2)  なぜそのアイデアを思いついたのか,なぜそのアイデアがうまくいきそうだと思ったのか,この2点を,詳しく書いてください.



提出すべきもの
問題4の答え
課題4のソースコードと出力結果(どの画像とどの画像の類似度を求めたか,明記すること.)

[戻る]