その後のその後

iOSエンジニア 堤 修一のブログ github.com/shu223

『第2回 iphone_dev_jp 東京iPhone/Mac勉強会』で vImage について発表・・するつもりで参加してきました

めんどくさいタイトルですいません。。


僕がこの勉強会のATNDに気づいたころには120人の参加者枠もとっくにうまり、発表者枠も既に10人に達していたのですが、「時間がもし余ったら」と @k_katsumi さんの粋な計らいでLT補欠として参加させていただいた、というわけでこのタイトルになりました。


で、結果として時間はちょうどいい感じに10人の発表で終了時間となりLT枠はなかったのですが、いちおう資料とサンプルコードはつくってアップしておいたのでこちらにも載せておきます。



iOS 5 から追加された vImage について紹介しています。

資料の内容抜粋

  • vImageとは
    • Accelerate.framework内のライブラリ
    • iOSデバイスのハードウェア向けに最適化されていて高速
    • 畳み込みや幾何変換,ヒストグラム計算などの画像処理系の関数をまとめたものでiOS5から利用可能
  • 何がいいの?
    • シンプルに書ける
    • 速い・・・14倍高速!!
    • 省電力・・・90%off!!
  • vImageの使い方
    • Accelerateフレームワークをプロジェクトに追加し、 Accelerate.hをインポートすればOK
#import <Accelerate/Accelerate.h>
  • OpenCV vs vImage
  • ドキュメント
    • WWDC2011のセッションビデオ&スライド
      • 概要を知るには一番わかりやすい
    • vImage Programming Guide
      • 処理前後のサンプル画像や、フィルタ配列の図もあってわかりやすい
    • vImageリファレンス
      • たくさんあるので必要に応じてどうぞ・・・
      • Conversion / Convolution / Decompression / Geometry / Histogram / Morphology / Transform etc...
  • vImageを使用している画像処理ライブラリ

サンプルコード

githubに上げたサンプルコードは UIImage のカテゴリとして作ってあってAPIも下記のようにシンプルにしてあります。

-(UIImage*)gaussianBlur;
-(UIImage*)edgeDetection;
-(UIImage*)emboss;
-(UIImage*)sharpen;
-(UIImage*)unsharpen;


実行して画面をタッチするとこんな感じで vImage による画像処理が適用されます。



※左上がオリジナル画像です。

補足など

資料に書いてなくて発表のときに口頭で話そうと思ってたこととして、「畳み込みと色空間変換と拡大縮小とヒストグラムでかなり色んな画像処理ができる」ということがあります。


で、一番処理的に重いのが畳み込みなので、畳み込みが高速化されるようになるということは画像処理にとって相当ありがたいことです。


というわけで資料では vImageConvolve_ARGB8888() しか紹介していませんがこれだけでも結構 vImage の恩恵があるんじゃないかと思っております。



ちなみに他の発表者の皆様のスライドが下記にまとまっていて、とても勉強になります。
http://slidrs.net/sessions/13


で、このなかに @kamiyan さんの『簡単!OpenGL ES2.0フラグメントシェーダー』という発表がありまして、これを見てると、本気で画像処理を高速化するのであればシェーダを書いてOpenGL ES2.0で処理するのが一番速そうです。(ちなみにこの発表はシェーダをiPhone上で書けて実行できるサンプルアプリつき!!!)


このあたりはまた勉強して新しく知ったことなどを別記事でまとめたいと思います。