©
2007 by T.IZUMI
いずみ研 Cプログラミング練習課題
ビットマップ画像をハンドルするプログラム
課題1
ビットマップファイルを読み込んで、ヘッダ54バイトを1バイトずつ16進数で表示するプログラムを書け。
課題2
ビットマップファイルを読み込んで、ファイルサイズ、画像の幅と高さを10進数で表示するプログラムを書け。
課題3
ビットマップファイルを読み込んで、明るさを半分にして出力するプログラムを書け。
課題4
ビットマップファイルを読み込んで、グレースケールにして出力するプログラムを書け。
課題5
ビットマップファイルを読み込んで、180度回転して出力するプログラムを書け。
課題6
ビットマップファイルを読み込んで、90度回転して出力するプログラムを書け。
課題7
ビットマップファイルを読み込んで、大きさを2倍に拡大して出力するプログラムを書け。
課題8
ビットマップファイルを読み込んで、n倍(nは自然数で実行時に与える)に拡大して出力するプログラムを書け。できるだけ、主観画質を向上させよ。
tips
ビットマップファイルについては http://www.google.co.jp/ あたりで「bmp」「ファイル」「形式」といったキーワードで検索すると いろいろな情報が得られるでしょう。 ビットマップファイルにもいろいろなモードがありますが、 カラーで最も単純な形式である Windows 24bit Bitmap としてください。 横幅も4の倍数のみ対応で結構です。
C言語については、本もたくさんあります。各自勉強してください。
理解もせずにやみくもに書きうつすのでは勉強になりません。 理解せずに書き写すような時間の無駄をするくらいなら、睡眠時間に充てたほうがマシです。 逆に、理解の助けのためであれば何を見ても何を調べても何を聞いても構いませんし、 結果として既存のものとほぼ同じプログラムになってしまったとしても全く構いません。
課題画像
課題1〜6用 入門編
課題1〜6用 上級編
課題7〜8用
課題3〜4のデバグ用
課題1〜6のデバグ用
課題8のデバグ用
拡大状況確認のための市松模様。オーバーフローを考慮して明部192、暗部64。
課題8のデバグ用
拡大状況確認のための市松模様。飽和処理をしないとオーバーフローする。
課題8のデバグ用
青面に水平方向周波数3のCOS波 …2次元フーリエ変換をかけると、青面の (0,0)の実部に正、 (+3,0)の実部に正、 (-3,0)の実部に正、 のピークが出るはず。その他はほぼゼロ。
青面に垂直方向周波数3のCOS波 …2次元フーリエ変換をかけると、青面の (0,0)の実部に正、 (0,+3)の実部に正、 (0,-3)の実部に正、 のピークが出るはず。その他はほぼゼロ。
青面に水平方向周波数3のCOS波と周波数5のSIN波の合成波 …2次元フーリエ変換をかけると、青面の (0,0)の実部に正、 (+3,0)の実部に正、 (-3,0)の実部に正、 (+5,0)の虚部に正、 (-5,0)の虚部に負、 のピークが出るはず。その他はほぼゼロ。
青面に垂直方向周波数3のCOS波と周波数5のSIN波の合成波 …2次元フーリエ変換をかけると、青面の (0,0)の実部に正、 (0,+3)の実部に正、 (0,-3)の実部に正、 (0,+5)の虚部に正、 (0,-5)の虚部に負、 のピークが出るはず。その他はほぼゼロ。
青面に水平方向周波数3のCOS波と垂直方向周波数5のSIN波の合成波 …2次元フーリエ変換をかけると、青面の (0,0)の実部に正、 (+3,0)の実部に正、 (-3,0)の実部に正、 (0,+5)の虚部に正、 (0,-5)の虚部に負、 のピークが出るはず。その他はほぼゼロ。
青面に斜めの波 …2次元フーリエ変換をかけると、青面の (0,0)の実部に正、 (+3,+5)の実部に正、虚部に正、 (-3,-5)の実部に正、虚部に負、 のピークが出るはず。その他はほぼゼロ。
解説など
Red, Green, Blue による色空間の
3次元イメージ
(課題3〜4)
RGB色環と輝度の
イメージ図
(課題3〜4)
領域境界の処理(領域の端を超えての畳み込み)についての
解説
(課題8)
オーバーフローの発生と飽和処理の必要性の
解説
(課題8)
画像拡大した時の LowPass のカットオフ周波数についての
説明図(殴り書き)
(課題8)
参考
泉の参考プログラムと結果
プログラム/ソース
(パスワードはいつものアレ)
プログラム/実行形式
サンプル画像1(ケーキ)
元画像
単純拡大
線型補完(平均値フィルタ)
ローパスフィルタ
参考 ... 32 x 32 にする前の画像
サンプル画像2(貝殻)
元画像
単純拡大
線型補完(平均値フィルタ)
ローパスフィルタ
参考 ... 32 x 32 にする前の画像
デバグ用画像(市松)
単純拡大
線型補完(平均値フィルタ)
ローパスフィルタ
デバグ用画像(市松/オーバーフロー)
元画像
単純拡大
線型補完(平均値フィルタ)
ローパスフィルタ
※飽和処理あり
ローパスフィルタ
※飽和処理なし/オーバーフローしている
泉 知論
@
立命館大学
理工学部
電子情報デザイン学科
戻る