nyancoder

WWDC 2021 - Capture and process ProRAW images 본문

WWDC/WWDC 2021

WWDC 2021 - Capture and process ProRAW images

nyancoder 2021. 8. 19. 03:03

원본 영상: https://developer.apple.com/videos/play/wwdc2021/10160/

 

What is Apple ProRaw

  • Apple 기기를 사용하면 HEIC 또는 JPEG 이미지를 캡처할 수 있습니다.
  • iOS 10부터는 Bayer-pattern RAW 데이터를 DNG 파일로 저장할 수 있습니다.
  • HEIC, JPEG는 빵집에서 케이크를 주문하는 것과 같다면, RAW 파일은 식료품점서 케이크를 만들기 위한 원료를 얻는 것과 같습니다.

  • 처리된 HEIC, JPEG의 장점은 Apple에서 만든 최종 이미지를 얻을 수 있다는 것입니다.
  • 스마트 HDR, 딥 퓨전, 야간모드 등을 통해서 여러 개의 캡처 프레임을 합하여 제작하기 때문에 속도가 빠르고 화질이 뛰어납니다.
  • 고급 손실 압축을 사용하기 때문에 파일 크기가 작습니다.

  • Bayer RAW의 장점은 편집을 위한 훨씬 더 큰 유연성을 가진 이미지를 얻을 수 있다는 것입니다.
  • 압축과정에서 손실이 되지 않았으며, 정밀도가 더 높습니다.

  • ProRAW의 목표는 이 두 가지 방식의 장점을 모두 갖춘 이미지 형식을 구축하는 것입니다.

  • ProRAW의 장점은 HEIC와 비슷 하지만 무손실 압축을 사용한다는 점입니다.
  • 경우에 따라 다중 노출을 합성하여 편집 시 다이내믹 레인지가 뛰어납니다.
  • 노이즈가 적고 이미 전 처리되었기 때문에 상당히 빠르게 표시할 수 있습니다.

  • ProRAW 형식은 호환성, 품질, 화면 표시의 세 가지 속성을 최대화하도록 설계되었습니다.

  • 호환성을 보장하기 위해 ProRAW 파일은 표준 Adobe DNG 파일에 포함되어 있습니다.
  • DNG 파일 형식은 Apple 사진 앱, Lightroom, Adobe 앱 및 기타 여러 앱에서 지원됩니다.
  • 앱에서는 시스템 프레임워크인 ImageIO, Core Image를 통해 지원을 받을 수 있습니다.
  • 이전 버전의 iOS 및 macOS에도 이 형식에 대한 기본 지원이 있습니다.
  • 또한 파일에 전체 해상도, JPEG 품질의 미리 렌더링 된 미리 보기가 포함될 수 있습니다.
  • 카메라 앱에서 캡처한 모든 ProRAW 에는 ProRAW 모드를 활성화하지 않고 촬영한 경우 이미지와 동일하게 보이는 미리보기가 포함됩니다.

  • DNG의 픽셀은 장면 참조 및 선형 화가 가능합니다.
  • 여러 이미지를 합하여 만들 수 있습니다.
  • 무손실 12비트 RGB 압축을 지원합니다.
  • 적응형 압축 곡선을 통해 최대 14 스탑의 동적 범위를 달성할 수 있습니다.
  • 결과 파일 크기는 10MB 에서 40MB 사이일 수 있으며, 크기는 각 사진의 내용에 따라 다릅니다.

  • ProRAW 이미지에는 HEIC 및 JPEG과 동일하게 보이는 이미지를 포함합니다.
  • 이는 DNG 파일에 특수 태그를 포함하여 수행됩니다.
  • 이러한 태그는 DNG 스펙에 문서화되어 있으며, 각 이미지를 렌더링 하는 방법에 대한 정보를 제공합니다.
  • LinearizationTable 태그는 12비트 저장된 데이터를 선형화 된 값으로 분해합니다.
  • ProRAW 이미지는 동적 범위를 적용하기 때문에 BaselineExposure 태그를 사용합니다.
  • BaselineSharpness 태그를 사용하면 가장자리 선명도를 지정할 수 있습니다.
  • DNG 1.6에 새로 추가된 ProfileGainTableMap 태그를 사용하면 밝은 영역과 그림자 영역을 조정하는 방법을 알려줄 수 있습니다.
  • 전체 출력 톤 곡선을 ProfileToneCurve을 통해서 지정합니다.
  • 이 이미지는 기본 선명도 또는 톤 곡선을 자유롭게 변경할 수 있는 등 편집 가능성이 높습니다.
  • 이미지의 사람, 피부, 하늘과 같은 영역에 대한 마스크를 ProRAW에 저장합니다.

 

