0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

実装技術者向けバイキュービック補間入門 その4

0
Last updated at Posted at 2026-02-09

はじめに

バイキュービック補間による画像拡大や縮小で直面しがちな問題の典型例について解説します。

予備知識: 光学的なズームイン/ズームアウトとバイキュービック補間による拡大/縮小の相違

光学的なズームは(本来は)被写体とカメラの間隔の調節です。
以下は、ストライプパターンを被写体として、1mと6mの距離で撮影した場合の見え方を模式的に示したものです。

被写体
被写体
との距離
点拡がり関数 見え方
1m
6m
縮尺を被写体に
合わせた場合

  • ズームアウトする(被写体から離れる)と小さく見えますが、レンズの解像度や点拡がり関数は一定なので、被写体に対する相対的なぼけ量が大きくなります。したがい、グラフの横方向の縮尺を被写体の見かけ上のサイズに合わせるとなまった形になります。
  • ズームインする(被写体に近づく)場合はこの逆で、被写体に対する相対的なぼけ量は小さくなり、グラフは急峻な形になります。

※レンズの解像度: どの程度の細かさを表現できるかを表す性能指標。
 単位は ラインペア/mm または 本/mm。
※点拡がり関数(PSF: Point Spread Function): 点光源に対する応答を表す関数。

一方で、バイキュービック補間では入力画像はそのままで、再サンプリングの間隔を調節することにより画像を拡大したり縮小したりします。
画像拡大や縮小への期待は、光学的なズームインやズームアウトの再現であり、相対的なぼけ量が期待と異なることで違和感が生じます。

問題例① 細かなパターンを縮小するとむらが発生

入力画像 1/8縮小画像

原因

バイキュービック補間による縮小では、被写体に対する相対的なぼけ量はそのままで、細かなパターンを粗い間隔で再サンプリングするので、むらが発生しやすいです。
一方で光学的なズームアウトでは相対的なぼけ量が大きくなるので、細かなパターンは適宜ぼけてつぶれ、それをサンプリングするのでむらが発生しにくいです。

対処方法

入力画像をぼかすことにより、被写体に対する相対的なぼけ量を大きくします。次にバイキュービック補間で縮小します。
以下は、OpenCVのcv::GaussianBlur(ksizeは21x21)で入力画像をぼかしてからバイキュービック補間で縮小した例です。

ぼかした画像 1/8縮小画像

あるいは(OpenCVのcv::resizeで簡単に済ませるなら)INTER_CUBICではなくINTER_AREAを使用します。INTER_AREAは公式ドキュメントには「resampling using pixel area relation」とありますが、これは再サンプリング対象範囲の画素の値の合計を面積で割る、つまり平均値です。平均値圧縮はボックスフィルタと等価なので、画像をぼかす作用があります。ただし、ガウシアンでぼかす場合に比較し画質は若干悪くなります。
以下は、INTER_AREAで縮小した例です。

1/8縮小画像
(INTER_AREA)

問題例② 拡大した画像がぼける

原因

光学的なズームインでは、被写体に対する相対的なぼけ量が小さくなりますが、バイキュービック補間による拡大では、再サンプリングの間隔を小さくするだけなので、ぼけ量が大きくなったように見えてしまいます。

対処方法

バイキュービック補間で拡大後の画像に、先鋭化を適用すれば多少は改善します。しかし冒頭の6mの入力画像のようにつぶれてしまったものは復元出来ないため、状況により学習型超解像(GAN: 敵対的生成ネットワークなど)の適用を検討することになるかもしれません。

以下の例は、標準テスト画像「Cameraman」(出典:MIT Works Acquired Digitally)に、先鋭化としてアンシャープマスクを適用した例です。パラメータをいろいろ調節してみましたが、この例の程度の画質に対する効果は限定的なようです。

8倍拡大画像 アンシャープマスク
を適用
Cameraman_x8_050.png Cameraman_x8_050_unsharp.png

問題例③ CGイラストを拡大すると斜めエッジがぎざぎざになる

アニメ絵のようなCGイラストをバイキュービック補間で拡大すると、斜めエッジがぎざぎざになります。
以下は45度二値画像をバイキュービック補間で拡大した例です。(拡大後に x:160, y:160, w:180, h:180 の範囲を切り出し)

入力画像 8倍拡大画像
bi45.png bi45_x8_050.png

原因

CGイラストはカメラを通していない画像なのでぼけがありません。したがい、入力関数が2レベルしかないステップ状になります。このような関数は2次微分までのテイラー級数展開で表現することが困難です。($f(x)=f(x_j)+shf’(x_j)+s^2h^2f’’(x_j)/2+O(h^3)$ の内、剰余項$O(h^3)$が支配的になる)
直感的な把握としては、エッジの画素それぞれが点光源のように作用し、畳み込みカーネルの1/4が並んだような補間結果になります。以下は、バイキュービック補間の畳み込みカーネルと、45度二値画像のバイキュービック補間の、同じアングルの3Dプロットです。

畳み込みカーネル 45度二値画像のバイキュービック補間

対処方法

入力画像を少しぼかしてからバイキュービック補間で拡大すれば、斜めエッジのぎざぎざが低減されます。
以下は、OpenCVのcv::GaussianBlur(ksizeは5x5)で少しぼかしてからバイキュービック補間で拡大した例です。

少しぼかした画像 8倍拡大画像
bi45_b3.png bi45_x8_b3_050.png

画像のぼけが許容できない場合は、学習型超解像を検討する必要があります。CGイラストは画像の詳細構造がシンプルなので、学習型超解像が適していると期待されます。
以下はアニメ絵(出典: Wikipe-tan, drawn by Kasuga~jawiki)をバイキュービック補間と学習型超解像(Real-ESRGAN)で4倍拡大した画像の比較です。元はsvgで、128px png化したものを入力画像とし、拡大後に x:120, y:80, w:160, h:200 の範囲を切り出しました。
Real-ESRGANのモデルはアニメ絵を大量に学習させたというrealesrgan-x4plus-animeです。拡大画像は、元のsvgから4倍サイズでpng化した画像と良く一致しています。

入力画像
(svgから
128px png化)
バイキュービック
補間で拡大
学習型超解像
(Real-ESRGAN)
で拡大
比較参照用
(svgから
512px png化)
128px-Wikipe-tan_face.svg.png Wikipe-tan_face_x4_050.png Wikipe-tan_face_x4_rESRGAN_realesrgan-x4plus-anime.png 512px-Wikipe-tan_face.svg.png

参考文献

  1. Wenru Dong
    What is OpenCV’s INTER_AREA Actually Doing?
    https://medium.com/@wenrudong/what-is-opencvs-inter-area-actually-doing-282a626a09b3

  2. Xintao Wang, Liangbin Xie, Chao Dong, Ying Shan
    Real-ESRGAN: Training Real-World Blind Super-Resolution with Pure Synthetic Data
    https://doi.org/10.48550/arXiv.2107.10833

関連記事

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?