SlideShare une entreprise Scribd logo
1  sur  9
LIBJPEG TURBOの使い方と 
12ビット画像への対応 
名古屋工業大学 
福嶋慶繁 
サンプルコード 
https://github.com/norishigefukushima/libjpeg12bit
LIBJPEG TURBOとは 
• libjpegをSIMD等を用いて高速化実装したライブ 
ラリ. 
• 標準に準拠したいくつかの拡張機能も実装済み 
• 並列化はベクトル化のみで,マルチコアは不使用 
• libjpegとlibjpegturboの関数や設定は同じ.
使い方
Jpeg.cpp 
• OpenCVのIOをもつサンプル 
• imencodeJPEG, imdecodeJPEGで画像の圧縮展開 
• jpeg_encodeとjpeg_decodeがlibjpegを使った圧縮の実体 
• このサンプルのライブラリとして添付されているlibjpeg.libは 
visual studio 64bitバイナリ向けの入力画像が12bitでに対応した 
ものでそれに付随してコードも変更されている. 
• todo 
• Matのタイプを切り替えることで8bit 12bitどっちも対応するコードが 
生成可能なので気が向いたら変更.
DCTの精度を変更する 
• 構造体struct jpeg_compress_struct cinfo のパラメータにて 
cinfo.dct_method=JDCT_ISLOW 
とすることで変更可能.候補は3つ. 
typedef enum { 
JDCT_ISLOW, /* slow but accurate integer algorithm */ 
JDCT_IFAST, /* faster, less accurate integer method */ 
JDCT_FLOAT /* floating-point: accurate, fast on fast HW */ 
} J_DCT_METHOD;
算術符号化を使う 
• 構造体struct jpeg_compress_struct cinfo のパラメータにて 
cinfo.arith_code = TRUE 
とすることで算術符号化が有効化 
算術符号化は符号化効率が大きく向上する一方で計算コストが増 
える.
ハフマンテーブルを設定する 
• クオリティパラメータ(0-100)を量子化パラメータへ変換す 
る 
• int q = jpeg_quality_scaling(quality); 
• 量子化テーブルを新たにセットする 
• ルミナンスが0番クロマが1番 
• jpeg_add_quant_table(& cinfo, 0,std_luminance_quant_tbl, q, TRUE); 
• jpeg_add_quant_table(& cinfo, 1,std_chrominance_quant_tbl, q, TRUE); 
s•tatテic coーnst uブnsignルed inはt std1_lu6minxan1ce_6quant_tbl[DCTSIZE2] = 
{ 
16, 11, 10, 16, 24, 40, 51, 61, 
12, 12, 14, 19, 26, 58, 60, 55, 
14, 13, 16, 24, 40, 57, 69, 56, 
14, 17, 22, 29, 51, 87, 80, 62, 
18, 22, 37, 56, 68, 109, 103, 77, 
24, 35, 55, 64, 81, 104, 113, 92, 
49, 64, 78, 87, 103, 121, 120, 101, 
72, 92, 95, 98, 112, 100, 103, 99 
}; 
static const unsigned int std_chrominance_quant_tbl[DCTSIZE2] = 
{ 
17, 18, 24, 47, 99, 99, 99, 99, 
18, 21, 26, 66, 99, 99, 99, 99, 
24, 26, 56, 99, 99, 99, 99, 99, 
47, 66, 99, 99, 99, 99, 99, 99, 
99, 99, 99, 99, 99, 99, 99, 99, 
99, 99, 99, 99, 99, 99, 99, 99, 
99, 99, 99, 99, 99, 99, 99, 99, 
99, 99, 99, 99, 99, 99, 99, 99 
};
12bitで使う 
• CmakeのオプションでWITH12bitをonにしてコンパイル 
• 注意 
• 8bitと併用不可.12bit入力専用ライブラリになる. 
• 算術符号使用不可 
• 入力ビットストリーム(JSAMPLE)はshort型
差分を符号化する 
• フレーム間差分などの情報を12bit対応JPEGで保存する場合,量 
子化テーブルをMPEGのインターフレームの符号化の係数のよ 
うに変更する必要がある. 
• 自然画像よりもフラットな量子化係数が好ましい 
static const unsigned int flt_luminance_quant_tbl[DCTSIZE2] = 
{ 
16, 16, 16, 16, 16, 16, 16, 16, 
16, 16, 16, 16, 16, 16, 16, 16, 
16, 16, 16, 16, 16, 16, 16, 16, 
16, 16, 16, 16, 16, 16, 16, 16, 
16, 16, 16, 16, 16, 16, 16, 16, 
16, 16, 16, 16, 16, 16, 16, 16, 
16, 16, 16, 16, 16, 16, 16, 16, 
16, 16, 16, 16, 16, 16, 16, 16 
}; 
//MPEG2 test model 5 
static const unsigned int flt_chrominance_quant_tbl[DCTSIZE2] = 
{ 
16, 17, 18, 19, 20, 21, 22, 23, 
17, 18, 19, 20, 21, 22, 23, 24, 
18, 19, 20, 21, 22, 23, 24, 25, 
19, 20, 21, 22, 23, 24, 25, 27, 
20, 21, 22, 23, 24, 25, 27, 28, 
21, 22, 23, 24, 25, 27, 28, 30, 
22, 23, 24, 25, 27, 28, 30, 31, 
23, 24, 25, 27, 28, 30, 31, 33 
};

