SlideShare a Scribd company logo
vImageのススメ
   (改訂版)
   @shu223




             1
自己紹介

• 面白法人カヤック勤務
• Twitter @shu223
• Blog 『Over&Outその後』


                       2
最近つくったアプリ
 タップ忍者



 モンスターを集めてまいれ!2




 モンスターを集めてまいれ!


                  3
アジェンダ

• vImageとは?
• 何がいいの?
• 使用例
• その他諸々

              4
vImageとは?
• Accelerate.framework内のライブラリ
• iOSデバイスのハードウェア向けに最適化
 されていて高速

• 畳み込みや幾何変換,ヒストグラム計算
 などの画像処理系の関数をまとめたもの
 で,iOS5から利用可能


                                5
何がいいの?

• シンプルに書ける!
• 速い!
• 省電力!

              6
畳み込み演算

• 各種画像処理のコアとなる
 処理

• カーネルサイズと画素数に
 応じて処理量が指数関数的
 に増大する
 カーネルサイズ7x7、
 解像度2448x3264の場合、
 演算回数は3億9152万回!
                    7
何がいいの?

•シンプルに書ける!
• 速い!
• 省電力!

             8
シンプルに書ける!                                     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;
     }
 }

 •このままだとものすごく遅い!
 •実際には、端部の処理とかオーバーフローの処理とかも必要
 •ちゃんと書くと数百行に!!                                                  9
シンプルに書ける!                                     2/2


• vImageを利用した畳み込み演算のコード
 vImageConvolve_ARGB8888(source, dest, NULL, 0, 0,
                         kernel, kernelHeight,
                         kernelWidth, divisor, NULL,
                         flags );


 •コードがシンプルに!
 •もちろん端部処理とかオーバーフローの処理は内部で
  やってくれてる




                                                       10
何がいいの?

• シンプルに書ける!
•速い!
• 省電力!

              11
14倍高速!!




          12
何がいいの?

• シンプルに書ける!
• 速い!
•省電力!

              13
90%の節電 !!




            14
vImageの使い方
• Accelerateフレームワークをプロジェクトに追加し、
 Accelerate.hをインポートすればOK

• とりあえずvImageConvolve_ARGB8888() ひとつ
 で色々できる

   vImageConvolve_ARGB8888(source, dest, NULL, 0, 0,
                           kernel, kernelHeight,
                           kernelWidth, divisor, NULL,
                           flags );


  第5引数の kernel に渡す配列によって様々なフィル
  タを実現できる
                                                         15
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
 };




                                              16
vImageConvolve使用例
          エンボス
  static int16_t emboss_kernel[9] = {
  ! -2, 0, 0,
  ! 0, 1, 0,
  ! 0, 0, 2
  };




                                        17
vImageConvolve使用例
             先鋭化
  static int16_t sharpen_kernel[9] = {
  ! -1, -1, -1,
  ! -1, 9, -1,
  ! -1, -1, -1
  };




                                         18
回転
vImageRotate_ARGB8888(&src, &dest,
                      NULL, radians, bgColor,
                      kvImageBackgroundColorFill);




                                                     19
膨張
vImageDilate_ARGB8888(&src, &dest,
                      0, 0,
                      morphological_kernel,
                      3, 3,
                      kvImageCopyInPlace);




                                              20
収縮
vImageErode_ARGB8888(&src, &dest,
                     0, 0,
                     morphological_kernel,
                     3, 3,
                     kvImageCopyInPlace);




                                             21
ヒストグラム均一化
vImageEqualization_ARGB8888(&src, &dest,
                            kvImageNoFlags);




                                               22
サンプルコード

 • https://github.com/shu223/
   vImageDemo

 • vImageで実現可能な処理を
   UIImageのカテゴリとして実装して
   あります

  •   コード例

      imageView.image = [image emboss];




                                          23
サンプル適用例




          24
サンプル適用例




          25
vs CoreImage / OpenCV

         vImage                  CoreImage                         OpenCV

導入しやすさ      ◎                               ◎

機能の豊富さ      △                               ?                             ◎

