JPEGのDCTブロックで コンテンツ指向のトリミング

28,796 views

Published on

JPEGのDCTブロックで コンテンツ指向のトリミング

Published in: Engineering
0 Comments
90 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
28,796
On SlideShare
0
From Embeds
0
Number of Embeds
10,810
Actions
Shares
0
Downloads
38
Comments
0
Likes
90
Embeds 0
No embeds

No notes for slide

JPEGのDCTブロックで コンテンツ指向のトリミング

  1. 1. JPEGのDCTブロックで コンテンツ指向のトリミング 古田陽介(@4_suke)
  2. 2. こんなことない? • 構図を工夫して撮影した写真 • Webサイトにアップロードしたら真ん中でトリ ミングされたサムネイル作られる • 切ない
  3. 3. • コンテンツの場所を考慮して切り取ってくれれば いいのに!
  4. 4. コンテンツ指向のトリミング? • トリミングする場所やサイズ を画像内容によって変化させ ることをここではそう呼ぶこ とにします http://www.imagemagick.org/discourse-server/viewtopic.php?t=18065
  5. 5. 顔認識は計算リソースがかなり必要 事前計算する場合、それを記録する ストレージが必要 顔以外は考慮してくれない 画像変換サービスにはかなり重い FacebookのOGP画像に顔が入っている場合のトリミング位置 ¦ Sunday In The Park http://snowadays.jp/2014/03/2629 • 実例:Facebook • 顔認識の結果をベースとしている(らしい)
  6. 6. • なんかもっと • ライトな方法ってないだろうか
  7. 7. • そうだ! • JPEGエンコーダーの • DCTブロックを直接参照すればいいじゃないか
  8. 8. 話すこと • JPEGデコーダに処理を追加して高周波成分の中 心位置を求め、 • その情報を使ってトリミングをしたら、 • 構図を工夫した画像でも良い感じに切り抜きで きた
  9. 9. ↑ 元画像 ←真ん中で切り取り 今回話す方法→
  10. 10. 原理 1. JPEGのデコードの過程で、元画像を8x8pixelごとに離散 コサイン変換(DCT)したデータを得られる 2. 画像をDCT変換すると高周波と低周波に分離できる 3. 経験則:コンテンツのある場所は周波数が高い • 写真:ピントが合ってエッジが立ってる • イラスト:書き込みが多く、輪郭線が多い • 顔:目や口、髪の毛の陰影
  11. 11. アプローチ • ハフマン展開+逆量子化とDCT-I の間に処理を追加 • 各ブロック内の高周波成分を積分 してブロックの特徴量を算出 • 全ブロックの特徴量の重心を計算 • 重心が枠に入るように適当なサイ ズでcrop • ハフマン展開+逆量子化 • 高周波成分の算出
  12. 12. DEMO
  13. 13. JPEGの圧縮・展開工程内のDCTをそのまま使うので追加計算 が少ない 追加実装も少ない! パターンマッチングではないのでコンテンツの種類を問わない JPEGにしか適用できない 緻密なコンテンツ、複数の物体が同居しているコンテンツには メリット小さい 文字が入っているコンテンツは苦手
  14. 14. • そのうちやりたいこと • libjpegに組み込む • 定量的評価 • jpgjs のバグ直す
  15. 15. https://github.com/yohsuke/jpgjs/tree/ content-detected-crop

×