Contenu connexe

Tendances

プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜京大 マイコンクラブ
 
2015年度GPGPU実践プログラミング 第9回 行列計算(行列-行列積)
2015年度GPGPU実践プログラミング 第9回 行列計算(行列-行列積)2015年度GPGPU実践プログラミング 第9回 行列計算(行列-行列積)
2015年度GPGPU実践プログラミング 第9回 行列計算(行列-行列積)智啓 出川
 
[DL輪読会]BADGR: An Autonomous Self-Supervised Learning-Based Navigation System
[DL輪読会]BADGR: An Autonomous Self-Supervised Learning-Based Navigation System[DL輪読会]BADGR: An Autonomous Self-Supervised Learning-Based Navigation System
[DL輪読会]BADGR: An Autonomous Self-Supervised Learning-Based Navigation SystemDeep Learning JP
 
ゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learning
ゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learningゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learning
ゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement LearningPreferred Networks
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門Norishige Fukushima
 
大規模な組合せ最適化問題に対する発見的解法
大規模な組合せ最適化問題に対する発見的解法大規模な組合せ最適化問題に対する発見的解法
大規模な組合せ最適化問題に対する発見的解法Shunji Umetani
 
(文献紹介)エッジ保存フィルタ:Side Window Filter, Curvature Filter
(文献紹介)エッジ保存フィルタ:Side Window Filter, Curvature Filter(文献紹介)エッジ保存フィルタ:Side Window Filter, Curvature Filter
(文献紹介)エッジ保存フィルタ:Side Window Filter, Curvature FilterMorpho, Inc.
 
いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例Fixstars Corporation
 
2015年度GPGPU実践プログラミング 第6回 パフォーマンス解析ツール
2015年度GPGPU実践プログラミング 第6回 パフォーマンス解析ツール2015年度GPGPU実践プログラミング 第6回 パフォーマンス解析ツール
2015年度GPGPU実践プログラミング 第6回 パフォーマンス解析ツール智啓 出川
 
[DL輪読会]大規模分散強化学習の難しい問題設定への適用
[DL輪読会]大規模分散強化学習の難しい問題設定への適用[DL輪読会]大規模分散強化学習の難しい問題設定への適用
[DL輪読会]大規模分散強化学習の難しい問題設定への適用Deep Learning JP
 
DQNからRainbowまで 〜深層強化学習の最新動向〜
DQNからRainbowまで 〜深層強化学習の最新動向〜DQNからRainbowまで 〜深層強化学習の最新動向〜
DQNからRainbowまで 〜深層強化学習の最新動向〜Jun Okumura
 
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編Fixstars Corporation
 
AIチップ戦国時代における深層学習モデルの推論の最適化と実用的な運用を可能にするソフトウェア技術について
AIチップ戦国時代における深層学習モデルの推論の最適化と実用的な運用を可能にするソフトウェア技術についてAIチップ戦国時代における深層学習モデルの推論の最適化と実用的な運用を可能にするソフトウェア技術について
AIチップ戦国時代における深層学習モデルの推論の最適化と実用的な運用を可能にするソフトウェア技術についてFixstars Corporation
 
SSE4.2の文字列処理命令の紹介
SSE4.2の文字列処理命令の紹介SSE4.2の文字列処理命令の紹介
SSE4.2の文字列処理命令の紹介MITSUNARI Shigeo
 
