Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
JPEGのDCTブロックで
コンテンツ指向のトリミング
古田陽介(@4_suke)
こんなことない?
• 構図を工夫して撮影した写真
• Webサイトにアップロードしたら真ん中でトリ
ミングされたサムネイル作られる
• 切ない
• コンテンツの場所を考慮して切り取ってくれれば
いいのに!
コンテンツ指向のトリミング?
• トリミングする場所やサイズ
を画像内容によって変化させ
ることをここではそう呼ぶこ
とにします
http://www.imagemagick.org/discourse-server/viewtopic.php...
顔認識は計算リソースがかなり必要
事前計算する場合、それを記録する
ストレージが必要
顔以外は考慮してくれない
画像変換サービスにはかなり重い
FacebookのOGP画像に顔が入っている場合のトリミング位置 ¦ Sunday In The P...
• なんかもっと
• ライトな方法ってないだろうか
• そうだ!
• JPEGエンコーダーの
• DCTブロックを直接参照すればいいじゃないか
話すこと
• JPEGデコーダに処理を追加して高周波成分の中
心位置を求め、
• その情報を使ってトリミングをしたら、
• 構図を工夫した画像でも良い感じに切り抜きで
きた
↑
元画像
←真ん中で切り取り
今回話す方法→
原理
1. JPEGのデコードの過程で、元画像を8x8pixelごとに離散
コサイン変換(DCT)したデータを得られる
2. 画像をDCT変換すると高周波と低周波に分離できる
3. 経験則:コンテンツのある場所は周波数が高い
• 写真:ピントが...
アプローチ
• ハフマン展開+逆量子化とDCT-I
の間に処理を追加
• 各ブロック内の高周波成分を積分
してブロックの特徴量を算出
• 全ブロックの特徴量の重心を計算
• 重心が枠に入るように適当なサイ
ズでcrop
• ハフマン展開+逆量子...
DEMO
JPEGの圧縮・展開工程内のDCTをそのまま使うので追加計算
が少ない
追加実装も少ない!
パターンマッチングではないのでコンテンツの種類を問わない
JPEGにしか適用できない
緻密なコンテンツ、複数の物体が同居しているコンテンツには
メリット...
• そのうちやりたいこと
• libjpegに組み込む
• 定量的評価
• jpgjs のバグ直す
https://github.com/yohsuke/jpgjs/tree/
content-detected-crop
Upcoming SlideShare
Loading in …5
×

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

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

  • Be the first to comment

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

×