Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
resize_nitpick
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
yoya
November 15, 2019
Technology
180
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
resize_nitpick
画像リサイズの重箱の隅を突く話 (前半)
yoya
November 15, 2019
More Decks by yoya
See All by yoya
ImageFluxBinary
yoya
2
3k
HEIF-kaisetsu
yoya
4
3.6k
go-thumber-imagick
yoya
1
210
chokaizomae
yoya
2
620
wildimagebinary
yoya
1
230
goimagicksyokai
yoya
2
1.2k
GoImagickThumbnail
yoya
0
1.7k
sushigazou
yoya
0
12k
twitterimgupload
yoya
0
420
Other Decks in Technology
See All in Technology
AIエージェントを雇う前に決める5つのこと
knishioka
1
130
markdown-poster Introduction
kazamori
0
460
All About Sansan – for New Global Engineers
sansan33
PRO
1
1.5k
Bet AI Day 2026丨AIを「使う」から、AIが「働く」へ ― LayerXが進める「組織AI」の社会実装
layerx
PRO
2
1.4k
Nav2、Nav3 ... はたまた自作?〜 作って理解する Nav3 の設計意図 〜 / Nav2, Nav3 ... or Build Your Own? — Understanding Nav3's design intent by building it from scratch
yanzm
0
140
サイボウズ 開発本部採用ピッチ / Cybozu Engineer Recruit
cybozuinsideout
PRO
12
87k
Oracle AI Databaseデータベース・サービス: BaseDB/ExaDB-Dの可用性
oracle4engineer
PRO
1
1.1k
「面白い!」を信じ抜け。激動の時代を貫く、オンリーワン・エンジニアの条件
kizawa2020
2
630
会計事務所と顧問先の契約関係をOIDC・OAuthで表現する
terara
0
580
[RSJ26] Hierarchy-Aware Multimodal Retrieval-Augmented Generation for Embodied Question Answering
keio_smilab
PRO
1
140
アクセスキー流出時の対応で再認識した攻撃側と防御側の非対称性について
kazzpapa3
1
510
AI駆動開発はどこまで来たのか? ファインディの最新実態調査で読み解く現在地 Devin Con Tokyo
akiratom
5
2.3k
Featured
See All Featured
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.7k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
270
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
460
The SEO identity crisis: Don't let AI make you average
varn
0
550
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
500
Abbi's Birthday
coloredviolet
3
9.6k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
6
1.2k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
3k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
4
540
Transcript
画像リサイズの重箱の 隅を突く話 (前半) 2019/11/15(⾦) “よや” <
[email protected]
>
⾃⼰紹介 • twitter.com/yoya • github.com/yoya • ImageMagick ウォッチャー(⾃称) • 画像リサイズのうんちく
(今回のネタ下) • https://qiita.com/yoya/items/95c37e02762431b1abf0
発表のきっかけ https://twitter.com/yoya/status/1192667961934278656
サムネール⽣成のうんちく(仮)から抜粋 • 画像リサイズ処理 • ⾊々 • アスペクト⽐ • メタデータ •
画像の回転 (orientation) • サムネール 画像 • GPS位置情報 • 撮影情報(カメラ型番や設定など • ⾊空間 ࠓίϨ
画像リサイズの処理⽅式 • 補間フィルタ • フィルタの種類 • セパラブルの順序 • フィルタのカーネル粒度 •
オフセット (コーナー合わせ) • エッジ処理 • 次回予定 • ビット深度 • ガンマ補正 • USM (unsharp mask) • パレット⾊保持 ࠓ͜͜·Ͱ
知る事のメリット • 任意の画像処理エンジンと厳密に⼀致させる処理が⾃作できる (かもしれない) • ⾃分の⽤途にあった改造ができる • 画像サービスの使ってる画像エンジンを推測できる • バージョンまである程度絞れる(かもしれない)
補間フィルタ • リサイズ結果が違う場合、⼤抵これが原因 • 拡⼤してできる隙間をどう埋めるか => 補間フィルタ ϐΫηϧΛ͛Δ 伱ؒΛຒΊΔ
補間フィルタ • 縮⼩の場合、どのように混ぜるか ϐΫηϧΛߥ͘͢Δ ࠞͥΔ
補間フィルタの種類 • よく使われるのは以下の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
補間フィルタ (セパラブル) • 2次元のフィルタを縦と横で分けて処理できる
補間フィルタ (セパラブル) • 良いといっても、計算機誤差からの差異は⽣じる • 左が実験画像、真ん中は横=>縦の順。右は縦=>横の順、差分強調
補間フィルタ (セパラブル) • 横を先に処理して、次に縦 (Python-Pillow) • メモリは横の⽅が局所的アクセスできる • より縮⼩率の⾼い⽅を先に処理する (ImageMagick
5以降) • なるべく途中の画像が⼩さくなるように • 縦が広がる場合は横を先に処理する (ImageMagick 4以前) • アスペクト⽐で判断
補間フィルタ (カーネル粒度) • 補間フィルタのカーネル計算が重たいケースがある -BODPT ͳΜͯ ΊͬͪΌॏ͍ͨ ⼀度、計算した結果を LUT(lookup table)
に保存して、 これを元に畳み込み計算する
補間フィルタ (カーネル粒度) • ImageMagick では 0.01 刻みの LUT を持つ •
OpenCV はリサイズ後の画像サイズの LUT • FFmpeg swscale は dstW/srcW (+α) の LUT
補間フィルタ (オフセット) • ピクセルの広げ⽅にも種類がある ࠨ্߹Θͤ ਅΜத߹Θͤ ࢛۱߹Θͤ DPSOFS@BMJHOFE PGGTFU OBJWF
͍͍ͩͨίϨ
補間フィルタ (オフセット) • Pillow(PIL) の動きがバージョンで異なる • https://qiita.com/yoya/items/3b4a8080516259ece684 1JMMPXҎલ ݄ 1JMMPXҎ߱
݄
補間フィルタ (オフセット) • Pillow-3.3.3以前 Pillow-3.4.0以降
補間フィルタ (エッジの畳み込み) • Bi-Linearを含む⼤抵のフィルタは混ぜる範囲が画像の外を巻き 込む ࠞͥΔ
補間フィルタ (エッジの畳み込み) • 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
補間フィルタ (エッジの畳み込み) • 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)
補間フィルタ (エッジの畳み込み) • 本来、画像の外側の仮定によってリサイズ結果を変えるべき &EHF3FQFBUFE 3FGMFDU NJSSPS 5JMJOH
まとめ • リサイズの実装アルゴリズムは選択肢が多くある • これらの組み合わせから、サムネール画像を⾒て処理に使った 画像エンジンを推測する事ができる。(かもしれない)
次回予告 • 次回予定 • ビット深度 • ガンマ補正 • USM (unsharp
mask) • パレット⾊保持