KiCadで雑に基板を作る チュートリアル
KiCadで雑に基板を作る チュートリアルKiCadで雑に基板を作る チュートリアル
KiCadで雑に基板を作る チュートリアル裕士 常田
 
初めてのグラフカット
初めてのグラフカット初めてのグラフカット
初めてのグラフカットTsubasa Hirakawa
 
(文献紹介) 画像復元:Plug-and-Play ADMM
(文献紹介) 画像復元:Plug-and-Play ADMM(文献紹介) 画像復元:Plug-and-Play ADMM
(文献紹介) 画像復元:Plug-and-Play ADMMMorpho, Inc.
 
2値分類・多クラス分類
2値分類・多クラス分類2値分類・多クラス分類
2値分類・多クラス分類t dev
 

Tendances (20)

プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜
 
2015年度GPGPU実践プログラミング 第9回 行列計算(行列-行列積)
2015年度GPGPU実践プログラミング 第9回 行列計算(行列-行列積)2015年度GPGPU実践プログラミング 第9回 行列計算(行列-行列積)
2015年度GPGPU実践プログラミング 第9回 行列計算(行列-行列積)
 
画像処理の高性能計算
画像処理の高性能計算画像処理の高性能計算
画像処理の高性能計算
 
[DL輪読会]BADGR: An Autonomous Self-Supervised Learning-Based Navigation System
[DL輪読会]BADGR: An Autonomous Self-Supervised Learning-Based Navigation System[DL輪読会]BADGR: An Autonomous Self-Supervised Learning-Based Navigation System
[DL輪読会]BADGR: An Autonomous Self-Supervised Learning-Based Navigation System
 
ゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learning
ゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learningゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learning
ゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learning
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
 
大規模な組合せ最適化問題に対する発見的解法
大規模な組合せ最適化問題に対する発見的解法大規模な組合せ最適化問題に対する発見的解法
大規模な組合せ最適化問題に対する発見的解法
 
(文献紹介)エッジ保存フィルタ:Side Window Filter, Curvature Filter
(文献紹介)エッジ保存フィルタ:Side Window Filter, Curvature Filter(文献紹介)エッジ保存フィルタ:Side Window Filter, Curvature Filter
(文献紹介)エッジ保存フィルタ:Side Window Filter, Curvature Filter
 
いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例
 
2015年度GPGPU実践プログラミング 第6回 パフォーマンス解析ツール
2015年度GPGPU実践プログラミング 第6回 パフォーマンス解析ツール2015年度GPGPU実践プログラミング 第6回 パフォーマンス解析ツール
2015年度GPGPU実践プログラミング 第6回 パフォーマンス解析ツール
 
[DL輪読会]大規模分散強化学習の難しい問題設定への適用
[DL輪読会]大規模分散強化学習の難しい問題設定への適用[DL輪読会]大規模分散強化学習の難しい問題設定への適用
[DL輪読会]大規模分散強化学習の難しい問題設定への適用
 
DQNからRainbowまで 〜深層強化学習の最新動向〜
DQNからRainbowまで 〜深層強化学習の最新動向〜DQNからRainbowまで 〜深層強化学習の最新動向〜
DQNからRainbowまで 〜深層強化学習の最新動向〜
 
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
 
AIチップ戦国時代における深層学習モデルの推論の最適化と実用的な運用を可能にするソフトウェア技術について
AIチップ戦国時代における深層学習モデルの推論の最適化と実用的な運用を可能にするソフトウェア技術についてAIチップ戦国時代における深層学習モデルの推論の最適化と実用的な運用を可能にするソフトウェア技術について
AIチップ戦国時代における深層学習モデルの推論の最適化と実用的な運用を可能にするソフトウェア技術について
 
プログラムを高速化する話
プログラムを高速化する話プログラムを高速化する話
プログラムを高速化する話
 
SSE4.2の文字列処理命令の紹介
SSE4.2の文字列処理命令の紹介SSE4.2の文字列処理命令の紹介
SSE4.2の文字列処理命令の紹介
 
KiCadで雑に基板を作る チュートリアル
KiCadで雑に基板を作る チュートリアルKiCadで雑に基板を作る チュートリアル
KiCadで雑に基板を作る チュートリアル
 
初めてのグラフカット
初めてのグラフカット初めてのグラフカット
初めてのグラフカット
 
(文献紹介) 画像復元:Plug-and-Play ADMM
(文献紹介) 画像復元:Plug-and-Play ADMM(文献紹介) 画像復元:Plug-and-Play ADMM
(文献紹介) 画像復元:Plug-and-Play ADMM
 
