Home - noritama101/MATLAB-Image-Processing-Technology GitHub Wiki

課題1

使用する画像は[Penguins.jpg]を使用する。
Penguins.jpgは1024×768の正方ピクセルのディジタルカラー画像である。  


clear; % 変数のオールクリア

まず初めに元画像を表示する。

ORG=imread('Penguins.jpg'); % 原画像の入力
imagesc(ORG); axis image; % 画像の表示

1-1.png   図1 元画像  

元画像を1/2倍し、それを箱型補間で2倍(元画像と同じ大きさ)に拡大する

IMG = imresize(ORG,0.5); % 画像の縮小
IMG2 = imresize(IMG,2,'box'); % 画像の拡大
imagesc(IMG2); axis image; % 画像の表示

1-2.png   図2 1/2画像  

図2は1/2倍して元の大きさに直した画像である。目立ったブロックノイズは見られないが、ペンギンの輪郭にジャギーが見られるようになっている。

上記のIMG変数をさらに1/2倍する。
この状態では元画像の1/4倍の大きさになる。 1/4倍の画像を箱型補間で4倍にする。

IMG = imresize(IMG,0.5); % 画像の縮小
IMG2 = imresize(IMG,4,'box'); % 画像の拡大
imagesc(IMG2); axis image; % 画像の表示

1-3.png   図3 1/4画像

図3は解像度が1/4になった画像である。目に見えてブロックノイズが発生している。しかし何が写っているのかはまだ判別可能であるし、遠くから見ればブロックノイズもあまり気にならない。

1/4倍の時と同様、1/4倍の画像をさらに1/2倍して、元画像の大きさに戻す。

IMG = imresize(IMG,0.5); % 画像の縮小
IMG2 = imresize(IMG,8,'box'); % 画像の拡大
imagesc(IMG2); axis image; % 画像の表示

1-4.png   図4 1/8画像

図4は解像度が1/8になった画像である。1/4の時に比べブロックノイズが大きくなっている。まだなんとか被写体が何であるかは分かる。

1/8倍の画像をさらに1/2倍して、元画像の大きさに戻す。

IMG = imresize(IMG,0.5); % 画像の縮小
IMG2 = imresize(IMG,16,'box'); % 画像の拡大
imagesc(IMG2); axis image; % 画像の表示

1-5.png 図5 1/16画像

図5は解像度が1/16になった画像である。そろそろ被写体が何であるかの判別が難しくなるほどブロックノイズが大きくなっている。モザイクが掛かったような画像になっている。

1/16倍の画像をさらに1/2倍して、元画像の大きさに戻す。

IMG = imresize(IMG,0.5); % 画像の縮小
IMG2 = imresize(IMG,32,'box'); % 画像の拡大
imagesc(IMG2); axis image; % 画像の表示

1-6.png 図6 1/32画像

図6は解像度が1/32になった画像である。ブロックノイズによって初見では被写体が何であるか判別不能である。


##考察
このプログラムでは元の画像を一旦半分の大きさにリサイズし、2倍、4倍、8倍、16倍、32倍にリサイズし表示している。トータルの解像度は元画像と同じであるが、縮小率および拡大率が大きくなるにつれてブロック歪が大きくなって発生している。
これらの事から、一度縮小すると拡大したとしても元の画像には戻らないということがわかる。
拡大の方法によってこのブロックひずみは解消される。
たとえば、画像の拡大をboxからbicubic(最近傍の 4 行 4 列のピクセルの重み付き平均)に変更すると、ブロック歪は発生しない。ただし画像全体がボケたようになる。この場合でも、拡大、縮小率が大きくなるにつれて元画像より不鮮明な画像が生成される。