情報領域演習第一:P演習

電気通信大学情報理工学域I類 (情報系)
2023年度後学期


[一覧に戻る]


課題E3

問題

画像の輪郭を抽出するための古典的な手法として,ラプラシアンフィルタというものがある.それは以下のようなものである.

例えば,ラプラシアンフィルタを適用する前の原画像が左のものであるとき, ラプラシアンフィルタを適用した後の画像は右になる.

説明を簡単にするため,画像は255階調のグレースケールで表されているとする.つまり,画像は2次元配列で,その各要素は0以上255以下の整数であるとする.

画像を表すm × nの2次元配列 img1 に対して,次のように新しい m × nの2次元配列 img2 を作成する.
まず,i = 0またはm-1,であるか,j = 0またはn-1 であるとき,

img2[i][j] = 0
とする. 一方で,その条件をi と j が満たさないとき,
img2[i][j] = min{ | img1[i-1][j] + img1[i+1][j] + img1[i][j-1] + img1[i][j+1] - 4 img1[i][j] |, 255}
とする. つまり,img2[i][j] は img1[i-1][j] + img1[i+1][j] + img1[i][j-1] + img1[i][j+1] - 4 img1[i][j] の絶対値と255の小さい方である.

img1 にラプラシアンフィルタを適用した後で得られる画像が img2 である.

画像を表す2次元配列 img1 から,それにラプラシアンフィルタを適用した後で得られる画像を得るためのメソッド laplacian(img1) を作成せよ.

入力仕様

出力仕様

irb> laplacian [[1, 1, 1], [1, 0, 1], [1, 1, 1]]
=> [[0, 0, 0], [0, 4, 0], [0, 0, 0]]
irb> laplacian [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]
=> [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
irb> laplacian [[1], [2], [3]]
=> [[0], [0], [0]]
irb> laplacian [[255, 255, 255], [254, 0, 253], [255, 255, 255]]
=> [[0, 0, 0], [0, 255, 0], [0, 0, 0]]
irb> laplacian [[0, 0, 0], [0, 255, 0], [0, 0, 0]]
=> [[0, 0, 0], [0, 255, 0], [0, 0, 0]]
irb> laplacian [[255, 255, 255, 255, 255, 255], [255, 0, 0, 0, 0, 255], [255, 0, 0, 0, 0, 255], [255, 0, 0, 0, 0, 255], [255, 255, 255, 255, 255, 255]]
=>  [[0, 0, 0, 0, 0, 0], [0, 255, 255, 255, 255, 0], [0, 255, 0, 0, 255, 0], [0, 255, 255, 255, 255, 0], [0, 0, 0, 0, 0, 0]]
irb> laplacian [[0, 0, 0, 0, 0, 0], [0, 255, 255, 255, 255, 0], [0, 255, 255, 255, 255, 0], [0, 255, 255, 255, 255, 0], [0, 0, 0, 0, 0, 0]]
=>  [[0, 0, 0, 0, 0, 0], [0, 255, 255, 255, 255, 0], [0, 255, 0, 0, 255, 0], [0, 255, 255, 255, 255, 0], [0, 0, 0, 0, 0, 0]]

提出法

CEDにて,プログラムを作成したディレクトリで以下を実行せよ.
% ~ta001026/enshu1p/checker_e3.rb ファイル名
「Submission successfully completed.」と表示されれば,提出が完了したことになる.


[一覧に戻る]