2値分類・多クラス分類
2値分類・多クラス分類2値分類・多クラス分類
2値分類・多クラス分類
 

Similaire à Libjpeg turboの使い方

vImageのススメ(改訂版)
vImageのススメ(改訂版)vImageのススメ(改訂版)
vImageのススメ(改訂版)Shuichi Tsutsumi
 
JJUGナイトセミナー OpenJDK祭り「OpenJ9+OpenJDK」
JJUGナイトセミナー OpenJDK祭り「OpenJ9+OpenJDK」JJUGナイトセミナー OpenJDK祭り「OpenJ9+OpenJDK」
JJUGナイトセミナー OpenJDK祭り「OpenJ9+OpenJDK」Takakiyo Tanaka
 
女子美術大学メディアアート演習ⅡB 2012 Fall 第2回 1/2
 女子美術大学メディアアート演習ⅡB 2012 Fall 第2回 1/2 女子美術大学メディアアート演習ⅡB 2012 Fall 第2回 1/2
女子美術大学メディアアート演習ⅡB 2012 Fall 第2回 1/2Satoru Tokuhisa
 
re:Grouth 2020 : AWS Infrastrucuter Serviceの進化 2020
re:Grouth 2020 : AWS Infrastrucuter Serviceの進化 2020re:Grouth 2020 : AWS Infrastrucuter Serviceの進化 2020
re:Grouth 2020 : AWS Infrastrucuter Serviceの進化 2020Shuji Kikuchi
 
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)Takeshi Yamamuro
 

Similaire à Libjpeg turboの使い方 (6)

Inside png
Inside pngInside png
Inside png
 
vImageのススメ(改訂版)
vImageのススメ(改訂版)vImageのススメ(改訂版)
vImageのススメ(改訂版)
 
JJUGナイトセミナー OpenJDK祭り「OpenJ9+OpenJDK」
JJUGナイトセミナー OpenJDK祭り「OpenJ9+OpenJDK」JJUGナイトセミナー OpenJDK祭り「OpenJ9+OpenJDK」
JJUGナイトセミナー OpenJDK祭り「OpenJ9+OpenJDK」
 
女子美術大学メディアアート演習ⅡB 2012 Fall 第2回 1/2
 女子美術大学メディアアート演習ⅡB 2012 Fall 第2回 1/2 女子美術大学メディアアート演習ⅡB 2012 Fall 第2回 1/2
女子美術大学メディアアート演習ⅡB 2012 Fall 第2回 1/2
 
re:Grouth 2020 : AWS Infrastrucuter Serviceの進化 2020
re:Grouth 2020 : AWS Infrastrucuter Serviceの進化 2020re:Grouth 2020 : AWS Infrastrucuter Serviceの進化 2020
re:Grouth 2020 : AWS Infrastrucuter Serviceの進化 2020
 
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
 

Plus de Norishige Fukushima

計算スケジューリングの効果~もし,Halideがなかったら?~
計算スケジューリングの効果~もし,Halideがなかったら?~計算スケジューリングの効果~もし,Halideがなかったら?~
計算スケジューリングの効果~もし,Halideがなかったら?~Norishige Fukushima
 
多チャンネルバイラテラルフィルタの高速化
多チャンネルバイラテラルフィルタの高速化多チャンネルバイラテラルフィルタの高速化
多チャンネルバイラテラルフィルタの高速化Norishige Fukushima
 
計算機アーキテクチャを考慮した高能率画像処理プログラミング
計算機アーキテクチャを考慮した高能率画像処理プログラミング計算機アーキテクチャを考慮した高能率画像処理プログラミング
計算機アーキテクチャを考慮した高能率画像処理プログラミングNorishige Fukushima
 
3次元計測とフィルタリング
3次元計測とフィルタリング3次元計測とフィルタリング
3次元計測とフィルタリングNorishige Fukushima
 
デプスセンサとその応用
デプスセンサとその応用デプスセンサとその応用
デプスセンサとその応用Norishige Fukushima
 
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないことNorishige Fukushima
 
複数台のKinectV2の使い方
複数台のKinectV2の使い方複数台のKinectV2の使い方
複数台のKinectV2の使い方Norishige Fukushima
 
