View in English

  • Apple Developer
    • 今すぐ始める

    「今すぐ始める」を詳しく見る

    • 概要
    • 学ぶ
    • Apple Developer Program

    最新情報

    • 最新ニュース
    • Hello Developer
    • プラットフォーム

    プラットフォームを詳しく見る

    • Appleプラットフォーム
    • iOS
    • iPadOS
    • macOS
    • tvOS
    • visionOS
    • watchOS
    • App Store

    特集

    • デザイン
    • 配信
    • ゲーム
    • アクセサリ
    • Web
    • Home
    • CarPlay
    • テクノロジー

    テクノロジーを詳しく見る

    • 概要
    • Xcode
    • Swift
    • SwiftUI

    特集

    • アクセシビリティ
    • App Intent
    • Apple Intelligence
    • ゲーム
    • 機械学習とAI
    • セキュリティ
    • Xcode Cloud
    • コミュニティ

    コミュニティを詳しく見る

    • 概要
    • 「Appleに相談」イベント
    • コミュニティによるイベント
    • デベロッパフォーラム
    • オープンソース

    特集

    • WWDC
    • Swift Student Challenge
    • デベロッパストーリー
    • App Store Awards
    • Apple Design Awards
    • Apple Developer Center
    • ドキュメント

    ドキュメントを詳しく見る

    • ドキュメントライブラリ
    • テクノロジー概要
    • サンプルコード
    • ヒューマンインターフェイスガイドライン
    • ビデオ

    リリースノート

    • 注目のアップデート
    • iOS
    • iPadOS
    • macOS
    • watchOS
    • visionOS
    • tvOS
    • Xcode
    • ダウンロード

    ダウンロードを詳しく見る

    • すべてのダウンロード
    • オペレーティングシステム
    • アプリ
    • デザインリソース

    特集

    • Xcode
    • TestFlight
    • フォント
    • SF Symbols
    • Icon Composer
    • サポート

    サポートを詳しく見る

    • 概要
    • ヘルプガイド
    • デベロッパフォーラム
    • フィードバックアシスタント
    • お問い合わせ

    特集

    • アカウントヘルプ
    • App Reviewガイドライン
    • App Store Connectヘルプ
    • 近日導入予定の要件
    • 契約およびガイドライン
    • システムステータス
  • クイックリンク

    • イベント
    • ニュース
    • Forum
    • サンプルコード
    • ビデオ
 

ビデオ

メニューを開く メニューを閉じる
  • コレクション
  • すべてのビデオ
  • 利用方法

