2017-02-24 1 views
2

선형 공간에 들어 가지 않고도 RAW 이미지의 전체 크기를 줄이는 것에 대한 질문이 있습니다. 그 이유는 매우 큰 메가 픽셀 이미지 (60 메가 픽셀)를 편집하려고하지만 iPad 또는 iPhone 화면과 같은 이미지를 편집하는 동안 전체 이미지가 필요하지 않기 때문입니다. 편집이 끝나면 원본을 저장하고 싶습니다. 절약 속도는 중요하지 않습니다. "편집 중"편집중인 이미지를 "미리보기"하고 있습니다.작은 화면에서 편집을 위해 de-bayer없이 RAW 이미지를 다운 샘플링하는 방법은 무엇입니까?

새로운 CoreImage RAW 기능을 활용하고 내 자신의 RAW CIFilter를 작성하고 싶지만 전체 시간에 거대한 RAW 이미지에서 작업 할 필요가 없기 때문에 RAW 데이터를 보존하고 싶습니다.

Swift 또는 이와 연결할 수있는 언어로 수행 할 수있는 경우 플러스입니다. 실제 크기 조정은 초고속 일 필요는 없으며 편집을 시작하기 전에 한 번만 수행해야합니다.

  1. 드 - 바이엘의 선형 공간, 다음 크기 조정 및 바이엘 형식 RAW로 다시 변환에 RAW 이미지,하지만 난 알고하지 않습니다 내가 this post 읽기에서 두 가지 방법이있을 수 있습니다 생각

    그런 식으로 다운 샘플링에서 데이터를 보존 할 수 있습니다.

  2. 어쨌든 크기를 조정하여 크기를 작게 만드십시오. 그러나 이것이 내가 이해하는데 도움이되는 것입니다.

고맙습니다!

답변

1

Swift/iOS에서 일반적으로 CoreImage 또는 이미지 처리에 익숙하지 않지만 최소한 시작점을 알려 드리겠습니다.

원시 이미지 (모자이크 처리 된 이미지)는 본질적으로 서로 다른 픽셀이 서로 다른 색상에 해당하는 1 채널 이미지입니다. (주목할만한 예외를 제외하고는 대부분의 타일 조각이 붙듯 파일에 대한 일반적입니다)이 배열에서 각 2 × 2 픽셀 그룹이 이미지를 가로 질러 반복하는 것이

R G R G 
G B G B 
R G R G 
G B G B 

참고 : 일반적인 레이아웃처럼 보일 수 있습니다. 크기를 조정하기 위해이 2x2 영역을 슈퍼 픽셀로 간주 할 수 있습니다.

파일이나 메모리에서 이미지 버퍼의 픽셀 데이터에 액세스 할 수 있다고 가정합니다.

저해상도 RAW 이미지를 효율적으로 생성하는 가장 간단한 방법은 정수 인수로 이미지를 다운 샘플링하는 것입니다. 이렇게하려면 행과 열을 따라 번째 슈퍼 픽셀을 가져 와서 새로운 RAW 이미지를 만듭니다.

그러나이 작업으로 인해 새 RAW 이미지의 나이키 스트 주파수가 원래 RAW 이미지의 최고 주파수 컨텐트보다 줄어들 수 있으므로 Aliasing과 같은 이미지 아티팩트가 이미지에 나타날 수 있습니다.

이렇게하려면 다운 샘플링 전에 Anti-Aliasing Filter을 적용하고 싶을 것입니다. 그러나 이미지를 아직 모자이크 처리하지 않았고 서로 다른 색상 채널 (R, G, B)이 반드시 상관 관계가있는 것은 아니므로 색상 채널별로 필터링을 적용해야합니다.

이것은 직사각형 그리드를 형성하는 R 및 B 채널에 대해 쉽게 수행 할 수 있지만 G 채널은 훨씬 더 어려워집니다.아마도 이러한 어려움을 극복 할 수있는 가장 쉬운 방법은 이미지에서 두 개의 직사각형 G 그리드를 별도로 필터링하는 것입니다.

이제 RAW 이미지 앤티 앨리어싱 다운 샘플링이 일반적인 기능이 아니기 때문에 대부분의 기능을 처음부터 구현해야한다고 가정합니다. 제공되는 리샘플링 기능을 사용하여 저해상도 미리보기를 생성하고 데모 조시 미리보기에서 이미지 조정을 허용함으로써 원본 RAW를 간단하게 디모 자 싱함으로써 상당한 시간을 절약 할 수 있습니다. 그런 다음 전체 해상도 편집을 저장하려고 할 때 돌아가서 미리보기 된 변경 사항을 전체 해상도의 모자이크 처리 된 RAW 이미지에 적용합니다.

희망 사항은 몇 가지 출발점이 될 수 있기를 바랍니다.

+0

안녕하세요 글렌, 답변 해 주셔서 감사합니다. 이 모든 것이 의미가 있지만 "슈퍼 픽셀"에 액세스하는 방법을 잘 모르겠습니다. 대부분의 문서는 CoreGraphics를 사용하여 선형 공간의 이미지에 대해 이야기하지만 실제로 얻는 데이터는 원시 이미지의 슈퍼 픽셀이 아닙니다. 또한 n 번째 슈퍼 픽셀은 무엇입니까? 이게 뭔지 어떻게 압니까? – kineticac

+0

픽셀 데이터 버퍼에 액세스 할 수 있습니까? 그렇다면 슈퍼 픽셀은 해당 데이터 버퍼에서 2x2 픽셀 그룹이됩니다. 인터페이스 할 CoreGraphics 객체의 이름은 무엇입니까? – Glenn

+0

궁극적 인 목표는 CIImage를 사용하여 RAW 이미지 (https://developer.apple.com/reference/coreimage/cifilter/raw_image_options)를 초기화하는 것입니다. 그러나 큰 RAW 이미지를 편집 할 때는 프로세스가 매우 느립니다. 편집을위한 다운 샘플링이 이상적이며 사진을 저장하면 실제 크기의 이미지가 사용됩니다. 즉, RAW 데이터를 보존 할 수있는 한 사용할 수 있습니다. CoreGraphics는 픽셀 데이터를 얻지 만 어떻게 처리해야하는지 확신 할 수 없습니다. 이것이 데이터를 얻는 방법일까요? http://stackoverflow.com/a/10412292/236480. 그 데이터로는 어떻게 확신 할 수 없지만. – kineticac

관련 문제