Comparison between Blur Transfer and Blur Re-Generation in Depth Image Based ...
Comparison between Blur Transfer and Blur Re-Generation in Depth Image Based ...Comparison between Blur Transfer and Blur Re-Generation in Depth Image Based ...
Comparison between Blur Transfer and Blur Re-Generation in Depth Image Based ...Norishige Fukushima
 
Non-essentiality of Correlation between Image and Depth Map in Free Viewpoin...
Non-essentiality of Correlation between Image and Depth Map in Free Viewpoin...Non-essentiality of Correlation between Image and Depth Map in Free Viewpoin...
Non-essentiality of Correlation between Image and Depth Map in Free Viewpoin...Norishige Fukushima
 
コンピュテーショナルフォトグラフティの基礎
コンピュテーショナルフォトグラフティの基礎コンピュテーショナルフォトグラフティの基礎
コンピュテーショナルフォトグラフティの基礎Norishige Fukushima
 
ガイデットフィルタとその周辺
ガイデットフィルタとその周辺ガイデットフィルタとその周辺
ガイデットフィルタとその周辺Norishige Fukushima
 
Popcntによるハミング距離計算
Popcntによるハミング距離計算Popcntによるハミング距離計算
Popcntによるハミング距離計算Norishige Fukushima
 
コンピューテーショナルフォトグラフィ
コンピューテーショナルフォトグラフィコンピューテーショナルフォトグラフィ
コンピューテーショナルフォトグラフィNorishige Fukushima
 
OpenCVの拡張ユーティリティ関数群
OpenCVの拡張ユーティリティ関数群OpenCVの拡張ユーティリティ関数群
OpenCVの拡張ユーティリティ関数群Norishige Fukushima
 

Plus de Norishige Fukushima (15)

計算スケジューリングの効果~もし,Halideがなかったら?~
計算スケジューリングの効果~もし,Halideがなかったら?~計算スケジューリングの効果~もし,Halideがなかったら?~
計算スケジューリングの効果~もし,Halideがなかったら?~
 
多チャンネルバイラテラルフィルタの高速化
多チャンネルバイラテラルフィルタの高速化多チャンネルバイラテラルフィルタの高速化
多チャンネルバイラテラルフィルタの高速化
 
計算機アーキテクチャを考慮した高能率画像処理プログラミング
計算機アーキテクチャを考慮した高能率画像処理プログラミング計算機アーキテクチャを考慮した高能率画像処理プログラミング
計算機アーキテクチャを考慮した高能率画像処理プログラミング
 
3次元計測とフィルタリング
3次元計測とフィルタリング3次元計測とフィルタリング
3次元計測とフィルタリング
 
デプスセンサとその応用
デプスセンサとその応用デプスセンサとその応用
デプスセンサとその応用
 
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
 
複数台のKinectV2の使い方
複数台のKinectV2の使い方複数台のKinectV2の使い方
複数台のKinectV2の使い方
 
Comparison between Blur Transfer and Blur Re-Generation in Depth Image Based ...
Comparison between Blur Transfer and Blur Re-Generation in Depth Image Based ...Comparison between Blur Transfer and Blur Re-Generation in Depth Image Based ...
Comparison between Blur Transfer and Blur Re-Generation in Depth Image Based ...
 
Non-essentiality of Correlation between Image and Depth Map in Free Viewpoin...
Non-essentiality of Correlation between Image and Depth Map in Free Viewpoin...Non-essentiality of Correlation between Image and Depth Map in Free Viewpoin...
Non-essentiality of Correlation between Image and Depth Map in Free Viewpoin...
 
コンピュテーショナルフォトグラフティの基礎
コンピュテーショナルフォトグラフティの基礎コンピュテーショナルフォトグラフティの基礎
コンピュテーショナルフォトグラフティの基礎
 
ガイデットフィルタとその周辺
ガイデットフィルタとその周辺ガイデットフィルタとその周辺
ガイデットフィルタとその周辺
 
Popcntによるハミング距離計算
Popcntによるハミング距離計算Popcntによるハミング距離計算
Popcntによるハミング距離計算
 
コンピューテーショナルフォトグラフィ
コンピューテーショナルフォトグラフィコンピューテーショナルフォトグラフィ
コンピューテーショナルフォトグラフィ
 
OpenCVの拡張ユーティリティ関数群
OpenCVの拡張ユーティリティ関数群OpenCVの拡張ユーティリティ関数群
OpenCVの拡張ユーティリティ関数群
 
WebP入門
WebP入門WebP入門
WebP入門
 

