확장 색 정보
RGB 색에 대해 알고 있는 경우(255, 255, 255)는 흰색의 8비트 RGB 트리플렛임을 알 수 있습니다. 그러나이 삼중으로 정의 된 실제 색상 은 무엇입니까?
대답은 놀라운 일이 될 수 있습니다 : 몇 가지 추가 정보없이,이 세 쌍둥이는 특정 색상을 정의하지 않습니다! RGB 값의 의미는 색 공간에 따라 달라집니다. 색 공간을 모르는 경우 엄밀히 말하면 색을 알 수 없습니다.
색 공간은 지정된 색 값의 숫자 표현을 실제 조명으로 재현하는 방법을 정의합니다. 비디오가 한 색 공간에서 인코딩되지만 다른 색으로 표시되면 비디오가 색을 수정하지 않는 한 왜곡된 색이 발생합니다. 따라서 정확한 색 충실도를 얻으려면 원본 비디오의 색 공간을 아는 것이 중요합니다. 이전에는 Windows의 비디오 파이프라인에서 의도한 색 공간에 대한 정보를 전달하지 않았습니다. Windows Vista부터 DirectShow와 Media Foundation은 모두 미디어 형식의 확장된 색 정보를 지원합니다. 이 정보는 DXVA(DirectX Video Acceleration)에도 사용할 수 있습니다.
색 공간을 수학적으로 설명하는 표준 방법은 CIE(국제 일루미네이션 위원회)에서 정의한 CIE XYZ 색 공간을 사용하는 것입니다. 비디오에서 직접 CIE XYZ 값을 사용하는 것은 실용적이지 않지만 색 공간 간에 변환할 때 CIE XYZ 색 공간을 중간 표현으로 사용할 수 있습니다.
색을 정확하게 재현하려면 다음 정보가 필요합니다.
- 색 주 데이터베이스입니다. 색 주체는 CIE XYZ tristimulus 값이 RGB 구성 요소로 표현되는 방법을 정의합니다. 실제로 색 주체는 지정된 RGB 값의 "의미"를 정의합니다.
- 전송 함수입니다. 전송 함수는 선형 RGB 값을 비선형 R'G'B' 값으로 변환하는 함수입니다. 이 함수를 감마 보정이라고도합니다.
- 전송 매트릭스입니다. 전송 매트릭스는 R'G'B'가 Y'PbPr로 변환되는 방법을 정의합니다.
- 크로마 샘플링. 대부분의 YUV 비디오는 류마보다 크로마 구성 요소에서 해상도가 낮은 상태로 전송됩니다. 크로마 샘플링은 비디오 형식의 FOURCC로 표시됩니다. 예를 들어 YUY2는 4:2:2 형식입니다. 즉, 크로마 샘플은 2의 요소에 의해 수평으로 샘플링됩니다.
- 크로마 앉아. 크로마가 샘플링될 때, 루마 샘플에 상대적인 크로마 샘플의 위치는 누락된 샘플을 보간하는 방법을 결정합니다.
- 명목 범위입니다. 명목 범위는 Y'PbPr 값의 크기를 Y'CbCr로 조정하는 방법을 정의합니다.
미디어 형식의 색 공간
DirectShow, Media Foundation 및 DXVA(DirectX Video Acceleration)에는 모두 비디오 형식을 나타내는 다양한 방법이 있습니다. 다행히 관련 열거형이 동일하기 때문에 색 공간 정보를 서로 쉽게 변환할 수 있습니다.
DXVA 1.0: 색 공간 정보는 DXVA_ExtendedFormat 구조에 제공됩니다.
DXVA 2.0: 색 공간 정보가 DXVA2_ExtendedFormat 구조에 제공됩니다. 이 구조체는 DXVA 1.0 구조체와 동일하며 필드의 의미는 동일합니다.
DirectShow: 색 공간 정보가 VIDEOINFOHEADER2 구조에 제공됩니다. 정보는 dwControlFlags 필드의 상위 24비트에 저장됩니다 . 색 공간 정보가 있는 경우 dwControlFlags에서 AMCONTROL_COLORINFO_PRESENT 플래그를 설정합니다. 이 플래그가 설정되면 dwControlFlags 필드는 구조체의 하위 8비트가 AMCONTROL_xxx 플래그용으로 예약되어 있다는 점을 제외하고 DXVA_ExtendedFormat 구조체로 해석되어야 합니다.
비디오 캡처 드라이버: 색 공간 정보는 KS_VIDEOINFOHEADER2 구조에 제공됩니다. 이 구조체는 VIDEOINFOHEADER2 구조체와 동일하며 필드의 의미는 동일합니다.
Media Foundation: 색 공간 정보는 미디어 형식의 특성으로 저장됩니다.
색 정보 Attribute 색 주 데이터베이스 MF_MT_VIDEO_PRIMARIES Transfer 함수 MF_MT_TRANSFER_FUNCTION 전송 매트릭스 MF_MT_YUV_MATRIX 크로마 하위 샘플링 MF_MT_SUBTYPE
(첫 번째 에 저장되는 FOURCC에 의해 지정됨하위 형식 GUID의 DWORD 입니다.)크로마 앉기 MF_MT_VIDEO_CHROMA_SITING 명목 범위 MF_MT_VIDEO_NOMINAL_RANGE
색 공간 변환
한 Y'CbCr 공간에서 다른 공간으로 변환하려면 다음 단계가 필요합니다.
역량화: 원본 명목 범위를 사용하여 Y'CbCr 표현을 Y'PbPr 표현으로 변환합니다.
업샘플링: 샘플링된 크로마 값을 크로마 값을 보간하여 4:4:4로 변환합니다.
YUV에서 RGB로 변환: 원본 전송 매트릭스를 사용하여 Y'PbPr에서 비선형 R'G'B'로 변환합니다.
역방향 전송 함수: 전송 함수의 역방향을 사용하여 비선형 R'G'B'를 선형 RGB로 변환합니다.
RGB 색 공간 변환: 색 주체를 사용하여 원본 RGB 공간에서 대상 RGB 공간으로 변환합니다.
전송 함수: 대상 전송 함수를 사용하여 선형 RGB를 비선형 R'G'B로 변환합니다.
RGB에서 YUV로 변환: 대상 전송 매트릭스를 사용하여 R'G'B'를 Y'PbPr로 변환합니다.
다운샘플링: 크로마 값을 필터링하여 4:4:4에서 4:2:2, 4:2:0 또는 4:1:1로 변환합니다.
양자화: 대상 명목 범위를 사용하여 Y'PbPr을 Y'CbCr로 변환합니다.
1~4단계는 원본 색 공간에서 발생하며 6~9단계는 대상 색 공간에서 발생합니다. 실제 구현에서는 중간 단계를 근사화할 수 있고 인접한 단계를 결합할 수 있습니다. 일반적으로 정확도와 계산 비용 사이에는 장차가 있습니다.
예를 들어 RT.601에서 RT.709로 변환하려면 다음 단계가 필요합니다.
역량화: Y'CbCr(601)에서 Y'PbPr(601)로
업샘플링: Y'PbPr(601)
YUV에서 RGB로: Y'PbPr(601)에서 R'G'B'(601)
역 전송 함수: R'G'B'(601)에서 RGB(601)로
RGB 색 공간 변환: RGB(601)에서 RGB(709)로 변환
전송 함수: RGB(709)에서 R'G'B'(709)로
RGB에서 YUV로: R'G'B'(709)에서 Y'PbPr(709)
다운샘플링: Y'PbPr(709)
양자화: Y'PbPr(709)에서 Y'CbCr(709)로
확장 색 정보 사용
파이프라인 전체에서 색 충실도를 유지하려면 원본 또는 디코더에 색 공간 정보를 도입하고 파이프라인을 통해 싱크로 전달해야 합니다.
비디오 캡처 디바이스
대부분의 아날로그 캡처 장치는 비디오를 캡처할 때 잘 정의된 색 공간을 사용합니다. 캡처 드라이버는 색 정보를 포함하는 KS_VIDEOINFOHEADER2 서식 블록이 있는 형식을 제공해야 합니다. 이전 버전과의 호환성을 위해 드라이버는 색 정보를 포함하지 않는 형식을 허용해야 합니다. 이렇게 하면 드라이버가 확장된 색 정보를 허용하지 않는 구성 요소를 사용할 수 있습니다.
파일 기반 원본
비디오 파일을 구문 분석할 때 미디어 원본(또는 DirectShow의 파서 필터)이 일부 색 정보를 제공할 수 있습니다. 예를 들어 DVD 탐색기는 DVD 콘텐츠에 따라 색 공간을 결정할 수 있습니다. 디코더에 다른 색 정보를 사용할 수 있습니다. 예를 들어 MPEG-2 기본 비디오 스트림은 sequence_display_extension 필드에 색 정보를 제공합니다. 원본에서 색 정보가 명시적으로 설명되지 않은 경우 콘텐츠 형식에 의해 암시적으로 정의될 수 있습니다. 예를 들어 DV 비디오의 NTSC 및 PAL 종류는 각각 다른 색 공간을 사용합니다. 마지막으로 디코더는 원본의 미디어 형식에서 가져오는 색 정보를 사용할 수 있습니다.
기타 구성 요소
다른 구성 요소는 미디어 형식에서 색 공간 정보를 사용해야 할 수 있습니다.
- 소프트웨어 색 공간 변환기는 변환 알고리즘을 선택할 때 색 공간 정보를 사용해야 합니다.
- EVR(향상된 비디오 렌더러) 믹서와 같은 비디오 믹서는 다양한 유형의 콘텐츠에서 비디오 스트림을 혼합할 때 색 정보를 사용해야 합니다.
- DXVA 비디오 처리 API 및 DDI를 사용하면 호출자가 색 공간 정보를 지정할 수 있습니다. GPU는 하드 하드 비디오 혼합을 수행할 때 이 정보를 사용해야 합니다.
관련 항목