Upgrade to Pro — share decks privately, control downloads, hide ads and more …

resize_nitpick

yoya
November 15, 2019

 resize_nitpick

画像リサイズの重箱の隅を突く話 (前半)

yoya

November 15, 2019
Tweet

More Decks by yoya

Other Decks in Technology

Transcript

  1. サムネール⽣成のうんちく(仮)から抜粋 • 画像リサイズ処理 • ⾊々 • アスペクト⽐ • メタデータ •

    画像の回転 (orientation) • サムネール 画像 • GPS位置情報 • 撮影情報(カメラ型番や設定など • ⾊空間 ࠓ೔͸ίϨ
  2. 画像リサイズの処理⽅式 • 補間フィルタ • フィルタの種類 • セパラブルの順序 • フィルタのカーネル粒度 •

    オフセット (コーナー合わせ) • エッジ処理 • 次回予定 • ビット深度 • ガンマ補正 • USM (unsharp mask) • パレット⾊保持 ࠓ೔͸͜͜·Ͱ
  3. 補間フィルタの種類 • よく使われるのは以下の4つ • NearestNeighbor • Bi-Linear • Bi-Cubic •

    Catmul-Rom (B:0, C:1/2) • Mitchell (B:1/3, C:1/3) • Lanczos (Lobe:3,4) この辺は常識なので説明省略! https://en.wikipedia.org/wiki/Bicubic_interpolation
  4. 補間フィルタ (セパラブル) • 横を先に処理して、次に縦 (Python-Pillow) • メモリは横の⽅が局所的アクセスできる • より縮⼩率の⾼い⽅を先に処理する (ImageMagick

    5以降) • なるべく途中の画像が⼩さくなるように • 縦が広がる場合は横を先に処理する (ImageMagick 4以前) • アスペクト⽐で判断
  5. 補間フィルタ (カーネル粒度) • ImageMagick では 0.01 刻みの LUT を持つ •

    OpenCV はリサイズ後の画像サイズの LUT • FFmpeg swscale は dstW/srcW (+α) の LUT
  6. 補間フィルタ (エッジの畳み込み) • ImageMagick, PIL(Pillow) • 画像の外を無視する • 画像の中だけで畳み込む •

    畳み込みが中途半端 ը૾ ͷ֎ 255 0 0 x0.75 x0.75 *0.25 191/(0.75+0.75+0.25) =191 =0 =0 = 109 *0.25
  7. 補間フィルタ (エッジの畳み込み) • OpenCV • エッジの⾊が外に続く仮定 255 0 0 x0.75

    x0.75 *0.25 =191 =0 =0 = 127 255 *0.25 =63 ը૾ ͷ֎ ͖ͬ͞ͷ ΑΓ ໌Δ͍ (63+191)/(0.25+0.75+0.75+0.25)