How to capture

  • AVFoundation Capture API는 iOS 및 MacOS에서 카메라에 대한 액세스를 제공합니다.
  • 기존의 기능으로 카메라 화면 미리보기나 사진 촬영, 비디오 녹화 등이 가능합니다.
  • 최근 추가된 기능으로 Apple ProRAW DNG 형식으로 사진을 촬영할 수 있습니다.

  • Apple ProRAW와 기존 Bayer RAW를 비교하면 위와 같습니다.
  • Bayer RAW는 iOS 10에 도입되었으며 다양한 기기에서 지원되지만, Apple ProRAW는 iOS 14.3에서 도입되었으며 iPhone 12 Pro 및 iPhone 12 Pro Max에서 지원됩니다.
  • Apple의 카메라 앱은 Deep Fusion 및 야간 모드와 같은 모든 퓨전 캡처와 플래시 캡처로 Apple ProRAW 캡처를 지원합니다.
  • Apple ProRAW를 사용하면 사진 품질을 .balanced 및 .quality로 설정할 수 있으므로 RAW 캡처에서 Apple의 이미지 합성의 이점을 얻을 수 있습니다.
  • Bayer RAW는 단일 카메라 AVCaptureDevice에서만 지원되지만, Apple ProRAW는 듀얼 와이드, 듀얼 및 트리플 카메라를 포함한 모든 장치에서 지원됩니다.
  • Bayer RAW와 Apple ProRAW는 깊이 데이터나 콘텐츠 기반 왜곡 보정을 지원하지 않습니다.
  • Live Photo 캡처는 Bayer RAW에서만 지원되지만 인물, 피부, 하늘의 시멘틱 분할은 ProRAW에서만 지원됩니다.

  • Apple ProRAW를 캡처하기 위해서는 위와 같은 단계를 거쳐야 합니다.

  • Apple ProRAW는 최고 품질의 사진을 지원하는 포맷에서만 지원됩니다.
  • 캡처 sessionPreset을 .photo로 설정해야 합니다.

  • 장치 형식을 수동으로 선택은 경우 최고 품질의 이미지를 지원하는 형식을 찾을 수 있습니다.
  • 그다음 원하는 형식을 장치의 activeFormat으로 구성하면 됩니다.

  • 그다음 photoOutput에서 isAppleProRAWEnabled를 true로 설정하여 ProRAW를 활성화해야 합니다.
  • 이 작업은 세션을 시작하기 전에 미리 수행해야 하며, 그렇지 않으면 파이프라인 재구성이 발생할 수 있습니다.
  • 원하는 경우 속도 또는 품질, 균형 중 하나를 설정할 수 있습니다.

  • availableRawPhotoPixelFormatTypes에서 지원하는 형식을 선택합니다.
  • photoOutput에서 isAppleProRAWPixelFormat 함수를 사용하여 ProRAW를 지원하는 것을 찾을 수 있습니다.
  • ProRAW 픽셀 형식의 예로는 l64r 이 있으며, 이는 16-bit full range RGBA 픽셀 형식입니다.
  • isBayerRAWPixelFormat 함수를 사용하여 Bayer RAW 형식 인지도 알 수 있습니다.

  • ProRAW를 얻는 가장 간단한 옵션은 ProRAW 사진만 요청하는 것입니다.
  • 이를 위해서는 photoSettings에서 rawPixelFormatType을 지정하기만 하면 됩니다.
  • 또는 photoSettings에서 processedFormat을 통해 한 쌍의 사진과 ProRAW를 촬영할 수도 있습니다.
  • 그러나 이렇게 하면 여러 Asset으로 작업해야 하기 때문에 사진 라이브러리에서 Asset을 추적하기가 더 어렵습니다.

  • Apple ProRAW는 최대 해상도의 JPEG 이미지를 썸네일로 지원하며 대부분의 경우 앞의 두 가지 옵션 중 좋은 것을 제공합니다.
  • 썸네일을 요청하려면 availableRawEmbeddedThumbnailPhotoCodecTypes에서 원하는 형식을 선택하고 원하는 크기를 지정해야 합니다.

  • 원하는 경우 사진 품질을 지정할 수 있습니다.
  • 여기서 지정하는 값은 이전 photoOutput에서 지정한 maxPhotoQualityPrioritization보다 작거나 같아야 합니다.
  • 또는 최대 디스플레이 크기의 미리 보기 이미지를 요청할 수도 있습니다.
  • 그런 다음 capturePhoto를 호출하여 ProRAW 사진을 촬영할 수 있습니다.

  • 촬영이 완료되면 didFinishProcessingPhoto에 ProRAW 사진인 AVCapturePhoto가 전달됩니다.
  • 캡처를 위한 미리 보기 이미지를 요청했다면 CGImageRepresentation이 있는 픽셀 버퍼를 얻을 수 있습니다.
  • ProRAW와 함께 처리된 사진을 요청한 경우 didFinishProcessingPhoto가 두 번 호출됩니다.
  • AVCapturePhoto의 isRawPhoto 속성을 이용하여 처리된 사진과 ProRAW를 구별할 수 있습니다.
  • ProRAW에 대한 fileDataRepresentation을 요청하여 DNG를 사진 라이브러리에 저장할 수 있습니다.
  • RAW 픽셀 데이터로 작업하려는 경우에는 픽셀 버퍼를 가져올 수 있습니다.

  • ProRAW DNG에는 세그용 매트가 포함될 수 있습니다.
  • 이러한 매트의 포함은 자동으로 이루어지며 장면에 따라 다릅니다.
    Core Image 및 ImageIO API를 통해 매트를 처리할 수 있습니다.

  • 마지막으로 ProRAW DNG에 사용할 수 있는 몇 가지 옵션을 살펴보겠습니다.
  • AVCapturePhotoFileDataRepresentationCustomizer의 함수를 구현하여 ProRAW사진의 압축 비트 심도와 품질을 변경할 수 있습니다.
  • Apple ProRAW는 기본적으로 12비트를 사용하여 무손실로 인코딩 됩니다.
  • 품질 수준을 1로 유지하고 원하는 비트 깊이를 제공하여 무손실 압축 ProRAW의 비트 깊이를 변경할 수 있습니다.

  • 손실 압축을 선호하는 경우 품질 수준을 1 미만으로 설정할 수 있습니다.
  • 이것은 작은 파일 크기를 제공 하지만 품질에 분명한 영향을 미칩니다.

  • didFinishProcessingPhoto 함수에서 ProRAW DNG에 대한 설정을 할 수 있습니다.
  • fileDataRepresentation에 AppleProRAWCustomizer를 제공하여 사용자 지정된 ProRAW를 얻을 수 있습니다.

 

