More Related Content
Similar to vImageのススメ (20)
More from Shuichi Tsutsumi
More from Shuichi Tsutsumi (20)
vImageのススメ
- 2. 自己紹介
• 面白法人カヤック勤務
• Twitter @shu223
• Blog 『Over&Outその後』
• 1978年5月26日生まれ
12年5月26日土曜日 2
- 4. アジェンダ
• vImageとは?
• 何がいいの?
• 使用例
• その他諸々
12年5月26日土曜日 4
- 5. vImageとは?
• Accelerate.framework内のライブラリ
• iOSデバイスのハードウェア向けに最適化
されていて高速
• 畳み込みや幾何変換,ヒストグラム計算
などの画像処理系の関数をまとめたもの
で,iOS5から利用可能
12年5月26日土曜日 5
- 6. 何がいいの?
• シンプルに書ける!
• 速い!
• 省電力!
12年5月26日土曜日 6
- 7. 畳み込み演算
• 各種画像処理のコアとなる
処理
• カーネルサイズと画素数に
応じて処理量が指数関数的
に増大する
カーネルサイズ7x7、
解像度2448x3264の場合、
演算回数は3億9152万回!
12年5月26日土曜日 7
- 8. 何がいいの?
•シンプルに書ける!
• 速い!
• 省電力!
12年5月26日土曜日 8
- 9. シンプルに書ける! 1/2
• vImageを利用しない畳み込み演算のコード
for (i=0; i<imageHeight; i++) {
for (j=0; j<imageWidth; j++) {
int accumulator = 0;
for (ik=0; jk<kernelHeight; ik++) {
for (jk=0; jk<kernelWidth; jk++) {
accumulator += kernel[k][l] *
src[i+ik-kernelHeight/2][j+jk-kernelWidth/2];
} }
dst[i][j] = accumulator;
}
}
•このままだとものすごく遅い!
•実際には、端部の処理とかオーバーフローの処理とかも必要
•ちゃんと書くと数百行に!!
12年5月26日土曜日 9
- 10. シンプルに書ける! 2/2
• vImageを利用した畳み込み演算のコード
vImageConvolve_ARGB8888(source, dest, NULL, 0, 0,
kernel, kernelHeight,
kernelWidth, divisor, NULL,
flags );
•コードがシンプルに!
•もちろん端部処理とかオーバーフローの処理は内部で
やってくれてる
12年5月26日土曜日 10
- 11. 何がいいの?
• シンプルに書ける!
•速い!
• 省電力!
12年5月26日土曜日 11
- 13. 何がいいの?
• シンプルに書ける!
• 速い!
•省電力!
12年5月26日土曜日 13
- 15. vImageの使い方
• Accelerateフレームワークをプロジェクトに追加し、
Accelerate.hをインポートすればOK
• とりあえずvImageConvolve_ARGB8888() ひとつ
で色々できる
vImageConvolve_ARGB8888(source, dest, NULL, 0, 0,
kernel, kernelHeight,
kernelWidth, divisor, NULL,
flags );
第5引数の kernel に渡す配列によって様々なフィル
タを実現できる
12年5月26日土曜日 15
- 16. vImageConvolve使用例
ブラー
static int16_t gaussianblur_kernel[25] = {
! 1, 4, 6, 4, 1,
! 4, 16, 24, 16, 4,
! 6, 24, 36, 24, 6,
! 4, 16, 24, 16, 4,
! 1, 4, 6, 4, 1
};
12年5月26日土曜日 16
- 17. vImageConvolve使用例
エンボス
static int16_t emboss_kernel[9] = {
! -2, 0, 0,
! 0, 1, 0,
! 0, 0, 2
};
12年5月26日土曜日 17
- 18. vImageConvolve使用例
先鋭化
static int16_t sharpen_kernel[9] = {
! -1, -1, -1,
! -1, 9, -1,
! -1, -1, -1
};
12年5月26日土曜日 18
- 19. vImageConvolve使用例
サンプルコード
• https://github.com/shu223/
vImageDemo
• vImageConvolve∼ひとつで実現可
能な処理をUIImageのカテゴリとし
て実装してあります
• ブラー、エッジ抽出、エンボス、先鋭化
etc...
12年5月26日土曜日 19
- 20. OpenCV vs vImage
• OpenCVもGPUアクセラレーションは行っている。
分
• が、Mac OSデバイスやiOSデバイスのハードウェアに特化して最適
化されたものではないため、(条件を満たしていれば)vImageの方
十
が速いと思われる
不
• iOS SDKに含まれている、という点で、利用のお手軽さではvImage
の方がちょっとだけ勝る
•
•
証
多いと思われる
拠
上位レイヤーのフィルタの種類とかではOpenCVの方ができることは
CoreImageとも比較が必要。GPUで処理してて畳み込みのような低
レイヤー処理もできたはず。
12年5月26日土曜日 20
- 21. ドキュメント
• WWDC2011のセッションビデオ&スライド
• 概要を知るには一番わかりやすい
• vImage Programming Guide
• 処理前後のサンプル画像や、フィルタ配列の図も
あってわかりやすい
• vImageリファレンス
• たくさんあるので必要に応じてどうぞ・・・
• Conversion / Convolution / Decompression /
Geometry / Histogram / Morphology / Transform
etc...
12年5月26日土曜日 21
- 22. vImageを使用している
画像処理ライブラリ
• NYXImagesKit
• vImage, vDSP, CoreImageを併用
• gihyo.jpにて連載中の第3回記事で紹介しました
• 『iOSアプリ開発で使いこなしたいとっておきのOSS』
• fladdictさんその節はありがとうございました
12年5月26日土曜日 22
- 23. まとめ
iOS5以降で画像処理やる
ならvImageの使用を検討
してみるといいかもしれま
せん!
12年5月26日土曜日 23