ブロックノイズ

ブロックノイズは、JPEG 形式の画像や MPEG 形式の動画を高圧縮率で圧縮したときに現れるブロック状のノイズである。画像あるいは動画などのデータは、数字の羅列からなり、画素数が増えればデータ量も増える。例えば、1 つの色を 256 = 28 段階の明るさで表現するとき、1×1 ピクセルの RGB カラー画像のデータを保存するのに 8 × 3 = 24 bits = 3 bytes が必要なので、4,608 × 3,456 = 15,925,248(約 1,600 万画素)のカラー画像は、1.6×107 × 3 = 4.7×106 bytes = 45.6 MB となる。画像 1 枚で 45.6 MB であり、画像の表示や画像の処理に非常に時間がかかる。そのため、一般的には、このような生データを使わずに、圧縮されたデータを使用する。

JPEG は、画像データの圧縮形式の一つである。JPEG では、画像全体を 8×8 のピクセルブロックに分けてから、各ブロックに対して圧縮処理を行なっている。そのため、高圧縮率で画像を圧縮すると、隣接するブロック同士の情報量の連続性が著しく失われる。実際に、高圧縮率で圧縮された JPEG 画像を拡大すると、8×8 ピクセルからなるブロックを確認することができる。

JPEGを拡大するとブロックノイズを見ることができる。

ブロックノイズは grid noise、staircase noise、および corner outlier の 3 種類に分けられる(Lee et al., 1998)。高圧縮率で圧縮された JPEG 画像を拡大すると、あるブロックの色相や輝度が、隣接するブロックのそれと明らかに異なっていて、ブロック間の境界線がはっきりと見える。このように色相や輝度がブロックごとに非連続的に見えることを grid noise という。また、画像はブロックごとに圧縮されているため、画像中に斜線などが含まれると、その斜線がブロックを積み上げた階段状になる。斜線が階段状に見えることを staircase noise という。さらに、ブロックの角に着目すると、あるブロックの角の色相や輝度は、隣接する 3 つのブロックのそれと著しく異なっているのを確認できる。このような現象を corner outlier という。

JPEGを拡大するとブロックノイズを見ることができる。

JPEG 画像を処理してから、処理結果を再度 JPEG で保存すると、ブロックノイズが増えることが知られている。これはすでに圧縮された画像がさらに圧縮されるためである。そのため、ブロックノイズを増やさないようにするためには、画像処理中に JPEG 形式での保存と再読み込みをなるべく避けるべきである。どうしても、途中結果を保存しなければならない場合は、TIFF 形式あるいは生データ(数値データ)のままで保存したほうがいい。

また、既に大きなブロックノイズが入っている画像は、平滑化することでブロックノイズを軽減できる場合がある。OpenCV では、Gaussian Filter、Median Filter、Bilateral Filter、Non-local Means Filter (NL Means Filter)、Non-local Means Filter (Colored)、Adaptive Bilateral Filter などの平滑化アルゴリズムを提供している。ブロックノイズを軽減させたい場合は、これらのアルゴリズムを試す価値はある。

References

  • Y. L. Lee, H. C. Kim, and H. W. Park. Blocking Effect Reduction of JPEG Images by Signal Adaptive Filtering. IEEE Transactions on image processing 1998, 7(2):229-234. DOI: 10.1109/83.661000