処理速度                          要検証(※)

 情報量                                        △                             ○
          (※)
          ・CoreImageもvImageもハードウェアアクセラレーションを行っているはず。
          ・OpenCVはNVidia CUDAランタイムを利用しているのでNVidiaのGPUが必要
           (http://opencv.jp/opencv-2svn/cpp/gpu_gpu_module_introduction.html)
          ・速度面でいえばシェーダで書いてOpenGLESで処理する場合との比較も必要

                                                                                 26
ドキュメント
• WWDC2011のセッションビデオ&スライド
 •   概要を知るには一番わかりやすい

• vImage Programming Guide
 •   処理前後のサンプル画像や、フィルタ配列の図も
     あってわかりやすい

• vImageリファレンス
 •   たくさんあるので必要に応じてどうぞ・・・

     •   Conversion / Convolution / Decompression /
         Geometry / Histogram / Morphology / Transform   
         etc...

                                                            27
vImageを使用している
  画像処理ライブラリ

• NYXImagesKit
 • vImage, vDSP, CoreImageを併用
 • gihyo.jpにて連載中の第3回記事で紹介しました
  •   『iOSアプリ開発で使いこなしたいとっておきのOSS』

  •   fladdictさんその節はありがとうございました



                                    28
まとめ

iOS5以降で画像処理やる
ならvImageの使用を検討
してみるといいかもしれま
せん!
                 29
ご清聴ありがとうございました




                 30

More Related Content

PDF
Chemistry Investigatory Project
DOCX
KV Banswara Chemistry investigatory project
PDF
OpenFOAMにおける混相流計算
PDF
Chemistry investigatory project for class 12
PDF
QUALITATIVE ANALYSIS OF DIFFERENT BRANDS OF COLD DRINKS AVAILABLE IN MARKET
PPTX
Tema 1.1 partes y conceptos franchising for dummies 6 slides
PDF
シェル芸初心者によるシェル芸入門 (修正版)
PPTX
Chemistry investigatory project
Chemistry Investigatory Project
KV Banswara Chemistry investigatory project
OpenFOAMにおける混相流計算
Chemistry investigatory project for class 12
QUALITATIVE ANALYSIS OF DIFFERENT BRANDS OF COLD DRINKS AVAILABLE IN MARKET
Tema 1.1 partes y conceptos franchising for dummies 6 slides
シェル芸初心者によるシェル芸入門 (修正版)
Chemistry investigatory project

Viewers also liked (10)

PDF
サーバーからiOSアプリを変更する
PDF
OpenCV 3.0 on iOS
KEY
OpenCVの基礎
PDF
セクシー女優で学ぶ画像分類入門
PDF
OpenCVをAndroidで動かしてみた
PDF
組合せ最適化入門:線形計画から整数計画まで
PDF
最適化超入門
PDF
マルチコアを用いた画像処理
PPTX
OpenCVを用いた画像処理入門
PPTX
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
サーバーからiOSアプリを変更する
OpenCV 3.0 on iOS
OpenCVの基礎
セクシー女優で学ぶ画像分類入門
OpenCVをAndroidで動かしてみた
組合せ最適化入門:線形計画から整数計画まで
最適化超入門
マルチコアを用いた画像処理
OpenCVを用いた画像処理入門
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
Ad

Similar to vImageのススメ(改訂版) (20)

PDF
vImageのススメ
PDF
OpenCV4Androidで画像処理アプリのススメ
PPTX
Androidで画像処理リベンジ
PDF
【関東GPGPU勉強会#4】GTX 1080でComputer Vision アルゴリズムを色々動かしてみる
PDF
Halide による画像処理プログラミング入門
PDF
IbisPaintのOpenGLES2.0
PDF
OpenCVの拡張ユーティリティ関数群
PDF
コンピュータビジョンで作る未来の栽培技術POL共催セミナー_20220527
PDF
OpenCVの入り口
PDF
Hands On OpenCV! 画像処理ライブラリを使って面白いプログラムを作ろう!
PDF
OpenCVで作るスタンプAR
PDF
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
PDF
ARコンテンツ作成勉強会:C#ではじめようOpenCV(カラートラッキング編)
KEY
GTC2011 Japan
PPTX
Shadow gunのサンプルから学べるモバイル最適化
PDF
CG 論文講読会 2013/2/12 "A reconstruction filter for plausible motion blur"
PPTX
画像処理の高性能計算
PDF
openFrameworks Workshop in Kanazawa v001
PDF
オープンソースで作るスマホ文字認識アプリ
vImageのススメ
OpenCV4Androidで画像処理アプリのススメ
Androidで画像処理リベンジ
【関東GPGPU勉強会#4】GTX 1080でComputer Vision アルゴリズムを色々動かしてみる
Halide による画像処理プログラミング入門
IbisPaintのOpenGLES2.0
OpenCVの拡張ユーティリティ関数群
コンピュータビジョンで作る未来の栽培技術POL共催セミナー_20220527
OpenCVの入り口
Hands On OpenCV! 画像処理ライブラリを使って面白いプログラムを作ろう!
OpenCVで作るスタンプAR
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
ARコンテンツ作成勉強会:C#ではじめようOpenCV(カラートラッキング編)
GTC2011 Japan
Shadow gunのサンプルから学べるモバイル最適化
CG 論文講読会 2013/2/12 "A reconstruction filter for plausible motion blur"
画像処理の高性能計算
openFrameworks Workshop in Kanazawa v001
オープンソースで作るスマホ文字認識アプリ
Ad

More from Shuichi Tsutsumi (20)

PDF
Core MLのアップデートを3倍楽しむ方法 #wwdctokyo
PDF
エンジニアという仕事を楽しみ続けるためのキャリア戦略
PDF
Depth in Depth #iOSDC
PDF
UIImageView vs Metal [日本語版] #tryswiftconf
PDF
UIImageView vs Metal #tryswiftconf
PDF
飛び道具ではないMetal #iOSDC
PDF
Deep Learning on iOS #360iDev
PDF
Client-Side Deep Learning
PDF
Building iOS apps using "Bluetooth Low Energy"
PDF
Practical Core Bluetooth in IoT & Wearable projects @ AltConf 2016
PDF
Practical Core Bluetooth in IoT & Wearable projects @ UIKonf 2016
PDF
オープンソースエコシステム #demodaytokyo
PDF
Core Image Tips & Tricks in iOS 9
PDF
Core Graphics on watchOS 2
PDF
Audio Unit Extensions 〜オーディオエフェクトのアプリ間共有〜
PDF
iOS 9 の新機能 Core Image 編
PDF
UI/UX に影響の大きい watchOS 2 の新機能 3つ
PDF
watchOS 2 新機能の細かい話
PDF
Apple Watch 間通信
PDF
殺しても死なないアプリ 〜Core Bluetooth の「状態の保存と復元」機能〜
Core MLのアップデートを3倍楽しむ方法 #wwdctokyo
エンジニアという仕事を楽しみ続けるためのキャリア戦略
Depth in Depth #iOSDC
UIImageView vs Metal [日本語版] #tryswiftconf
UIImageView vs Metal #tryswiftconf
飛び道具ではないMetal #iOSDC
Deep Learning on iOS #360iDev
Client-Side Deep Learning
Building iOS apps using "Bluetooth Low Energy"
Practical Core Bluetooth in IoT & Wearable projects @ AltConf 2016
Practical Core Bluetooth in IoT & Wearable projects @ UIKonf 2016
オープンソースエコシステム #demodaytokyo
Core Image Tips & Tricks in iOS 9
Core Graphics on watchOS 2
Audio Unit Extensions 〜オーディオエフェクトのアプリ間共有〜
iOS 9 の新機能 Core Image 編
UI/UX に影響の大きい watchOS 2 の新機能 3つ
watchOS 2 新機能の細かい話
Apple Watch 間通信
殺しても死なないアプリ 〜Core Bluetooth の「状態の保存と復元」機能〜

vImageのススメ(改訂版)