その他のビデオ

  • 概要
  • Summary
  • トランスクリプト
  • コード
  • Core ImageによるRAW画像処理の強化

    Core ImageによるRAW画像処理APIのバージョン9では、Apple Neural Engineを使用してパフォーマンスを最適化しつつ、画像のシャープネスを高め色をより詳細に定義することで、アプリの画質を劇的に向上させます。CIRAWFilter APIを使用すると、露出、ノイズリダクション、シャープネス、コントラストなどを変更してRAW写真を編集できる機能をユーザーに提供できます。タイルサイズやバッファ管理を細かく制御してパフォーマンスを最適化できるようにする、各種の新しいCIImageProcessor APIも紹介します。

    関連する章

    • 0:00 - Introduction
    • 0:52 - How Core Image supports RAW
    • 2:48 - The evolution of RAW support
    • 3:33 - RAW 9 overview
    • 3:56 - RAW 9 quality improvements
    • 5:50 - Enable and edit RAW 9 with CIRAWFilter API
    • 8:33 - RAW 9 performance overview
    • 9:19 - Interactive editing
    • 10:52 - Exporting to other formats
    • 11:50 - New CIImageProcessor features

    リソース

    • Extended Virtual Addressing Entitlement
      • HDビデオ
      • SDビデオ

    関連ビデオ

    WWDC22

    • Core Image、Metal、SwiftUIでのEDRコンテンツの表示

    WWDC21

    • ProRAW画像の撮影と処理
  • このビデオを検索

    みなさん、ようこそ。 David Haywardです Core Imageの機能強化と RAWイメージファイルの サポートについてお話しします

    主に4つのトピックについて お話しします まず、カメラからの RAWイメージファイルが AppleプラットフォームのCore Imageで どのようにサポートされるかを説明します iOSにおける重大な RAW品質の改善点をご紹介します iPadOS、macOS、 そしてvisionOS 27での改善です

    次に、RAWレンダリングにおける 最適なパフォーマンスの実現方法を説明します

    最後に、AppleがRAW向けに CIImageProcessorクラスに 追加した機能を紹介します

    まず、Core ImageのRAWサポートの 概要をお伝えします RAWファイルは多様な カメラメーカーやモデルから生成されますが HEIFやJPEGとは異なり 表示前に 特別な処理が必要です

    最初のステップは ファイルのメタデータを解析して RAWセンサー値を アンパックすることです この段階では 各ピクセル位置に モザイクパターンで配置された 赤、緑、または青の値だけがあります このパターンが見えるよう 大幅にクロップされたイメージです 次のステップで センサーデータをデモザイクして 各ピクセルに赤、緑、青の 値を持たせます

    続いてピクセルを デノイズ処理します フォトンノイズ、リードノイズ、 熱ノイズを除去します その後コンボリューションを適用して エッジをシャープにし ローカルコントラストを加えます

    最後の主要ステップは ホワイトバランス、露出 カラーとトーンを調整して 美しい最終イメージを作ることです これらすべてのステップのアルゴリズムは iOSに組み込まれています iPadOS、macOS、 そしてvisionOSにも搭載されています Finderなどのシステムアプリで RAWファイルを表示できます プレビューやフリーボードでも可能です

    Image IO APIを使用する アプリやフレームワークはどれでも RAWサポートが 自動的に有効になります

    基本的な表示を超えて CIRAWFilter APIを使用するアプリは 高度な編集コントロールを 提供できます

    このAPIは写真や Pixelmator Proなどのアプリが使用しています NitroやAcornをはじめ 多くのアプリにも活用されています

    2006年当初 システムには21機種向けの 手調整されたキャリブレーションのみがありました それ以来、その数は 784機種にまで増加しました 主要カメラベンダーの すべてをカバーしています iPhoneカメラ向けの Apple Pro RAWファイルのサポートも含まれています

    しかしRAWの重要な機能は 何年も前に撮ったお気に入りの写真を 最新の最先端アルゴリズムで 再処理できることです AppleのRAW処理パイプラインは これまでに8回更新されてきました デモザイク、デノイズ、 カラーが毎回改善されています 古いバージョンの一部は 引き続き維持されており 希望する場合は 引き続き使用できます

    そして今、Appleは 最大のアップデートを発表しました:RAW 9!

    このバージョンはRAWファイルの レンダリングを劇的に改善します タイル型CoreMLモデルを 基盤として構築されており 最高品質のために デモザイクとデノイズを組み合わせています このモデルはApple Neural Engineのコアを使い デバイス上で実行されます 最適なパフォーマンスを 実現します

    改善点を より詳しく見てみましょう

    RAW 8を使用した 低ノイズイメージの拡大クロップです Sony Alpha 7 IIで撮影した このビンテージ計器のイメージは 実はかなり良い仕上がりです しかし 同じイメージをRAW 9で見ると イメージはよりシャープで鮮明になり 細かいテキストも読みやすくなります

    高ノイズのイメージを見ると 違いはさらに顕著です まず、このRAWデータを 観察してください 非常にノイズの多い ISO 51,200のイメージに含まれています

    Canon 5D Mark IIIを使った この例では クレヨンの箱を 10倍クロップしたイメージです RAWデータには輝度ノイズと 色ノイズが非常に多く 各クレヨンの固有の色を 識別することができません 従来のアルゴリズムを使用すると この結果になります!

    RAW 8はシーンの実際の色を ある程度回復しましたが RAW 9での結果を 確認すると 出力結果は格段に優れています 色が正確で はっきりしています クレヨンの光沢ある 鏡面ハイライトも見えています

    最後の例は 刺繍糸の写真のクロップです Fujifilm X-T5を使用して ISO 12,800で撮影されました このカメラは 非従来型のセンサーパターンを持ち デモザイクが困難です RAW 8の結果では 糸に色のアーチファクトと ディテールの損失があります しかし同じイメージを RAW 9で見ると 結果は明らかに優れています 小さなテキストが読みやすくなり 糸のテクスチャもより鮮明です

    アプリケーションでRAW 9を 有効にする方法を見てみましょう まず、CIRAWFilter APIを使って RAWファイルを読み込みます このAPIはWWDC 21の "Capture and process ProRAW images"で詳しく説明されています

    ただし、RAW 9はデフォルトでは 有効になっていないことに注意してください supportedDecoderVersionsプロパティに version9列挙型が含まれているか 確認してください 含まれている場合は decoderVersionプロパティを version9に設定してオプトインできます

    RAW 9をサポートする カメラモデルを確認するには supportedCameraModelsという 新しいクラスメソッドがあります このAPIはアプリに 指定バージョンでサポートされている すべてのモデルの配列を提供します iOS、iPadOS、macOS、 visionOS 27のリリースでは RAW 9を使用できる 数百ものモデルが追加されます 主要なプロフェッショナル カメラベンダーすべてが含まれます このカメラリストは OSの無線アップデートを通じて 拡張されます RAW 9はDNGをネイティブで撮影する カメラにも自動的にサポートされます Apple iPhoneなどが その例です

    CIRAWFilter APIの真のパワーが 発揮されるのは アプリがプロパティを 変更するときです これによりRAWファイルの 表示方法をカスタマイズできます

    現在、調整できる キャリブレーション済みプロパティは20個です アプリにこれらの調整機能を 組み込んでください RAWイメージ編集の フルパワーを活用できます RAW編集で最も重要な コントロールはこちらです: 露出:イメージの明暗を 調整するコントロールです luminanceNoiseReductionAmount 輝度グレインの可視量を 調整します sharpnessAmount:エッジの シャープネスの度合いを決定します

    contrastAmount:エッジ付近の ローカルコントラストの適用量を変更します

    これらのコントロールは RAW 9でさらに効果的になりました

    RAW 9では不要になった プロパティもあります colorNoiseReductionAmountプロパティは 効果がなくなりました CoreMLモデルが色ノイズリダクションを 自動的に処理するためです

    また、detailAmountと moireReductionAmountプロパティも RAW 9では不要となり サポートされなくなりました

    isSupportedプロパティを呼び出して プロパティがフィルタインスタンスで 機能するか確認できます

    RAW 9の外観と動作を 理解したところで そのパフォーマンスについて 説明します 根本的に、このような品質向上を 実現するために RAW 9は旧バージョンより パフォーマンスとリソースを多く消費します RAW 9はイメージごとに CoreMLモデルを数百回実行しますが アプリがCIRAWFilterのプロパティを 編集しているときでも 後続のレンダリングは 高速でレスポンシブです

    Core Imageが 中間結果をキャッシュするためです 最適なパフォーマンスを得るための ベストプラクティスは アプリがRAWファイルをどのように 使用するかによって異なります 最も一般的な2つのユースケースの 推奨事項をお伝えします まず、インタラクティブ編集の ユースケースについて説明します

    インタラクティブ編集とは 1つのRAWファイルを 画面解像度で複数回レンダリングすることです 通常は、アプリがCIRAWFilterの プロパティを調整するたびに行います 露出やシャープネスなどです RAWをインタラクティブに 編集する際は CIRAWFilterの scaleFactor プロパティを使用します 縮小サイズで イメージを表示する場合です これは重要で、表示解像度を超える メガピクセルを持つイメージの レンダリング作業を軽減します

    ビューごとに1つのCIContextを使用し cacheIntermediatesオプションをtrueに設定します キャッシュにより負荷の高い CoreMLの処理をスキップできます アプリがCIRAWFilterのプロパティを 調整する際に有効です

    Core Imageはレンダリング間の キャッシュにより多くのメモリを使用します アプリに"Extended Virtual Addressing entitlement"を追加すると有効です AppleのWebサイトに 詳細なドキュメントがあります また、Metal対応ビューへ 直接レンダリングしてください これにより繰り返しレンダリングの パフォーマンスが向上します Metalが次のフレームの作業を 開始できるためです 前のフレームが完了する 前でも可能です MTKViewへのレンダリングの 詳細については "Display EDR content with Core Image, Metal, and SwiftUI" WWDC 22を参照してください

    インタラクティブ編集の アドバイスに続いて ファイルをエクスポートする際の 重要なヒントをお伝えします

    エクスポートのユースケースとは 複数のRAWファイルをそれぞれ フル解像度で1回レンダリングして HEIFやJPEGなどの 他のフォーマットに変換することです

    このケースのベストプラクティスは CIContextを使ってエクスポートし cacheIntermediatesオプションを falseに設定することです

    また、Core Imageに各エクスポート時に より多くのメモリを使用するよう指示できます コンテキストの memoryLimitオプションを設定します iOSではデフォルトの制限が 保守的な256メガバイトです 512または1024メガバイトに設定すると パフォーマンスが大幅に向上します

    コンテキストメソッドを使うことで メモリ使用量をさらに削減できます Image IOを直接呼び出す代わりに heifRepresentationやjpegRepresentationを使います 最後のセクションでは CIImageProcessor APIの 改善についてお話しします

    RAW 9はCIImageProcessor APIを 使用しています CoreMLを他のCIKernelと組み合わせる アルゴリズムを可能にするためです

    この取り組みの結果として Core Imageチームは2つの機能を CIImageProcessor APIに追加しました アプリで活用できるかもしれません 最初にお話しするのは 明示的な出力タイルサイズのサポートです

    これは典型的な CIImageProcessorクラスの例です region of interestコールバックを 実装しています 指定した出力矩形にどれだけの 入力が必要かを定義します

    最も重要なのは processコールバック内で input.regionとoutput.regionを 認識する必要があることです プロセッサが操作すべき 領域です メモリが十分にある場合 Core Imageはprocess関数を 呼び出します イメージ全体の output.regionで呼び出されます メモリが限られている場合は output.regionが大幅に 小さくなる場合があります

    プロセッサは出力タイルサイズを 明示的に制御できるようになりました プロセッサクラスのコードは 以前と同じですが 任意の出力領域を使用するよう Core Imageに指示できます

    まず配列を作成します イメージをカバーする すべての希望タイルを配列に追加します この例では、タイリング戦略が 入力イメージの範囲を取得して 512×512ピクセルの タイルに分割します プロセッサを使用する イメージを作成する際は applyメソッドを呼び出し イメージをカバーするタイル配列を渡します

    明示的な出力タイルサイズについて 説明しましたので 最後のトピックは テンポラリバッファ機能です

    CoreMLを呼び出すCIImageProcessorが テンポラリバッファを使用することは一般的です Core Imageはインターリーブ形式の イメージバッファを使用するため CoreML用にプレーナーデータに 変換する必要があるためです プロセッサコールバックが 多くのタイルに対して呼び出されると テンポラリバッファが 繰り返し作成・破棄されます これはパフォーマンスに 影響します CIImageProcessorOutputクラスに 解決するメソッドが追加されました 仕組みを説明します!

    シンプルなCIImageProcessorクラスの 例を見てみましょう テンポラリバッファ機能を 使用しています 入力から出力への 直接処理の代わりに このコールバックは スクラッチバッファを要求します outputオブジェクトに テンポラリのCVPixelBufferを求めます

    その際、識別子を提供します これは、複数のテンポラリバッファを使用する processコールバックで重要です

    次に、このプロセッサの例は 入力ピクセルバッファから テンポラリバッファにコピーして テンポラリバッファのピクセルを インプレースで変更し出力にコピーします Core Imageはテンポラリバッファの ライフサイクルを管理します 自動的にリリースされ 適切なタイミングで解放されます 次のタイルでプロセッサが 呼び出されると再利用されます ここで重要なポイントを まとめます アプリでRAW 9を試してください 大幅な品質向上です 有効にするのも 数行のコードだけです

    パフォーマンスの ベストプラクティスに従ってください 高速なエクスポートと レスポンシブな編集のために説明したものです

    アプリにCIRAWFilterの強力な 編集プロパティへのアクセスを提供してください RAWイメージの表示を 細かく調整できるようになります 最後に、CIImageProcessorで 最適なパフォーマンスを得るために 明示的タイリングと テンポラリバッファAPIを使用してください 個人的に、20年以上にわたって RAWで撮影してきた 7000枚以上の家族写真の ライブラリを見直すのが楽しかったです ノイズリダクションの品質向上を 実感できて本当に良かったです アプリをご利用の方々も これらの改善を楽しんでいただけると思います ご視聴ありがとうございました!

    • 11:08 - Contact for exports

      let exportCtx = CIContext(options : [
        .cacheIntermediate : false,
        .memoryLimit : 512 ])
    • 12:23 - CIImageProcessor with explicit output tile sizes

      import CoreImage
      
      class MyProcessor: CIImageProcessorKernel {
          override class func roi(forInput input: Int32,
                                  arguments: [String : Any]?,
                                  outputRect: CGRect) -> CGRect { return outputRect }
          
          override class func process(with inputs: [CIImageProcessorInput]?,
                                      arguments: [String : Any]?,
                                      output: CIImageProcessorOutput) throws {
              guard let input = inputs?.first,
                    let iBuffer = input.pixelBuffer,
                    let oBuffer = output.pixelBuffer else { return }
              
              let iRegion = input.region
              let oRegion = output.region // controlled by Core Image
              
              // MyCopyBuffer(iBuffer,iRegion, oBuffer,oRegion)
          }
      }
      
      let extent = inImg.extent
      let tileSize = 512.0 // whatever tile size you want
      var tiles: [CIVector] = []
      for y in stride(from: extent.minY, to: extent.maxY, by: tileSize) {
          for x in stride(from: extent.minX, to: extent.maxX, by: tileSize) {
              let tile = CGRect(x: x, y: y,
                                width: min(tileSize, extent.maxX - x),
                                height: min(tileSize, extent.maxY - y))
              tiles.append(CIVector(cgRect: tile))
          }
      }
      
      let result = try MyProcessor.apply(withTiledExtent: tiles, inputs: [inImg], arguments: [:])
    • 14:24 - CIImageProcessor using temporary PixelBuffer

      import CoreImage
      
      class MyProcessor: CIImageProcessorKernel {
          override class func process(with inputs: [CIImageProcessorInput]?,
                                      arguments: [String: Any]?,
                                      output: CIImageProcessorOutput) throws {
              guard let input = inputs?.first,
                    let srcPixelBuffer = input.pixelBuffer,
                    let dstPixelBuffer = output.pixelBuffer else { return }
              
              // Get a scratch buffer from Core Image's cache
              guard let scratch = output.temporaryPixelBuffer(identifier : "myScratch",
                         format: kCVPixelFormatType_64RGBAHalf,
                         width: Int(output.region.width),
                         height: Int(output.region.height),
                         pixelBufferAttributes: nil) else { return }
              
              // Step 1: copy input CVPixelBuffer → scratch
              // Step 2: process pixels in scratch
              // Step 3: copy scratch → output CVPixelBuffer
          }
      }
    • 0:00 - Introduction
    • Enhancements to Core Image and its support for RAW image files across Apple platforms.

    • 0:52 - How Core Image supports RAW
    • An overview of the RAW processing stages, including demosaic, denoising, convolution, and color adjustments, and their support in Apple's operating systems and developer frameworks.

    • 2:48 - The evolution of RAW support
    • A look at how Apple's RAW processing pipeline has evolved across nine versions, now supporting 784 camera models.

    • 3:33 - RAW 9 overview
    • Explore the new RAW 9 processing pipeline, which leverages a Core ML model to significantly improve demosaic and denoise for the highest image quality.

    • 3:56 - RAW 9 quality improvements
    • A side-by-side comparison of RAW 8 and RAW 9 demonstrating significant improvements in sharpness, color accuracy, and noise reduction.

    • 5:50 - Enable and edit RAW 9 with CIRAWFilter API
    • How to opt in to RAW 9 using CIRAWFilter's decoderVersion property, check which camera models are supported, and use the CIRAWFilter editing properties to give people full control over how their RAW images appear.

    • 8:33 - RAW 9 performance overview
    • Best practices for optimizing performance when using RAW 9.

    • 9:19 - Interactive editing
    • Best practices for rendering a RAW file repeatedly at screen resolution, including using the scaleFactor property, enabling cacheIntermediates, the Extended Virtual Addressing entitlement, and rendering to Metal-backed MTKViews.

    • 10:52 - Exporting to other formats
    • Best practices for exporting multiple RAW files to HEIF or JPEG at full resolution, including disabling cacheIntermediates, tuning the memoryLimit option, and using Core Image's heifRepresentation and jpegRepresentation methods.

    • 11:50 - New CIImageProcessor features
    • Discover new API features added to CIImageProcessor, including explicit output tile sizes and temporary buffers.