Libjpeg turboの使い方

  • 1. LIBJPEG TURBOの使い方と 12ビット画像への対応 名古屋工業大学 福嶋慶繁 サンプルコード https://github.com/norishigefukushima/libjpeg12bit
  • 2. LIBJPEG TURBOとは • libjpegをSIMD等を用いて高速化実装したライブ ラリ. • 標準に準拠したいくつかの拡張機能も実装済み • 並列化はベクトル化のみで,マルチコアは不使用 • libjpegとlibjpegturboの関数や設定は同じ.
  • 4. Jpeg.cpp • OpenCVのIOをもつサンプル • imencodeJPEG, imdecodeJPEGで画像の圧縮展開 • jpeg_encodeとjpeg_decodeがlibjpegを使った圧縮の実体 • このサンプルのライブラリとして添付されているlibjpeg.libは visual studio 64bitバイナリ向けの入力画像が12bitでに対応した ものでそれに付随してコードも変更されている. • todo • Matのタイプを切り替えることで8bit 12bitどっちも対応するコードが 生成可能なので気が向いたら変更.
  • 5. DCTの精度を変更する • 構造体struct jpeg_compress_struct cinfo のパラメータにて cinfo.dct_method=JDCT_ISLOW とすることで変更可能.候補は3つ. typedef enum { JDCT_ISLOW, /* slow but accurate integer algorithm */ JDCT_IFAST, /* faster, less accurate integer method */ JDCT_FLOAT /* floating-point: accurate, fast on fast HW */ } J_DCT_METHOD;
  • 6. 算術符号化を使う • 構造体struct jpeg_compress_struct cinfo のパラメータにて cinfo.arith_code = TRUE とすることで算術符号化が有効化 算術符号化は符号化効率が大きく向上する一方で計算コストが増 える.
  • 7. ハフマンテーブルを設定する • クオリティパラメータ(0-100)を量子化パラメータへ変換す る • int q = jpeg_quality_scaling(quality); • 量子化テーブルを新たにセットする • ルミナンスが0番クロマが1番 • jpeg_add_quant_table(& cinfo, 0,std_luminance_quant_tbl, q, TRUE); • jpeg_add_quant_table(& cinfo, 1,std_chrominance_quant_tbl, q, TRUE); s•tatテic coーnst uブnsignルed inはt std1_lu6minxan1ce_6quant_tbl[DCTSIZE2] = { 16, 11, 10, 16, 24, 40, 51, 61, 12, 12, 14, 19, 26, 58, 60, 55, 14, 13, 16, 24, 40, 57, 69, 56, 14, 17, 22, 29, 51, 87, 80, 62, 18, 22, 37, 56, 68, 109, 103, 77, 24, 35, 55, 64, 81, 104, 113, 92, 49, 64, 78, 87, 103, 121, 120, 101, 72, 92, 95, 98, 112, 100, 103, 99 }; static const unsigned int std_chrominance_quant_tbl[DCTSIZE2] = { 17, 18, 24, 47, 99, 99, 99, 99, 18, 21, 26, 66, 99, 99, 99, 99, 24, 26, 56, 99, 99, 99, 99, 99, 47, 66, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99 };
  • 8. 12bitで使う • CmakeのオプションでWITH12bitをonにしてコンパイル • 注意 • 8bitと併用不可.12bit入力専用ライブラリになる. • 算術符号使用不可 • 入力ビットストリーム(JSAMPLE)はshort型
  • 9. 差分を符号化する • フレーム間差分などの情報を12bit対応JPEGで保存する場合,量 子化テーブルをMPEGのインターフレームの符号化の係数のよ うに変更する必要がある. • 自然画像よりもフラットな量子化係数が好ましい static const unsigned int flt_luminance_quant_tbl[DCTSIZE2] = { 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16 }; //MPEG2 test model 5 static const unsigned int flt_chrominance_quant_tbl[DCTSIZE2] = { 16, 17, 18, 19, 20, 21, 22, 23, 17, 18, 19, 20, 21, 22, 23, 24, 18, 19, 20, 21, 22, 23, 24, 25, 19, 20, 21, 22, 23, 24, 25, 27, 20, 21, 22, 23, 24, 25, 27, 28, 21, 22, 23, 24, 25, 27, 28, 30, 22, 23, 24, 25, 27, 28, 30, 31, 23, 24, 25, 27, 28, 30, 31, 33 };