[Core Image Programming Guide] Core Image Programming 시작하기
Core Image에 대하여
Core Image
란 사진 및 비디오 처리 및 분석 기술으로 실시간 처리에 가까운 서비스를 제공한다. GPU 혹은 CPU의 렌더링 방식을 통해 Core Graphics
, Core Video
, Image I/O frameworks
등에 속하는 이미지 데이터 타입을 조작할 수 있다. Core Image
는 사용하기 쉬운 API를 제공함으로써 low-level에서의 그래픽 처리 세부 사항을 숨긴다. 따라서 OpenGL
, OpenGL ES
, GPU
의 파워와 관련된 Metal
, 멀티코어 처리를 위한 GCD
등의 세부 사항을 전혀 알 필요가 없다. Core Image
가 알아서 세부 사항을 처리해준다.
참고 : Metal은 GPU에 near-direct access를 가능하게 한다.
한눈에 보기
Core Image
프레임워크는 이런 것들을 제공한다.
- 내장된 이미지 처리 필터에 접근
- 이목구비 탐지 능력
- 자동 이미지 개선 지원
- 커스텀 효과 제작을 위한 다중 필터 체이닝 기능
- GPU위에서 동작하는 커스텀 필터 제작 지원
- 피드백 기반의 이미지 처리 능력
macOS
에서Core Image
는 다른 앱들에서도 사용될 수 있게 커스텀 필터에 대한 패키징(packaging)을 제공한다.
이미지를 처리 및 분석에 쉽고 효율적인 Core Image
Core Image
는 수백개의 내장 필터를 제공한다. 필터의 input 파라미터에 key-value
쌍을 입력해서 필터를 설정한다. 필터의 output은 다른 필터의 input이 될 수 있다. 따라서 다양한 효과를 위해 여러개의 필터를 체이닝 할 수 있다. 만약 복잡한 효과를 만들고 그것을 재사용하길 원한다면 CIFilter
를 subclass
해서 효과 “레시피”를 저장해놓을 수 있다.
필터의 카테고리는 다양하다. 몇몇은 stylize나 halftone 카테고리와 같이 예술적인 결과를 위해 디자인 되었고, 나머지는 color adjustmen나 sharpen과 같이 이미지 문제 해결을 위해 최적화되어있다.
Core Image
는 이미지의 퀄리티를 분석할 수 있을 뿐만 아니라 색조, 대비, 톤 조정 및 적목 현상과 같은 플래시 효과 수정에 최적화된 필터들을 제공한다.
Core Image
는 사람의 이목구비를 사진에서는 감지할 수 있고 비디오에서는 추적할 수 있다. 어디에 얼굴이 있는지를 아는 것은 어디에 vignette(?)를 배치할지, 어떤 특정한 필터를 적용할지 결정하는 것에 도움을 준다.
관련 챕터: Processing Images, Detecting Faces in an Image, Auto Enhancing Images, Subclassing CIFilter: Recipes for Custom Effects
필터와 속성을 얻기 위한 Query
Core Image
는 내장 필터에 대한 참조 문서가 있다. 어떤 필터들을 사용할 수 있는지 알아내기 위해서 시스템에 쿼리를 날릴 수 있다. 그러면 각 필터와 그에 대해 속성을 나타내는 dictionary를 얻게 된다. 여기에는 input 파라미터, defaults 파라미터 값, 최소 / 최대 값, display 이름 등이 담겨 있다.
실시간 영상 처리를 위한 Core Image
만약 실시간 영상 처리가 필요하다면 성능 최적화를 위해 할 수 있는 몇가지 것들이 있다.
관련 챕터: Getting the Best Performance
피드백 기반 처리를 위한 Image Accumulator 사용
CIImageAccumulator
class 는 피드백 기반 이미지 처리를 효율적으로 하기 위해 디자인되었다. (you might find useful if your app needs to image dynamical systems.)
커스텀 커널 및 필터의 제작과 배포
만약 내장된 필터로도 만족할 수 없다면 커스텀 필터를 제작하는 것을 고려해야한다. 이를 위해선 커널(픽셀 레벨에서 동작하는 프로그램)을 이해해야한다. 왜냐하면 이것들이 모든 필터의 핵심이기 때문에!
macOS에서는 하나 또는 그 이상의 커스텀 필터를 이미지 유닛으로 패키징할 수 있다. 따라서 다른 앱에서도 사용할 수 있다.
관련 챕터: What You Need to Know Before Writing a Custom Filter, Creating Custom Filters, Packaging and Loading Image Units
See Also
Core Image
에 대한 다른 중요한 문서들은 아래와 같다.
- Core Image Reference Collection 은
Core Image
프레임워크에서 사용가능한 class들의 자세한 설명을 제공한다. - Core Image Filter Reference 는 애플에서 제공하는 내장된 이미지 처리 필터에 대해 설명한다. 이를 통해 필터 전 / 후로 어떻게 이미지가 나타나는지 확인할 수 있다.
- Core Image Kernel Language Reference 는 커스텀 필터를 만들때 필요한 커널 루틴의 언어를 설명한다.