はじめに
「その2」でパラメータ$a$について解説しましたが、実際の実装では他にも詳細事項が異なる場合があり得ます。公式なドキュメントに記載されていない場合もあり、注意する必要があります。以下は問題発生した(?)例です。
再サンプリング位置
OpenCVの画像リサイズ(cv::resize)では、補間画像の重心が入力画像に対しずれないよう、再サンプリング位置が設定されます。例として、整数倍に拡大する場合は、拡大画像の画素の位置は入力画像の画素位置をはさむように設定されます。以下は2倍拡大の場合の例です。
一方で、入力画像の画素を含むよう設定する方法もあります。
前者のほうが一般的だと思いますが、後者は入力画像の情報が完全に含まれる利点があり、可逆性が必要な場合や画像計測などの用途では需要があると思います。
外挿補間
バイキュービック補間では、補間のために上下および左右に2画素ずつ必要です。
本来、補間画像の外周は補間計算できない無効な領域ですが、不完全であっても「それらしく」補間されているほうが好都合な場合もあるので、OpenCVのcv::resizeでは最外周の画素値をコピーし外挿してから補間するようになっています。
以下の例は、入力画像の幅が4で拡大倍率が2の場合の、拡大画像の画素位置です。
この場合、拡大画像の両端3画素ずつは不完全な補間になります。
ちなみに、OpenCVでもアフィン変換(cv::warpAffine)では外挿補間の方式をborderModeで選択することが可能です。
関連記事