Developer Footer

  • ビデオ
  • WWDC26
  • Core ImageによるRAW画像処理の強化
  • メニューを開く メニューを閉じる
    • iOS
    • iPadOS
    • macOS
    • tvOS
    • visionOS
    • watchOS
    Open Menu Close Menu
    • Swift
    • SwiftUI
    • Swift Playground
    • TestFlight
    • Xcode
    • Xcode Cloud
    • SF Symbols
    メニューを開く メニューを閉じる
    • アクセシビリティ
    • アクセサリ
    • Apple Intelligence
    • App Extension
    • App Store
    • オーディオとビデオ(英語)
    • 拡張現実
    • デザイン
    • 配信
    • 教育
    • フォント(英語)
    • ゲーム
    • ヘルスケアとフィットネス
    • アプリ内課金
    • ローカリゼーション
    • マップと位置情報
    • 機械学習とAI
    • オープンソース(英語)
    • セキュリティ
    • SafariとWeb(英語)
    メニューを開く メニューを閉じる
    • 英語ドキュメント(完全版)
    • 日本語ドキュメント(一部トピック)
    • チュートリアル
    • ダウンロード
    • フォーラム(英語)
    • ビデオ
    Open Menu Close Menu
    • サポートドキュメント
    • お問い合わせ
    • バグ報告
    • システム状況(英語)
    メニューを開く メニューを閉じる
    • Apple Developer
    • App Store Connect
    • Certificates, IDs, & Profiles(英語)
    • フィードバックアシスタント
    メニューを開く メニューを閉じる
    • Apple Developer Program
    • Apple Developer Enterprise Program
    • App Store Small Business Program
    • MFi Program(英語)
    • Mini Apps Partner Program
    • News Partner Program(英語)
    • Video Partner Program(英語)
    • セキュリティ報奨金プログラム(英語)
    • Security Research Device Program(英語)
    Open Menu Close Menu
    • Appleに相談
    • Apple Developer Center
    • App Store Awards(英語)
    • Apple Design Awards
    • Apple Developer Academy(英語)
    • WWDC
    最新ニュースを読む。
    Apple Developerアプリを入手する。
    Copyright © 2026 Apple Inc. All rights reserved.
    利用規約 プライバシーポリシー 契約とガイドライン