Slide 1

Slide 1 text

画像の減色処理とOctree JavaScriptで頑張る 松本 芳郎 / 2022.2.8 FukuokaJS #15

Slide 2

Slide 2 text

自己紹介 松本芳郎 ● 株式会社マネーフォワード 経費本部 ● フロントエンドエンジニア ● Twitter @bennkyougirai

Slide 3

Slide 3 text

この発表の趣旨 おれは 減色処理に トライした!

Slide 4

Slide 4 text

アジェンダ ● 減色処理の考え方 ● Octree ● 実装

Slide 5

Slide 5 text

減色処理の考え方

Slide 6

Slide 6 text

画像の減色処理とは? 画像の色を減らす処理をさす。限定された色数で表現された画像形式に変換すること。 https://web.archive.org/web/20140605161956/http://www.microsoft.com/msj/archive/S3F1. aspx

Slide 7

Slide 7 text

1. 画像データに使われている色を調べて「色集合」を求める。 2. 小さい色集合を作る 3. 2の色集合を元に、画像のピクセルを入れ替える 減色処理の考え方

Slide 8

Slide 8 text

色集合の操作のイメージ 近い色は一色にまとめられる IMG IMG (減色済) 色集合A 色集合B この対応関係を変換で利用

Slide 9

Slide 9 text

減色処理の考え方 – 実装の方針 1. 画像データのピクセルを全て走査して色集合Aを求める 2. 色集合Aを元に、任意の色数に対応した色集合Bを作成する 3. 再度、画像データを走査。ピクセルと色集合Bを突き合わせて、画像の色を置き換 える。 色集合を効率よく処理する必要がある

Slide 10

Slide 10 text

色集合の減色方法は 省略します! メディアンカットとか、 Populationとかあるよ

Slide 11

Slide 11 text

Octree

Slide 12

Slide 12 text

Octree? An octree is a tree data structure in which each internal node has exactly eight children. Octrees are most often used to partition a three-dimensional space by recursively subdividing it into eight octants. Octrees are the three-dimensional analog of quadtrees. The word is derived from oct (Greek root meaning "eight") + tree. Octrees are often used in 3D graphics and 3D game engines. https://en.wikipedia.org/wiki/Octree

Slide 13

Slide 13 text

Octree と 減色処理 https://web.archive.org/web/20140605161956/http://www.microsoft.com/msj/archi ve/S3F1.aspx 011 = 3

Slide 14

Slide 14 text

実装

Slide 15

Slide 15 text

JS(TS)での実装 普段のWebアプリケーション開発では出てこないモノたち ● ビット演算 ○ 色を2進数として扱う ○ Octreeを作る時、子ノードのインデックスを決めるのにも使う ● Uint8ClampedArray ○ 色は0 ~ 255なので ○ ブラウザのimageDataもUint8ClampedArray

Slide 16

Slide 16 text

Octree OctreeNode ColorQuantizer (Tree) ● Treeを構成するNode ● 画像データを受け取るり、 OctreeNodeを使って内部にTree を生成 ● palette() で減色後の色集合を作 る

Slide 17

Slide 17 text

処理結果

Slide 18

Slide 18 text

実演 https://github.com/m-yoshiro/image-processing-samples/tree/main/src/colorQuant ※ パスをハードコードしてるのでみなさまの手元では調整が必要です。

Slide 19

Slide 19 text

ご清聴ありがとうございました。

Slide 20

Slide 20 text

https://fukuoka.moneyforward.com/ エンジニア積極募集中!!!