[一覧に戻る]
例えば,ラプラシアンフィルタを適用する前の原画像が左のものであるとき, ラプラシアンフィルタを適用した後の画像は右になる.
説明を簡単にするため,画像は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]]
「Submission successfully completed.」と表示されれば,提出が完了したことになる.% /ced-home/staff/enshu1p/checker_e3.rb ファイル名
[一覧に戻る]