API Diffsから見るiOS 13の新機能 - Core Image #WWDC19
iOS 13の新API発掘シリーズその3です。今回はCore Image。
- API Diffsから見るiOS 13の新機能 - Vision #WWDC19 - その後のその後
- API Diffsから見るiOS 13の新機能 - CoreML公式配布モデル #WWDC19 - その後のその後
髪・肌・歯のマスク
iOS 12の"Portrait Matte"は全身セグメンテーション用のマスクだったわけですが、それの「髪・肌・歯」版が取れるようになったようです。
static let auxiliarySemanticSegmentationHairMatte: CIImageOption static let auxiliarySemanticSegmentationSkinMatte: CIImageOption static let auxiliarySemanticSegmentationTeethMatte: CIImageOption
auxiliarySemanticSegmentationHairMatte
— Shuichi Tsutsumi (@shu223) June 3, 2019
auxiliarySemanticSegmentationSkinMatte
髪の色だけ変化させる、肌の色だけ変化させる、ってことができるようになるなこれ。(ちなみにTeethMatteもあったので白い歯にもなれる)#iOS13 #WWDC19
関連: "Portrait Matte"とは?
デプスブラー
CIContext
にデプスブラーフィルタを生成するメソッドが追加。disparityImage
(視差画像)、portraitEffectsMatte
(全身セグメンテーション用マスク画像)、hairSemanticSegmentation
(髪のセグメンテーション画像)を渡せて、出力としてCIFilter
オブジェクトが返ってきます。
func depthBlurEffectFilter(for image: CIImage, disparityImage: CIImage, portraitEffectsMatte: CIImage?, hairSemanticSegmentation: CIImage?, orientation: CGImagePropertyOrientation, options: [AnyHashable : Any]? = nil) -> CIFilter?
allowLowPower
また、CIContextOption
に以下の型プロパティが追加されていました。
static let allowLowPower: CIContextOption
ドキュメントには解説がありませんが、ヘッダになにか書いてあるかも知れません。パフォーマンスかなにかを犠牲にして消費電力を抑えるオプションでしょうか?
CIFilterの各フィルタの初期化メソッド
今までは次のように文字列でフィルタ名を指定して初期化しないといけなかったのですが、
let filter = CIFilter(name: "CISepiaTone")!
iOS 13ではドーンと(たぶん)全フィルタの初期化メソッドが追加されました。
一覧は長いので本記事の末尾に載せますが、たとえば上に示したsepia toneフィルタは次のメソッドで初期化できます。
class func sepiaTone() -> CIFilter & CISepiaTone
CIImageのAVSemanticSegmentationMatteからの初期化メソッド
AVSemanticSegmentationMatteはまだ紹介してませんが、名前からしてPortraitMatteの汎用版(Portrait Matteは人間の全身専用マスクだが、もうちょっと汎用的に領域分割するマスク)で、そこからCIImageを生成するメソッドが追加されています。
init?(semanticSegmentationMatte: AVSemanticSegmentationMatte) init?(semanticSegmentationMatte: AVSemanticSegmentationMatte, options: [CIImageOption : Any]?)
パパッと既存の(≠オリジナルの)画像処理を適用するにはやっぱりCore Imageが簡単なので、これは必須ですね。
CGImageSource
を渡すイニシャライザも追加されています(今までなかったんだっけ。。?)
init(cgImageSource: CGImageSource, index: Int, options: [CIImageOption : Any]?)
AVSemanticSegmentationMatte
オブジェクトにはプロパティからアクセスできる(持っていれば)ようです。
var semanticSegmentationMatte: AVSemanticSegmentationMatte?
一色のCIImageを生成する?
ドキュメントには解説がなかったのですが、CIImageに以下のような型プロパティが追加されています。一色塗りのCIImageオブジェクトを生成するのでしょうか?
class var black: CIImage class var blue: CIImage class var clear: CIImage class var cyan: CIImage class var gray: CIImage class var green: CIImage class var magenta: CIImage class var red: CIImage class var white: CIImage class var yellow: CIImage
CIFilterに追加された初期化メソッド一覧
上で解説した、CIFilterを生成するメソッド一覧です。しれっと新たに追加されたフィルタもあるかもしれません。
class func accordionFoldTransition() -> CIFilter & CIAccordionFoldTransition class func additionCompositing() -> CIFilter & CICompositeOperation class func affineClamp() -> CIFilter & CIAffineClamp class func affineTile() -> CIFilter & CIAffineTile class func attributedTextImageGenerator() -> CIFilter & CIAttributedTextImageGenerator class func aztecCodeGenerator() -> CIFilter & CIAztecCodeGenerator class func barcodeGenerator() -> CIFilter & CIBarcodeGenerator class func barsSwipeTransition() -> CIFilter & CIBarsSwipeTransition class func bicubicScaleTransform() -> CIFilter & CIBicubicScaleTransform class func blendWithAlphaMask() -> CIFilter & CIBlendWithMask class func blendWithBlueMask() -> CIFilter & CIBlendWithMask class func blendWithMask() -> CIFilter & CIBlendWithMask class func blendWithRedMask() -> CIFilter & CIBlendWithMask class func bloom() -> CIFilter & CIBloom class func bokehBlur() -> CIFilter & CIBokehBlur class func boxBlur() -> CIFilter & CIBoxBlur class func checkerboardGenerator() -> CIFilter & CICheckerboardGenerator class func circularScreen() -> CIFilter & CICircularScreen class func cmykHalftone() -> CIFilter & CICMYKHalftone class func code128BarcodeGenerator() -> CIFilter & CICode128BarcodeGenerator class func colorBlendMode() -> CIFilter & CICompositeOperation class func colorBurnBlendMode() -> CIFilter & CICompositeOperation class func colorClamp() -> CIFilter & CIColorClamp class func colorControls() -> CIFilter & CIColorControls class func colorCrossPolynomial() -> CIFilter & CIColorCrossPolynomial class func colorCube() -> CIFilter & CIColorCube class func colorCubeWithColorSpace() -> CIFilter & CIColorCubeWithColorSpace class func colorCubesMixedWithMask() -> CIFilter & CIColorCubesMixedWithMask class func colorCurves() -> CIFilter & CIColorCurves class func colorDodgeBlendMode() -> CIFilter & CICompositeOperation class func colorInvert() -> CIFilter & CIColorInvert class func colorMap() -> CIFilter & CIColorMap class func colorMatrix() -> CIFilter & CIColorMatrix class func colorMonochrome() -> CIFilter & CIColorMonochrome class func colorPolynomial() -> CIFilter & CIColorPolynomial class func colorPosterize() -> CIFilter & CIColorPosterize class func comicEffect() -> CIFilter & CIComicEffect class func convolution3X3() -> CIFilter & CIConvolution class func convolution5X5() -> CIFilter & CIConvolution class func convolution7X7() -> CIFilter & CIConvolution class func convolution9Horizontal() -> CIFilter & CIConvolution class func convolution9Vertical() -> CIFilter & CIConvolution class func copyMachineTransition() -> CIFilter & CICopyMachineTransition class func coreMLModel() -> CIFilter & CICoreMLModel class func crystallize() -> CIFilter & CICrystallize class func darkenBlendMode() -> CIFilter & CICompositeOperation class func depthOfField() -> CIFilter & CIDepthOfField class func depthToDisparity() -> CIFilter & CIDepthToDisparity class func differenceBlendMode() -> CIFilter & CICompositeOperation class func discBlur() -> CIFilter & CIDiscBlur class func disintegrateWithMaskTransition() -> CIFilter & CIDisintegrateWithMaskTransition class func disparityToDepth() -> CIFilter & CIDisparityToDepth class func dissolveTransition() -> CIFilter & CIDissolveTransition class func dither() -> CIFilter & CIDither class func divideBlendMode() -> CIFilter & CICompositeOperation class func documentEnhancer() -> CIFilter & CIDocumentEnhancer class func dotScreen() -> CIFilter & CIDotScreen class func edgePreserveUpsample() -> CIFilter & CIEdgePreserveUpsample class func edgeWork() -> CIFilter & CIEdgeWork class func edges() -> CIFilter & CIEdges class func eightfoldReflectedTile() -> CIFilter & CIEightfoldReflectedTile class func exclusionBlendMode() -> CIFilter & CICompositeOperation class func exposureAdjust() -> CIFilter & CIExposureAdjust class func falseColor() -> CIFilter & CIFalseColor class func flashTransition() -> CIFilter & CIFlashTransition class func fourfoldReflectedTile() -> CIFilter & CIFourfoldReflectedTile class func fourfoldRotatedTile() -> CIFilter & CIFourfoldRotatedTile class func fourfoldTranslatedTile() -> CIFilter & CIFourfoldTranslatedTile class func gammaAdjust() -> CIFilter & CIGammaAdjust class func gaussianBlur() -> CIFilter & CIGaussianBlur class func gaussianGradient() -> CIFilter & CIGaussianGradient class func glideReflectedTile() -> CIFilter & CIGlideReflectedTile class func gloom() -> CIFilter & CIGloom class func hardLightBlendMode() -> CIFilter & CICompositeOperation class func hatchedScreen() -> CIFilter & CIHatchedScreen class func heightFieldFromMask() -> CIFilter & CIHeightFieldFromMask class func hexagonalPixellate() -> CIFilter & CIHexagonalPixellate class func highlightShadowAdjust() -> CIFilter & CIHighlightShadowAdjust class func hueAdjust() -> CIFilter & CIHueAdjust class func hueBlendMode() -> CIFilter & CICompositeOperation class func hueSaturationValueGradient() -> CIFilter & CIHueSaturationValueGradient class func kaleidoscope() -> CIFilter & CIKaleidoscope class func labDeltaE() -> CIFilter & CILabDeltaE class func lanczosScaleTransform() -> CIFilter & CILanczosScaleTransform class func lenticularHaloGenerator() -> CIFilter & CILenticularHaloGenerator class func lightenBlendMode() -> CIFilter & CICompositeOperation class func lineOverlay() -> CIFilter & CILineOverlay class func lineScreen() -> CIFilter & CILineScreen class func linearBurnBlendMode() -> CIFilter & CICompositeOperation class func linearDodgeBlendMode() -> CIFilter & CICompositeOperation class func linearGradient() -> CIFilter & CILinearGradient class func linearToSRGBToneCurve() -> CIFilter & CILinearToSRGBToneCurve class func luminosityBlendMode() -> CIFilter & CICompositeOperation class func maskToAlpha() -> CIFilter & CIMaskToAlpha class func maskedVariableBlur() -> CIFilter & CIMaskedVariableBlur class func maximumComponent() -> CIFilter & CIMaximumComponent class func maximumCompositing() -> CIFilter & CICompositeOperation class func median() -> CIFilter & CIMedian class func meshGenerator() -> CIFilter & CIMeshGenerator class func minimumComponent() -> CIFilter & CIMinimumComponent class func minimumCompositing() -> CIFilter & CICompositeOperation class func mix() -> CIFilter & CIMix class func modTransition() -> CIFilter & CIModTransition class func morphologyGradient() -> CIFilter & CIMorphologyGradient class func morphologyMaximum() -> CIFilter & CIMorphologyMaximum class func morphologyMinimum() -> CIFilter & CIMorphologyMinimum class func morphologyRectangleMaximum() -> CIFilter & CIMorphologyRectangleMaximum class func morphologyRectangleMinimum() -> CIFilter & CIMorphologyRectangleMinimum class func motionBlur() -> CIFilter & CIMotionBlur class func multiplyBlendMode() -> CIFilter & CICompositeOperation class func multiplyCompositing() -> CIFilter & CICompositeOperation class func noiseReduction() -> CIFilter & CINoiseReduction class func opTile() -> CIFilter & CIOpTile class func overlayBlendMode() -> CIFilter & CICompositeOperation class func pageCurlTransition() -> CIFilter & CIPageCurlTransition class func pageCurlWithShadowTransition() -> CIFilter & CIPageCurlWithShadowTransition class func paletteCentroid() -> CIFilter & CIPaletteCentroid class func palettize() -> CIFilter & CIPalettize class func parallelogramTile() -> CIFilter & CIParallelogramTile class func pdf417BarcodeGenerator() -> CIFilter & CIPDF417BarcodeGenerator class func perspectiveCorrection() -> CIFilter & CIPerspectiveCorrection class func perspectiveTile() -> CIFilter & CIPerspectiveTile class func perspectiveTransform() -> CIFilter & CIPerspectiveTransform class func perspectiveTransformWithExtent() -> CIFilter & CIPerspectiveTransformWithExtent class func photoEffectChrome() -> CIFilter & CIPhotoEffect class func photoEffectFade() -> CIFilter & CIPhotoEffect class func photoEffectInstant() -> CIFilter & CIPhotoEffect class func photoEffectMono() -> CIFilter & CIPhotoEffect class func photoEffectNoir() -> CIFilter & CIPhotoEffect class func photoEffectProcess() -> CIFilter & CIPhotoEffect class func photoEffectTonal() -> CIFilter & CIPhotoEffect class func photoEffectTransfer() -> CIFilter & CIPhotoEffect class func pinLightBlendMode() -> CIFilter & CICompositeOperation class func pixellate() -> CIFilter & CIPixellate class func pointillize() -> CIFilter & CIPointillize class func qrCodeGenerator() -> CIFilter & CIQRCodeGenerator class func radialGradient() -> CIFilter & CIRadialGradient class func randomGenerator() -> CIFilter & CIRandomGenerator class func rippleTransition() -> CIFilter & CIRippleTransition class func sRGBToneCurveToLinear() -> CIFilter & CISRGBToneCurveToLinear class func saliencyMap() -> CIFilter & CISaliencyMap class func saturationBlendMode() -> CIFilter & CICompositeOperation class func screenBlendMode() -> CIFilter & CICompositeOperation class func sepiaTone() -> CIFilter & CISepiaTone class func shadedMaterial() -> CIFilter & CIShadedMaterial class func sharpenLuminance() -> CIFilter & CISharpenLuminance class func sixfoldReflectedTile() -> CIFilter & CISixfoldReflectedTile class func sixfoldRotatedTile() -> CIFilter & CISixfoldRotatedTile class func smoothLinearGradient() -> CIFilter & CISmoothLinearGradient class func softLightBlendMode() -> CIFilter & CICompositeOperation class func sourceAtopCompositing() -> CIFilter & CICompositeOperation class func sourceInCompositing() -> CIFilter & CICompositeOperation class func sourceOutCompositing() -> CIFilter & CICompositeOperation class func sourceOverCompositing() -> CIFilter & CICompositeOperation class func spotColor() -> CIFilter & CISpotColor class func spotLight() -> CIFilter & CISpotLight class func starShineGenerator() -> CIFilter & CIStarShineGenerator class func straighten() -> CIFilter & CIStraighten class func stripesGenerator() -> CIFilter & CIStripesGenerator class func subtractBlendMode() -> CIFilter & CICompositeOperation class func sunbeamsGenerator() -> CIFilter & CISunbeamsGenerator class func supportedRawCameraModels() -> [String]! class func swipeTransition() -> CIFilter & CISwipeTransition class func temperatureAndTint() -> CIFilter & CITemperatureAndTint class func textImageGenerator() -> CIFilter & CITextImageGenerator class func thermal() -> CIFilter & CIThermal class func toneCurve() -> CIFilter & CIToneCurve class func triangleKaleidoscope() -> CIFilter & CITriangleKaleidoscope class func triangleTile() -> CIFilter & CITriangleTile class func twelvefoldReflectedTile() -> CIFilter & CITwelvefoldReflectedTile class func unsharpMask() -> CIFilter & CIUnsharpMask class func vibrance() -> CIFilter & CIVibrance class func vignette() -> CIFilter & CIVignette class func vignetteEffect() -> CIFilter & CIVignetteEffect class func whitePointAdjust() -> CIFilter & CIWhitePointAdjust class func xRay() -> CIFilter & CIXRay class func zoomBlur() -> CIFilter & CIZoomBlur