[ 高橋のページ ] [ プログラミングおよび実習II2006 ]

プログラミングおよび実習II 2006年10月27日

今日の課題: 画像をいじろう

サンプル画像

ブラウザを使って自分の prog2 ディレクトリ内に保存しましょう.

課題1027-A(締切: 今日の実習開始後すぐ,締切後チェック対象外)

10月26日の演習問題のプリントを提出し,チェックを受けてください.

課題1027-B(締切: 今日の実習終了時)

以下の二つをまとめてチェックします.リダイレクションによってサンプル画像を入力して出力を適当なファイルに保存し,画像として表示して見せてください.

<プログラム image1.c>

  1. PGM画像を二次元配列に読み込む
  2. 講義で説明した関数 Negate() で画素値を反転
  3. PGM画像として出力

<プログラム image2.c>

  1. PGM画像を二次元配列に読み込む
  2. 演習問題で作成した関数 FlipHorizontal() で画像の左右を反転
  3. PGM画像として出力

課題1027-C(おまけ,締切: 今日の実習終了時,締切後チェック対象外)

これはおまけ課題です.課題Bができた人が対象です.やらなくても実習成績の減点はありませんが,やると加点があるでしょう.

'<'や'>'を使って標準入力や標準出力をリダイレクトすると,キー入力や画面への出力の代わりにファイルを使って入出力できました.同じように,'|'(パイプといいます)を使うと,二つのプログラムの標準出力と標準入力をつなぐことができます.例えば,

$ ./image1 < uni3ascii.pgm  |  ./image2 > hoge.pgm

とすると,次のように画素反転と左右反転を一度に行うことができます.

  1. image1 が uni3ascii.pgm を読み込み,画素反転したものをパイプ経由で出力
  2. image2 はそれをパイプ経由で受け取り,左右反転して hoge.pgm に出力

では,サンプル画像の uni3kowai.pgm を入力として,

$ ./image1 < uni3kowai.pgm | ./imge2 | ./image3 > hoge.pgm

と実行すると hoge.pgm が uni3ascii.pgm と同じ画像になるようなプログラム image3.c を作りましょう.

おまけ

いろんな画像を加工してみたいという人は

実習室のLinux環境では,Netpbmという画像変換・処理ツール群が使えます. 例えばhoge.jpgという名前のJPEG画像が手元にあるとしたら,

$ jpegtopnm < hoge.jpg > hoge.ppm

とすると,PPM(バイナリ形式)の画像ファイル hoge.ppm が作成されます.次に,

$ ppmtopgm -plain < hoge.ppm > hoge.pgm

とすると,PGM(アスキー形式)の画像ファイル hoge.pgm が作成されます.もちろん,二つのコマンドをパイプでつないで

$ jpegtopnm < hoge.jpg | ppmtopgm -plain > hoge.pgm

としても構わないですね.

この hoge.pgm を自分の作ったプログラムに入力して遊んでみるとよいでせう.

ちなみに,上記の -plain というのは,ppmtopgmが出力するPGM画像をバイナリ形式 ではなくアスキー形式にするためのオプションです.jpegtopnmにこのオプションをつけて

$ jpegtopnm -plain  < hoge.jpg > hoge.ppm

とすれば,hoge.ppm はアスキー形式のPPM画像になります.この画像形式を解読してカラー画像をいじって遊ぶとさらに楽しいかも.

ところで,PNMの画像フォーマットでは,ヘッダに#ではじまるコメント行を入れることが許されています.画像変換や処理のソフトウェアによってはコメントをつけて出力するものもありますので,そういった画像も自分のプログラムで扱うためには,エディタで一度開いてコメント行を削除する,あるいは,コメント行を読み飛ばせるように自分のプログラムを改造する,という作業が必要になります.


トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2014-08-13 (水) 13:45:19