How to store in the photo library

  • PhotoKit은 Apple 플랫폼에서 사진 라이브러리와 상호 작용하는 프레임워크입니다.
  • Apple ProRAW와 같은 RAW 이미지 형식을 지원합니다.

  • 새 Asset을 저장 PHPhotoLibrary에서 작업을 수행해야 합니다.
  • 다른 Asset과 마찬가지로 PHAssetCreationRequest을 통해서 저장할 수 있습니다.
  • photo타입의 PHAssetResource로 추가합니다.

  • 먼저 공유 사진 라이브러리에서 변경 작업을 수행합니다.
  • PHAssetCreationRequest를 만든 다음 Apple ProRAW 파일을 리소스로 추가하면 됩니다.

  • iOS 15에서 새로 제공되는 PHAssetCollectionSubtype인 .smartAlbumRAW를 사용하면 사진 라이브러리의 모든 RAW 리소스를 얻을 수 있습니다.

  • PHAsset에 대한 모든 PHAssetResources를 얻어옵니다.
  •  .photo과 .alternatePhoto라는 두 가지 유형의 리소스를 찾습니다.

  • 일부 사진은 RAW와 JPEG의 두 개의 리소스로 구성됩니다.
  • 이로 인해 사진 라이브러리의 파일 크기가 증가하고 이식성이 떨어지며, 종종 혼란스러운 일이 발생합니다.
  • 따라서 이 모델은 Apple ProRAW에 권장되지 않습니다.

  • 리소스의 uniformTypeIdentifier를 확인하여 관심 있는 RAW 타입과 일치하는지 확인합니다.
  • RAW 리소스가 있으면 PHAssetResourceManager를 사용하여 실제 데이터를 검색합니다.

  • 코드를 보면 Asset의 모든 PHAssetResources에서 .photo 또는 .alternatePhoto 타입의 항목을 찾습니다.
  • RAW 이미지 UTType인지를 확인한 다음 PHAssetResourceManager를 사용하여 해당 리소스에 대한 데이터를 요청하면 됩니다.

 

