happy_ryo

2014.12.02

Core Image でチルトシフトのフィルタをかけてみる (Advent Calendar 2日目)

Advent Calendar 二日目です。

昨日に続いて happy_ryo です。

昨日は iOS と全く関係無い事を書きましたが、今日は気を取り直して iOS で、GPUImage や OpenCV を使わずに Core Image の機能を使ってチルトシフトっぽい画像加工をする方法を紹介したいと思います。レシピ自体は、Apple の Core Image のドキュメントで公開されているのですが、実際のソースコードが乗っていないので、ドキュメントを元に書いてみました。(Filter 生成時にパラメータを渡す事で、より簡潔に書く事が出来ますが、見やすいようにパラメータを個々に設定する記述をしてあります)

以下の手順で作業を進めます。

  1. 元画像をブラー処理したものを作成
  2. グラデーションを2種類作成する
  3. 2種類のグラデーションを合成する
  4. 元画像、ブラー処理画像、合成されたグラデーション画像をマスク処理で組み合わせる

下準備

元画像をブラー処理する

まずは CIGaussianBlur を利用して、ブラー処理された画像を作成します。 inputRadius パラメータを変更する事で、ブラーのかかり具合を調整する事が出来ます。サイズ合わせの所では、生成後の画像のサイズを元の画像にあわせて調整しています。

グラデーションを2種類作成する

上から下、下から上に向けてのグラデーション2種類を CILinearGradient を使用して作成します。 inputPoint の値を調整する事で、チルトシフト加工後の画像のどの部分に焦点が当たっているように表現するかを変更する事が可能です。こちらもブラー処理と同様にサイズ調整をしています。

2種類のグラデーションを合成する

先ほど作成した二つのグラデーションを CIAdditionCompositing を利用して一つに合成します。ここでは他に特別な処理はせず、 CIAdditionCompositing に任せて合成するだけです。

仕上げ

最後に元の画像と、これまで用意したブラー処理された画像とグラデーションを CIBlendWithMask を利用してマスク処理します。 CGImageRef は ARC 環境下でも自分でリリースする必要があるのを忘れないようにしましょう。

元の画像がこちら。
IMG_1271
出来上がった画像がこちら。
IMG_1270

Core Image には沢山の組み込み Filter が用意されているので、ちょっとした事であれば外部のライブラリに頼らずにささっと作ってしまっても良いかもしれませんね。

明日は t_ishida の番です。