iOS 13 で追加された Core Image の CIFilter
iOS 13 で何か追加の CIFilter
はあったかな?と思って diff を取ってみたら面白かった。
使った出力はワンライナーでこれ
CIFilter.filterNames(inCategory: nil).forEach{print($0)}
CIFilter Changes iOS 12 - iOS 13
https://gist.github.com/86315376f00fa44662f0d841f046e5d2/revisions
iOS 13 beta 1
CIDocumentEnhancer
// CICategoryColorEffect public protocol CIDocumentEnhancer : CIFilterProtocol { @available(iOS 5.0, *) var inputImage: CIImage? { get set } var amount: Float { get set } }
CIKMeans
No Header!
CIMorphologyRectangleMaximum
// CICategoryBlur public protocol CIMorphologyRectangleMaximum : CIFilterProtocol { @available(iOS 5.0, *) var inputImage: CIImage? { get set } var width: Float { get set } var height: Float { get set } }
CIMorphologyRectangleMinimum
// CICategoryBlur public protocol CIMorphologyRectangleMinimum : CIFilterProtocol { @available(iOS 5.0, *) var inputImage: CIImage? { get set } var width: Float { get set } var height: Float { get set } }
CIPaletteCentroid
// CICategoryColorEffect public protocol CIPaletteCentroid : CIFilterProtocol { @available(iOS 5.0, *) var inputImage: CIImage? { get set } @available(iOS 5.0, *) var paletteImage: CIImage? { get set } var perceptual: Bool { get set } }
CIPalettize
// CICategoryColorEffect public protocol CIPalettize : CIFilterProtocol { @available(iOS 5.0, *) var inputImage: CIImage? { get set } @available(iOS 5.0, *) var paletteImage: CIImage? { get set } var perceptual: Bool { get set } }
iOS 13 beta 2
CIGaborGradients
// CICategoryStylize public protocol CIGaborGradients : CIFilterProtocol { @available(iOS 5.0, *) var inputImage: CIImage? { get set } }
CIKeystoneCorrectionCombined
// CICategoryGeometryAdjustment public protocol CIKeystoneCorrectionCombined : CIFilterProtocol { @available(iOS 5.0, *) var inputImage: CIImage? { get set } var focalLength: Float { get set } var topLeft: CGPoint { get set } var topRight: CGPoint { get set } var bottomRight: CGPoint { get set } var bottomLeft: CGPoint { get set } }
CIKeystoneCorrectionHorizontal
// CICategoryGeometryAdjustment public protocol CIKeystoneCorrectionHorizontal : CIFilterProtocol { @available(iOS 5.0, *) var inputImage: CIImage? { get set } var focalLength: Float { get set } var topLeft: CGPoint { get set } var topRight: CGPoint { get set } var bottomRight: CGPoint { get set } var bottomLeft: CGPoint { get set } }
CIKeystoneCorrectionVertical
// CICategoryGeometryAdjustment public protocol CIKeystoneCorrectionVertical : CIFilterProtocol { @available(iOS 5.0, *) var inputImage: CIImage? { get set } var focalLength: Float { get set } var topLeft: CGPoint { get set } var topRight: CGPoint { get set } var bottomRight: CGPoint { get set } var bottomLeft: CGPoint { get set } }
CIPerspectiveRotate
// CICategoryGeometryAdjustment public protocol CIPerspectiveRotate : CIFilterProtocol { @available(iOS 5.0, *) var inputImage: CIImage? { get set } var focalLength: Float { get set } var pitch: Float { get set } var yaw: Float { get set } var roll: Float { get set } }
念の為 diff を取ってみたら beta 1 から beta 2 で追加フィルタがあった!
いずれもドキュメントは存在しないので名前と入力パラメータから機能を推測するしかない。
なのに CIKMeans
に至ってはオンラインドキュメントにも Xcode 内にも一切記述が無いという隠れフィルタ!楽しい。
CIFIlter
をインスタンス化して取れるプロパティから入出力を調べてみたところ、おそらく以下の様なプロトコル定義になると思う。
CIKMeans
// CICategoryReduction public protocol CIKMeans : CIFilterProtocol { @available(iOS 5.0, *) var inputImage: CIImage? { get set } var extent: CGRect { get set } var means: CIImage? { get set } var count: Int { get set } var passes: Int { get set } var perceptual: Bool { get set } }
ググってみたところ KMeans ってのは機械学習に出てくる k-means の事だと思われるが CIKMeans
フィルタをどう使うかはまだ未調査で不明。
ちなみに CIPaletteCentroid
と CIPalettize
のフィルタの attributes
を見ると paletteImage
の入力にはこの CIKMeans
で得た画像を使用するらしい。
CIGaborGradients
についてもググってみたところ機械学習で使われる画像処理 Gabor Filter というものらしい。
CIDocumentEnhancer
は名前と効果からドキュメントスキャナ時のフィルタ処理だろうと推測。
CIMorphologyRectangleMinimum
CIMorphologyRectangleMaximum
については iOS 11 で CIMorphologyMinimum
CIMorphologyMaximum
CIMorphologyGradient
という3つのフィルタが登場しており、WWDC 2017 でこれらのフィルタは depth のマスクを処理するのに良いと紹介されていた。今回追加された2つのフィルタは入力パラメータは少し違うものの用途としては同じ様なものではないかと思われる。
Advances in Core Image: Filters, Metal, Vision, and More - WWDC 2017 - Videos - Apple Developer
とりあえず beta 2 ではこの様な感じで、また今後の beta でも何かしらのフィルタの増減があるかも知れないので余裕があればチェックしてみるかも。