How to edit and display

  • ProRAW 파일에서 CIImage를 얻을 수 있는 몇 가지 방법이 있습니다.
  • 일반적인 사용자 조정을 적용하는 방법, 선형의 장면을 참조하는 값을 얻는 방법, HEIC와 같은 출력 참조 형식으로 렌더링 하는 방법, 마지막으로 Extended Dynamic Range 디스플레이가 있는 Mac에 ProRAW를 표시하는 방법입니다.

  • CGImageSourceCreateWithURL 및 CGImageSourceCreateThumbnailAtIndex 함수를 사용하여 ProRAW에서 미리 보기 이미지를 가져올 수 있습니다.

  • iOS 15 및 macOS 12의 새로운 기능인 CIRAWFilter(imageURL: )을 이용하여 쉽게 미리보기를 얻어올 수 있습니다.
  • CIImage를 초기화할 때 원하는 옵션을 전달하여 사람, 피부, 하늘과 같은 매트를 가져올 수 있습니다.

  • 매트 이미지를 얻어오는 것도 더 편리한 API가 제공됩니다.

  • 응용 프로그램이 기본 렌더링을 표시하려는 경우 URL이나 데이터에서 CIImage를 생성하기만 하면 됩니다.
  • 그러나 응용 프로그램이 ProRAW의 전체를 편집할 가능성이 있으면 URL에서 CIFilter를 생성해야 합니다.
  • 필터에서 outputImage를 요청하면 CIImage를 얻을 수 있습니다.

  • RAW CIFilter에는 여러 가지 입력이 있습니다.
  • 기본적인 코드 작성 방법은 미리 정의된 키 문자열 중 하나를 설정하는 것입니다.

  • iOS 15 및 macOS 12에서는 보다 Swift에 친화적인 API가 추가되었습니다.
  • CIRAWFilter 인스턴스를 만든 다음 원하는 속성을 새 값으로 설정하면 됩니다.

  • 첫 번째로 노출을 설정할 수 있으며 양수 1은 두배 밝아지는 효과를, 음수 1은 절반으로 밝아집니다.
  • 화이트 밸런스를 조절할 수 있으며, 켈빈 온도 또는 x/y 색도 좌표로 지정할 수 있습니다.
  • 선명도는 0에서 1 사이의 값으로 조정할 수 있습니다.
  • 로컬 톤 맵의 강도는 0에서 1 사이의 값으로 조정할 수 있습니다.
  • 로컬 톤 맵을 사용 하면 이미지의 각 영역이 자체적인 톤 곡선을 가질 수 있습니다.

  • 위의 이미지는 로컬 톤 맵 강도가 꺼져있는 이미지입니다.

  • 절반의 로컬 톤 맵 강도를 가지면 위와 같습니다.

  • 완전한 로컬 톤 맵을 가지는 경우는 위와 같습니다.
  • 이 이미지에서는 더 어두운 영역을 표시하고, 너무 밝은 영역을 축소합니다.

  • 대부분의 사용자는 앞에서 설명한 일반적인 조정을 선호 하지만 선형 데이터에 대한 접근은 특정 경우에 유용할 수 있습니다.
  • 선형 이미지를 얻으려면 이미지에 기본 모양을 적용하는 필터 입력을 꺼야 합니다.
  • baselineExposure, exposureBias, boostAmount, localToneMapAmount를 0으로 설정하고 outputImage를 가져오기 전에 Gamut 매핑을 비활성화합니다.

  • linearRAWImage를 얻으면 다른 Core Image필터에 대한 입력으로 이를 사용하여 이 이미지를 참조하는 계산을 수행할 수 있습니다.
  • 예를 들어 히스토그램 필터를 사용하거나 선형 이미지를 렌더링 하여 픽셀 데이터를 얻을 수 있습니다.
  • 이렇게 하려면 RGBA-half-float 형태의 데이터에 대한 CIRenderDestination을 만들고 선택한 선형 colorSpace를 사용하도록 합니다.
  • 그다음 CIContext가 rawFilter의 출력 이미지를 렌더링 하도록 합니다.

  • 위는 캡처된 선형 이미지와 기본 이미지의 예입니다.
  • 선형 이미지는 노출 부족으로 보이지만 14 스톱의 전체 데이터가 포함되어 있습니다.
  • 기본 이미지를 보면 최대로 밝은 왼쪽 영역에 80%의 밝기를 오른쪽 영역이 가집니다.
  • 이 이미지는 멋지게 보이지만 현실의 값을 나타내지는 않습니다.
  • 선형 이미지의 경우 오른쪽 하늘의 이미지는 최대 밝기의 12%에 불과하며 이는 올바른 수치입니다.

  • ProRAW CIFilter 속성을 변경한 후 이미지를 HEIC 또는 JPEG와 같은 형식으로 저장할 수 있습니다.
  • rawFilter 출력 이미지를 8비트 HEIC 파일에 저장하는 방법의 예는 위와 같습니다.
  • 이 API를 사용하면 출력 colorSpace를 지정할 수 있지만 displayP3을 권장합니다.
  • 옵션을 지정하여 시맨틱 마스크를 HEIC에 저장하는 것도 가능합니다.

  • 또한 ProRAW는 정밀도가 높기 때문에 새로운 Core Image API를 사용하여 10비트 깊이의 HEIC 파일로 저장할 수 있습니다.

  • 이처럼 표준 동적 범위에 톤 매핑되고 색역 매핑된 출력 이미지를 생성하는 것은 "SDR"로 불립니다.
  • 옵션을 설정하면 확장된 동적 범위 디스플레이에 표현할 수 있습니다.
  • MacBook Pro에서 iMac, Pro Display XDR 등의 Mac 디스플레이는 MetalKit View를 사용하여 EDR 콘텐츠를 표시할 수 있습니다.

  • ProRAW CIImage를 표시하려면 성능을 위해 MTKView를 상속받아 사용하는 것이 좋습니다.
  • MetalKit View 하위 클래스는 View에 대한 CIContext 및 MTLCommandQueue를 생성해야 합니다.
  • Mac 디스플레이가 EDR을 지원하는 경우 View의 colorPixelFormat을 rgba16Float로 설정하고
  • wantExtendedDynamic RangeContent를 true로 설정할 수 있습니다.
  • View를 그릴 때 rawFilter.extendedDynamicRangeAmount를 1로 설정하고 Core Image 콘텍스트에 outputImage를 렌더링 하도록 호출합니다.

  • SDR 이미지는 위처럼 표시됩니다.

  • 동일한 ProRAW 파일이 EDR에서 위와 같은 느낌을 가집니다.
  • 밝은 영역과 반사되는 부분이 더 이상 톤 매핑에 의해 제한되지 않으므로 완벽하게 표시됩니다.

 

목차: https://nyancoder.tistory.com/2

Comments