색상 보정 매트릭스(CCM)

Image Quality Video Series: Color Accuracy▶
이미지 품질 비디오 시리즈: 색상 정확도

소개

Color/Tone Interactive 및 Auto 기능은 최소 9개의 서로 다른 색상 패치가 있는 컬러 테스트 차트 이미지에서 색상 보정 행렬(CCM)을 계산할 수 있습니다. 일반적으로 3x3 CCM이 권장되지만 4x3도 지원됩니다. 저렴하고 널리 구할 수 있는 24패치 X-Rite Colorchecker를 사용하면 일반적으로 우수한 결과를 얻을 수 있습니다. CCM을 이미지에 적용하여 최적의 색 재현을 달성할 수 있으며, 최적의 색 재현은 보정된 테스트 차트 패치와 해당 참조 값 간의 최소 평균 제곱 색상 오차로 정의됩니다.

기본 색상 오차 매개변수는 5 ≤ L * ≤ 98(여기서 L *는 CIELAB 색 공간 에서 정의됨)이고 R , G, B 채널 각각이 최대값의 99 % 미만인 (즉, 패치가 포화되지 않은) 모든 패치에 대해 계산된 (ΔE2000)2(또는 매우 유사한 (ΔE94)2)의 평균입니다. 행렬 계산에는 비선형 최적화가 사용됩니다.

CCM은 아카데미 컬러 인코딩 시스템 과 같은 영화 워크플로우의 입력 장치 변환(IDT)에 사용될 수 있습니다. 여러 대의 카메라로 장면을 촬영할 때 일관된 색상을 구현하는 데 사용할 수 있습니다.

색상 행렬 계산을 설정할 때, 행렬 연산에 선형 R, G, B 값이 필요하므로 이미지를 적절하게 선형화하는 것이 매우 중요합니다. 다양한 이미지 인코딩 방식에 따라 여러 가지 선형화 옵션을 사용할 수 있습니다.

작업 순서 — 흐름도

간략한 요약: 보정되지 않은 컬러 차트 이미지로 시작합니다. 색 공간이 지정되어 있을 필요는 없습니다. 원본 이미지가 가장 적합합니다. 톤 응답 곡선을 분석하여 필요한 선형화를 결정한 다음, 설정(대상 색 공간 및 참조 파일 포함)을 선택합니다. "보정 행렬 "을 눌러 색상 오류 제곱합이 최소가 되는 행렬을 찾는 최적화 프로그램을 실행합니다.

색상 보정 매트릭스(CCM) 계산 워크플로

수학

매트릭스

컬러 이미지는 m x n x 3 배열( m 행(높이) x n 열(너비) x 3색)에 저장됩니다. 편의상 입력 컬러 이미지를 k x 3 배열로 변환합니다. 여기서 k = m x n 입니다. 원본(보정 및 선형화되지 않은* 입력) 픽셀 데이터는 다음과 같습니다. 다음과 같이 표현될 수 있습니다.

여기서 i 번째 행의 항목은 다음과 같습니다. 는 픽셀 i 의 정규화 및 선형화된* R, G, B 레벨을 나타냅니다. 변환(보정)된 배열을 라고 합니다. 이는 행렬 곱셈을 통해 계산됩니다. 색상 보정 행렬 , Imatest에서는 두 가지 다른 형태를 선택할 수 있습니다. 3x3 또는 4x3 중 하나를 선택하십시오. (4x3은 더 이상 권장되지 않으며, 사용자 의견이 없으면 사용이 중단될 수 있습니다.)

( ( 3x3 행렬입니다)

각 출력(보정된) 픽셀의 R, G, B 값은 해당 픽셀의 세 가지 입력 색상 채널의 선형 조합입니다.

*참고: 이 방정식들은 원래(입력) 배열을 가정합니다. 이미지 밝기를 선형적으로 표현한 것입니다. 이미지 파일이 선형이 아닌 경우(예: sRGB 또는 Adobe RGB 색 공간), 행렬 계산에 입력하기 전에 선형화 해야 하며, 결과에 감마 곡선을 적용(즉, 역 선형화)해야 할 수도 있습니다. 자세한 내용은 아래의 선형화 부분을 참조하십시오.

사례 2 (사용 중단 예정): ( ( 4x3 행렬입니다. 일반적으로 3x3 행렬이 권장됩니다.) 각 색상 채널에 대한 오프셋을 제공하기 위해 A 행렬에 1로 구성된 열이 추가됩니다. , , 그리고 이렇게 하면 보정된 색상 값이 원래 입력값의 아핀 변환이 됩니다.

이 계산의 목표는 (아래에 설명된 특정 측정 기준에서) 두 값 사이의 차이를 최소화하는 것입니다. 그리고 참조 배열(이상적인 차트 값) . 초기값 3x3 및 4x3 경우에 대한 (최적화의 시작점)은 각각 다음과 같습니다.

어디

참조 배열의 경우 그리고 원래 배열 여기서 평균은 전체에 대해 계산됩니다. .

색상/톤 기능을 사용하려면 각 차트 유형별로 참조 배열 R이 필요합니다. (X-Rite Colorchecker와 같이 여러 개의 참조 배열이 있는 경우도 있습니다.) R 에는 일반적으로 CIELAB(L*a*b*) 값이 포함되며, 이 값은 RGB 값으로 변환하거나 색차 측정값(ΔE, ΔC 등)을 계산하는 데 사용할 수 있습니다.

  • 기본(내장) 참조를 사용하십시오.
  • 차트를 측정하여 얻거나( 테스트 차트 패치 측정 참조) X-Rite Colorchecker의 경우 X-Rite 또는 Babelcolor 웹사이트와 같은 웹페이지에서 얻을 수 있는 참조 파일을 입력하십시오.
  • 여기에 설명된 대로 고품질 "골드 스탠다드" 차트 이미지의 L*a*b* 값으로 생성된 참조 파일을 입력하십시오.

색상/톤 대화형 모듈에서 파일 > L*a*b* 참조 복사를 클립보드에 붙여넣으면 현재 참조 값을 얻을 수 있습니다. 오른쪽에는 컬러체커의 몇 가지 값이 표시됩니다. 아래에는 X-Rite 페이지 에서 발췌한 내용이 나와 있습니다.

37.31 13.39 14.58
64.37 18.05 17.05
49.62 -1.162 -22.16
43.35 -14.62 22.86
55.18 12.16 -24.57
70.67 -31.91 0.08472
62.11 33.4 55.77
40.05 16.27 -44.37
50.06 48.12 15.6
30.21 24.4 -20.88
71.52 -28.38 58.85
70.96 14.79 67.25
29.15 21.68 -48.74
54.35 -42.65 32.87
41.82 50.35 27.36
(24 rows total)

선형화

대부분의 표준(비 HDR) 이미지 센서는 포화 지점까지 선형적인 특성을 보이지만, 많은 이미지 파일은 매우 비선형적입니다. Imatest는 크게 두 가지 유형의 이미지 파일을 처리합니다.

  • "RAW" 파일은 감마 곡선을 적용하지 않고 센서 출력에서 변환된 파일입니다(선명도 향상, 노이즈 감소, 화이트 밸런스 등과 같은 신호 처리가 거의 또는 전혀 적용되지 않은 경우가 많습니다). 이러한 파일은 감마 값이 1에 가까운 선형 파일입니다(렌즈 플레어 및 센서 내 신호 처리(페데스탈 추가)로 인해 감마 값이 1보다 약간 낮은 경우가 많습니다). RAW 파일은 감마 인코딩된 호환 파일을 얻기 위한 처리 과정에서 일부 정보 손실(특히 sRGB 색 공간의 경우)이 발생할 수 있기 때문에 CCM 계산에 선호됩니다.

  • 상호 교환 가능하도록 설계되었으며 지정된 감마( γ )에서 표시됩니다. 여기서 디스플레이 휘도는 픽셀 레벨 γ 와 같습니다. (톤 응답 곡선으로 표현하면 로그 휘도 = γ × 로그 픽셀 레벨입니다.)

이러한 파일에는 일반적으로 색 공간이 연결되어 있습니다(파일 내에 포함되어 있을 수도 있고 그렇지 않을 수도 있음). 가장 일반적으로 사용되는 색 공간(sRGB(약 2.2) 및 Adobe RGB(1998))의 경우 감마 값은 2.2입니다.

카메라가 이미지를 인코딩할 때(RAW 변환 과정의 일부), 디스플레이 곡선의 대략적인 역수인 톤 응답 곡선(로그 픽셀 레벨 대 로그 노출)을 적용합니다. 이 곡선의 기울기는 1/ γ 에서 상당히 벗어날 수 있으며, 하이라이트 과다 노출을 최소화하기 위해 톤 응답 곡선에 "숄더"(대비가 감소된 영역)가 포함되는 경우가 많습니다. 이 숄더는 응답을 더욱 "필름과 유사하게" 만들어 화질을 향상시키지만, CCM의 정확도를 떨어뜨릴 수 있습니다.

CCM 계산은 이미지에 적용된 모든 이미지 처리가 균일하고 개별 색상이 포화되지 않았다고 가정합니다. 로컬 톤 매핑이 적용된 후에는 정확한 CCM을 계산할 수 없습니다.

입력 이미지가 감마 인코딩된 경우, 보정 행렬을 적용하기 전에 선형화 해야 합니다 . Imatest는 아래에 설명된 여러 선형화 옵션을 제공합니다. 옵션 1과 5~8은 입력 이미지를 선형화합니다. 옵션 2~4는 입력 이미지가 선형이라고 가정합니다.

선형화 설정이 5, 6 또는 9 이외의 경우, 컬러/톤 인터랙티브 에서 테스트 차트 이미지를 열고 오른쪽에 표시된 흑백 밀도 표시(로그 픽셀 레벨 대 로그 노출)를 확인하면 선형화 설정을 결정하는 데 필요한 정보( 아래 설명 참조 )를 찾을 수 있습니다.

이 특정 곡선은 감마(평균 기울기)가 0.547이고 "어깨" 형태의 응답을 보입니다. CCM 계산에 더 적합한 원시 파일은 일반적으로 기울기(감마)가 1에 가깝고 어깨 형태의 응답이 없습니다.

적절한(하지만 완벽과는 거리가 먼) 선형화 설정은 7입니다. 선형화 설정 드롭다운 메뉴 아래 상자에서 감마를 0.55로 설정하여 감마를 사용하여 입력을 선형화합니다 . 감마에 대한 가정을 하지 않고 이미지의 회색조 패치에서 감마를 직접 측정하는 설정 5 또는 9를 사용하면 더 나은 결과를 얻을 수 있습니다. 5는 감마가 1에 가까운 RAW 이미지에 적합합니다.

최적화 단계

  • 색상/톤 ( 대화형 또는 자동 )에서 CCM 계산에 사용할 이미지를 엽니다 .

  • 설정 창에서 대부분의 설정을 선택하세요 .
    입력 이미지의 톤 응답 (감마 포함)(위 상자에 표시됨)은 적절한 선형화 옵션을 결정하는 데 사용됩니다. 색 공간 감마 선형화가 선택된 경우, O L = O gamma가 됩니다. (여기서 감마( γ )는 색 공간에 의해 지정되며, 예를 들어 Adobe RGB의 경우 1/2.2입니다.)
    색상/톤 창에서 올바른 색 공간과 참조 파일이 선택되었는지 확인하십시오.

  • 보정 행렬 버튼을 눌러 최적화 프로그램을 호출하십시오 .
    • (임시) 보정된 이미지 T L = O L A 를 계산합니다.
    • (선택적으로) 색 공간 감마( γ )를 사용하여 선형화 T = T L (1/γ) 를 제거합니다.
    • 각 패치에 대해 T (CIELAB, 즉 L*a*b* 값으로 변환됨)와 기준(이상적인) 배열 R 사이의 색상 오차 측정값을 찾습니다. 최적화 드롭다운 메뉴에서 선택하는 색상 오차 측정값은 ΔE* ab , ΔC* ab , ΔE94 , ΔE94 , ΔECMC , ΔCCMC , ΔE00 또는 ΔC00 과 같은 표준 색상 오차 측정값 중 하나 이며, 이에 대한 설명은 여기에 있습니다. ΔE00 (CIEDE2000) 또는 ΔE94  권장 선택 사항은 다음과 같습니다. [a*b* 디스플레이에 색차 타원을 추가하기 전에는 ΔE 00 에 최적화에 영향을 줄 수 있는 작은 불연속성이 포함될 수 있다는 우려가 있었습니다.] ΔC 오차는 휘도( L *)를 제외한 ΔE와 유사합니다. L*a*b* 색 공간의 색차( a * 및 b *)와 휘도( L *) 구성 요소 간에 상호 작용이 있고, ΔC 값 중 하나를 선택하면 색차의 정확도가 실제로 떨어지기 때문에 권장하지 않습니다.
    • 비선형 최적화를 사용하여 오류 측정값의 제곱합의 최소값(일반적으로 ∑(ΔE 00 ) 2 또는 5 ≤ L * ≤ 98인 패치의 경우 ∑(ΔE 00 ) 2) 이 발견될 때까지 A를 조정합니다.
    • A 의 최종 값을 보고합니다.

(일반적으로 Imatest 외부에서) A를 적용할 때에도 유사한 선형화 과정을 사용해야 합니다. A는 RAW 변환 과정에서 감마 + 톤 응답 곡선을 적용하기 전에 선형화 없이 적용할 수 있습니다.

A가 전역 최소값이라는 보장은 없습니다. 최종 값은 시작 값에 어느 정도 의존합니다.

색상/톤의 색상 보정 매트릭스

옵션: 색상 매트릭스 계산 옵션은 색상/톤 대화형 창에서 설정 > 색상 매트릭스를 클릭하거나 설정 창에서 색상 매트릭스, ISO 속도, mxn 차트 설정 버튼을 눌러 설정할 수 있습니다. 그러면 아래와 같은 대화 상자가 나타납니다. 옵션은 다음과 같습니다.

  • 색상 매트릭스 설정2 4x3 또는 3x3 행렬 : 색상 보정 행렬 크기. 일반적으로 3x3 행렬을 권장합니다. 4x3 행렬에는 DC 오프셋(상수) 항이 포함되어 계산 속도가 느려지고 결과 개선에 도움이 되는 경우는 드뭅니다.
  • 최적화 : L*>10(95의 경우 거의 검은색)인 패치에 대한 제곱평균을 최소화할 색상 오차 매개변수를 선택합니다. 선택 가능한 매개변수에는 ΔE ab, ΔC ab, ΔE 94, ΔE 94, ΔE CMC, ΔC CMC, ΔE 00, ΔC 00이 있으며, 이에 대한 설명은 여기에 있습니다. ΔE 94 또는 ΔE 2000을 사용하는 것이 좋습니다. 이 값들은 채도가 높은(a* 2 + b* 2 값이 큰) 색상 간의 채도 차이에 가중치를 덜 주기 때문입니다. 즉, ΔE ab(표준 ΔE 계산: L*a*b* 공간에서 색상 간의 기하학적 거리)보다 사람의 시각적 인식에 더 가깝습니다.
  • 가중치 : 최적화를 위한 패치의 가중치를 설정합니다. 선택 사항:
    • 1. 동일 가중치 [기본값] 패치에 동일한 가중치가 적용됩니다. 하이라이트 색상이 섀도우 색상보다 시각적으로 더 두드러질 수 있으므로 최적의 설정이 아닐 수 있습니다.
    • 2. 강조 영역 부각: CIELAB L*에 따른 가중치 부여. 시각적으로 두드러지는 강조 영역에 더 큰 가중치를 부여합니다. 이것이 기본 설정입니다.
    • 3. 주요 부분을 강하게 강조합니다: L*^2에 따라 가중치를 부여합니다 .
    • 4. CSV 파일에서 가중치 읽기 이 옵션을 선택하면 '가중치 복사', '찾아보기', '파일' 상자가 활성화됩니다. CSV 파일에는 차트의 패치 개수와 동일한 개수의 가중치(일반적으로 0~1 범위)가 포함되어 있어야 합니다. 파일은 한 줄에 하나의 값 또는 n 줄에 걸쳐 m 개의 값이 있을 수 있으며, 단 m*n은 차트의 패치 개수와 같아야 합니다.
다음은 140패치(10행 x 14열) Colorchecker SG에 대한 가중치 예시입니다.

0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
0,0,0,0,0,0,2,0,1,1,0,0,0,0
1,0,0,0,1,1,3,0,1,1,0,0,0,0
0,1,0,0,0,0,0,1,0,1,0,1,1,0
0,0,1,0,0,1,1,0,1,1,0,0,0,0
0,0,0,0,0,0,0,0,0,0,0,0,0,0
0,0,0,0,0,0,1,0,0,0,0,0,0,0
0,0,0,1,0,0,0,0,0,0,0,0,0,0
0,0,1,0,0,0,0,1,0,0,0,0,0,0
0,0,0,0,0,0,0,0,0,0,0,0,0,0

무게 파일이 입력되고 CCM이 계산된 후 (색상/톤 창 오른쪽에 있는 ) 숫자 확인란을 누르면 패치 번호(SG의 Colorchecker 24 복제 섹션이 표시됨)와 무게가 모두 표시됩니다. 이를 통해 올바른 무게가 입력되었는지 확인할 수 있습니다.
  • 선형화 : 행렬을 계산하기 전에 이미지를 선형화하는 방법을 선택합니다. 대부분의 설정(5, 6, 9 제외)에서는 입력 이미지의 톤 응답(인코딩)을 알아야 합니다. 톤 응답은 선형(RAW 이미지의 일반적인 방식), 감마 인코딩(수동으로 입력한 감마(γ) 또는 선택한 색 공간(sRGB, Adobe RGB 등)의 감마 사용), 또는 로그 인코딩일 수 있습니다. 톤 응답은 차트의 회색조 부분에 대한 흑백 밀도 플롯에서 얻을 수 있습니다. 감마 인코딩된 색 공간을 선형화하는 공식은 O L = O 1/γ 입니다 . 감마 인코딩(CCM 계산 후) 공식은 O = O L γ 입니다 .

    설정 5, 6, 9의 경우 이미지가 어떻게 인코딩되었는지 알 필요가 없습니다. 선형화 매개변수는 Matlab의 polyfit 및 polyval 함수를 사용하여 회색조 데이터(설정 5 및 6의 경우 회색조 패치 레벨 L , 설정 9의 경우 log 10 ( L ))에 대한 다항식 적합을 통해 결정됩니다.
환경 댓글 선형화 방정식: 선형 수준 =
1. 입력값을 선형화(CS 감마)하고, 행렬을 적용한 다음, CS 감마 인코딩을 적용합니다. 표준 색 공간(CS)으로 인코딩된 이미지에 적합한 선택입니다. 입력 1/(CS 감마)
2. 선형화 없음: 입력 픽셀에 행렬 적용 실험용 또는 선형으로 시작해서 선형으로 유지되는 이미지에 사용하세요. 감마 인코딩된 이미지에는 사용할 수 없습니다. 입력
3. 입력이 선형이라고 가정하고, 행렬을 적용한 다음, CS 감마 인코딩을 적용합니다. 감마 인코딩이 되어 있지 않은(거의 선형적인) 이미지이지만 색 공간으로 변환해야 하는 경우, 입력 RGB 이미지를 L*a*b*로 변환할 때 색 공간(CS) 감마가 적용되지 않습니다. 입력
4. 입력과 출력이 선형이라고 가정합니다 (감마 = 1). 선형화 또는 감마 인코딩이 적용되지 않습니다. RGB와 L*a*b* 색 공간 간 변환 시 감마가 적용되지 않습니다. (2번과 동일) 입력
5. 입력값을 선형화(데이터 적합), 행렬 적용, CS 감마 인코딩 적용(상당히 정확함) 3차 다항식 피팅 (Matlab의 polyfit 함수)을 사용하여 이미지를 선형화하고, 이를 통해 회색조 패치 픽셀 레벨 L 을 구합니다. 그런 다음 CCM을 계산하고 색 공간 감마로 인코딩합니다. 이 방법은 종종 좋은 결과를 제공합니다. polyval( P , input), 여기서 P 는 L 에 맞춘 3차 다항식입니다.
6. 입력값을 선형화(데이터 적합), 행렬 적용, 그리고 역선형화(데이터 적합) 5번과 동일하지만, 최적화 후 이미지의 톤 곡선이 원래대로 복원됩니다. 5번과 동일합니다.
7. 감마(아래 참조)를 사용하여 입력을 선형화하고, 행렬을 적용한 다음, CS 감마 인코딩을 적용합니다. 컬러 차트에 회색조 패턴이 있는 경우 흑백 밀도 플롯에서 얻을 수 있는 감마 값을 수동으로 입력합니다. 이 방법은 측정된 감마 값이 예상 색 공간 감마 또는 1(선형 RAW 변환의 경우)과 다른 경우가 많은데, 특히 이 방법을 사용하면 탁월한 결과를 얻을 수 있습니다. 이 설정은 입력 이미지의 감마 값이 표준 색 공간 감마(일반적으로 1/2.2) 또는 선형(1)과 다른 경우 특히 유용합니다. 입력 1/감마
8. 로그 기울기를 사용하여 선형화(아래 Log ColorSpace 참조), 행렬 적용 후 감마 인코딩(CS)을 수행합니다.

로그 색 공간(영화에서 가끔 사용되지만 스틸 사진에서는 사용되지 않음)은 근사 인코딩 방정식 O = max(1+A log 10 (O L ), 0) 및 역수(선형화용) O L = 10^((O-1)/A)로 특징지어집니다. 여기서 A 는 로그 기울기 이며, 색상/톤 대화형 모듈의 흑백 밀도 및 화이트 밸런스 표시에서 확인할 수 있습니다. 로그 인코딩 색 공간은 픽셀 대 입력 밀도 옵션(4.0 버전에서 새로 추가됨)을 선택했을 때 대략 직선 응답을 보이며, 감마 인코딩 색 공간은 기존의 로그(픽셀) 대 입력 밀도 옵션을 선택했을 때 대략 직선 응답을 보입니다.

9. 선형화(감마 다항식 데이터 적합), 행렬 적용, CS 감마 인코딩 적용. 회색조 패치 레벨 L 의 log 10 에 대한 3차 다항식 적합 P를 사용하여 이미지를 선형화합니다. CCM을 계산한 다음 색 공간 감마로 인코딩합니다. 이는 감마 인코딩의 다항식 변형입니다. 이 방법은 (A) 입력 이미지 인코딩에 대한 정보가 필요하지 않고 (B) 다양한 이미지에 대해 가장 정확한 결과를 제공하기 때문에 권장됩니다. polyval( P ,log 10 (input)), 여기서 P 는 log 10 ( L )에 맞는 3차 다항식입니다.

참고: Rec. 709 색 공간은 16에서 235(총 255) 사이의 값을 허용하며, 선형화는 16-235 값을 전체 0-1(내부) 범위로 매핑하고, 역선형화는 0-1 값을 다시 16-235 값으로 매핑합니다. 이미지는 전체 범위로 표시됩니다.

  • 감마 (선형화 설정 7: 입력 감마를 사용하여 선형화... 에서만 활성화됨). 회색조 스텝 차트(대부분의 색상표에 포함되어 있으며 흑백 밀도 플롯에 표시됨)에서 측정한 감마 값을 수동으로 입력합니다.
  • 크로마 배율(참고용)은 일반적으로 1입니다. 더 채도가 높은 색상을 원하면 값을 높이고, 더 낮은 색상을 원하면 값을 낮추세요. 경우에 따라 1.05 또는 1.1로 높이면 결과가 개선될 수 있습니다.
  • 최적화 제약 조건
    • 제약 조건이 없습니다. 이것이 기본 설정이며, 타당한 이유가 있을 때만 변경해야 합니다.
    • 행들의 합이 1입니다.
    • 각 열의 합이 1이 됩니다. 이렇게 하면 화이트 밸런스가 유지됩니다.
  • 계산 세부 정보 두 가지 유형의 계산이 가능합니다. (1) RGB 입력 에서 RGB 출력 으로 직접 변환, (2) RGB 입력 에서 XYZ(간접적으로 RGB 출력 으로 변환). 두 경우 모두 최적화 도구를 사용합니다. 첫 번째 추측값으로 시작한 다음 선택한 오류 측정값의 최소값이 발견될 때까지 최적화 도구가 값을 조정합니다.
    • RGB 행렬을 직접 계산합니다 (기존 알고리즘). 먼저 RGB 입력 에서 RGB 출력으로 의 행렬에 대한 추측값을 설정한 다음, RGB 출력 에서 L*a*b* 출력을 찾습니다. 최적화 프로그램의 제어 하에 행렬을 조정하여 색상 오차(L*a*b* 출력 과 기준값 사이의 오차, 기준값이 1이 아닌 경우 색차 승수로 조정됨)를 최소화합니다.
    • XYZ 행렬 및 xy 기본색 계산 (새로운 알고리즘) 먼저 RGB 입력 값을 XYZ 행렬로 변환하기 위한 대략적인 추정값을 사용합니다(sRGB 계수 사용). 그런 다음 XYZ 값을 L*a*b*로 변환하고, 선택한 오차 지표가 최소화될 때까지 최적화 프로그램의 제어 하에 행렬을 조정합니다. 최적화가 완료되면 XYZ 값을 RGB 출력값 으로 변환합니다. RGB-XYZ 행렬과 RGB-RGB 행렬 모두 계산되어 CSV 및 JSON 출력 파일에 포함됩니다.
  • 참조 파일 ( 색상/톤 대화형 창, 색상 매트릭스 창이 아님 )에는 최적화에 사용되는 이상적인 차트 L*a*b* 값이 포함되어 있습니다. 일반적으로 차트 패치에 대해 색차계로 측정된 L*a*b* 값이 포함됩니다. 기본값의 경우 항상 그렇고 참조 파일의 경우에도 대개 그렇지만, 아래의 이미지 일치 에서 설명하는 것처럼 특정 "모양"을 원하는 경우 참조 파일에 다른 값이 포함될 수 있습니다.

이미지 일치시키기 — "골드 스탠다드" 이미지 사용

고품질 색상(흔히 " 골드 스탠다드 "라고 함)을 가진 이미지를 CCM 계산의 기준(대상)으로 사용하여 다른 이미지들이 최대한 유사하게 색상이 표현되도록 하려면, 색상/톤 대화형 창에서 파일 > L*a*b* 결과를 CSV 참조로 저장하기 를 클릭하여 해당 이미지의 L*a*b* 값을 지정된 이름 의 파일로 저장할 수 있습니다 . 그런 다음 참조 파일 상자를 클릭하고 LAB 데이터 파일을 선택한 후 저장된 파일을 선택하여 이 파일을 참조 파일로 사용할 수 있습니다.

합격/불합격 기준에 골드 스탠다드 L*a*b* 값을 사용하는 데에는 미묘하지만 중요한 이점이 있습니다. 복잡한 이유(L*a*b* 색 공간의 기반이 되는 인간의 눈이 카메라와 다른 반응을 보이기 때문)로 인해 삼색 이미지는 이상적인 L*a*b* 값과 정확히 일치할 수 없습니다. 최소 평균 ΔE2000 값 은 일반적으로 약 3입니다 . 하지만 골드 스탠다드 L*a*b* 값과 정확히 일치하는 결과를 얻을 수 있습니다. 따라서 색차 측정값은 색상 일치도를 훨씬 더 잘 나타내는 지표가 됩니다.

검사표 이미지를 획득하세요

구도 설정 — 차트가 프레임을 가득 채울 필요는 없습니다. 특히 광량 감소가 심한 카메라(광각 렌즈에서 흔히 나타나는 배럴 왜곡 현상)의 경우 더욱 그렇습니다. 대부분의 경우(화소 수가 매우 적은 카메라 제외) 프레임의 중앙 1/3 지점(선형 거리 기준)에 차트를 배치하는 것으로 충분합니다.

배경 — 프레임 내부 또는 주변의 배경에 밝은 조명이 있으면 그림자를 흐리게 하는 플레어 현상이 발생하여 정확한 색 보정이 어려워지므로 피해야 합니다. 이상적인 배경은 중성(반사율 약 18%)에서 짙은 회색이지만, CCM 계산 전에 색 보정을 적용하지 않는 한 배경색은 큰 영향을 미치지 않습니다.

이미지 처리 — 가능하면 CCM 계산 전 이미지 처리는 최소화해야 합니다. 색상을 조정하거나 이미지를 색 공간으로 변환하면 정확도가 떨어집니다. (CCM이 바로 이러한 작업을 수행합니다.) 로컬 톤 매핑은 계산 결과를 완전히 망가뜨리므로 피해야 합니다.

포화도 — 가능하면 패치가 포화되지 않도록 주의하십시오. 패치가 포화된 경우, 즉 채널 중 하나라도 비트 심도에 따른 최대값의 99%를 초과하는 평균 픽셀 레벨(예: 비트 심도 8의 경우 255, 비트 심도 16의 경우 65535)을 갖는 경우, 해당 패치는 최적화에서 제외되고 분할 보기에서 "Sat" 으로 표시됩니다. 특히 세 채널 중 하나만 포화된 경우(아래 그림 참조), 패치가 포화되었는지 시각적으로 명확하게 확인하기 어려울 수 있습니다. 포화된 패치는 행렬을 적용했을 때 매우 이상하게 보일 수 있습니다(아래 그림 참조). (이는 버그처럼 보일 수 있지만, 아래 설명처럼 버그가 아닙니다.)

컬러체커_포화_소형 포화

오른쪽에는 포화된 부분 (4번째 행, 왼쪽) 이 있는 이미지가 나와 있습니다. 녹색 채널만 포화되어 있어서 잘 보이지 않습니다. 하지만 아래에 표시된 밀도 응답 곡선( Color/Tone Interactive 또는 Color/Tone Auto 에서 확인 가능)을 보면 확연히 알 수 있습니다. 녹색 채널은 최대 노출에서 포화되고, 녹색 곡선의 기울기는 최대 노출 바로 아래에서 급격히 떨어집니다.

그 결과, 녹색 채널은 포화되지 않았을 때보다 (다른 패치에 비해) 픽셀 레벨이 더 낮아집니다.

컬러체커_포화도_밀도 컬러체커_포화도_보정됨 왼쪽 아래 포화된 부분(아래 그림 참조 - 마젠타색!)의 보정된 값이 잘못된 이유는 포화된 녹색 채널 값이 포화되지 않았을 때보다 낮기 때문입니다.

참고: 포화된 영역은 행렬 계산에 포함되지 않습니다. 포화된 영역을 피하는 것이 좋지만, 계산된 행렬에 큰 영향을 미치지는 않습니다.

Imatest는 포화된 픽셀을 다음과 같이 처리합니다( Imatest 5.0 이상 버전). 입력 파일에서 R, G 또는 B 픽셀이 포화된 경우(정규화된 데이터에서 값이 1인 경우), 행렬을 적용한 후에도 포화된 값을 유지합니다. 즉, 포화된 (R, G 또는 B) 픽셀에는 행렬이 적용되지 않습니다 . 이 기능은 아래 샘플 코드의 다음 줄을 통해 구현됩니다.

correctedRGB(linearRGB==1) = 1;

오른쪽 이미지는 이러한 보정의 결과를 보여줍니다. 왼쪽 아래 물병의 청록색 하이라이트는 채도 보정을 하지 않은 결과입니다.

CCM이 아래 이미지에 적용되었습니다.
왼쪽은 채도 보정을 하지 않았고, 오른쪽은 보정을 했습니다.

카메라에도 비슷한 절차가 적용됩니다. 하지만 포화 영역의 경계 부분에서는 완벽한 결과를 얻을 수 없으며, 종종 "보라색 테두리" 현상이 나타납니다. ( 위키피디아 의 설명은 잘못되었습니다. 수정해 보겠습니다.)

색상 보정 행렬을 계산하려면,

  • 색상 보정(행렬 계산) 버튼

    색상/톤 대화형 또는 색상/톤 자동 모드 로 이미지를 엽니다.

  • 흑백 밀도 표시기의 밀도 응답 곡선에서 선형화 설정을 결정하십시오.

  • 컬러 매트릭스 설정을 할 때, 특히 선형화 에 주의하십시오. 선형화는 흑백 밀도 표시와 일치해야 합니다.

  • 색상 보정을 위한 목표값이 포함된 참조 파일을 선택하십시오. 대부분의 경우 표준 기본값이 사용되지만, 분광광도계 측정값을 기반으로 생성한 참조 파일이나 품질이 좋은("골드 스탠다드") 이미지의 L*a*b* 값을 저장한 참조 파일을 입력할 수도 있습니다.

  • 오른쪽에 표시된 '보정 매트릭스' 버튼을 누르세요. 아래와 같이 화면이 변경됩니다. 이상적인(참조) 색상은 각 패치의 왼쪽 상단에, 입력 색상은 오른쪽 상단에, 보정된 색상은 하단에 표시됩니다. 입력 이미지(저희 아카이브에서 가져온 이미지)는 화이트 밸런스가 비교적 좋지 않습니다. 개선 효과는 매우 뛰어납니다.

멀티차트_분할_수정됨 기준, 입력 및 보정된 패치 색상을 보여주는 분할 화면입니다. 드롭다운 메뉴에는 다음이 표시됩니다.
오른쪽의 표시 입력값을 '수정된 값 표시'로 변경하면 [수정값 - 이상적인 값] 통계를 얻을 수 있습니다.

보정 행렬 버튼이 분홍색 배경으로 강조 표시된 ' 행렬 계산됨 '으로 바뀝니다. 이미지 속성이 변경될 때까지(새 이미지, 색 공간, 참조 파일 또는 색 행렬 설정) 보정 행렬을 다시 계산할 수 없습니다. 바로 왼쪽에 있는 '입력 표시 (또는 보정됨 )' 드롭다운 메뉴가 활성화됩니다. 두 가지 옵션 중 하나를 선택할 수 있습니다.

표시 입력 대부분의 디스플레이에서는 색상 차이(입력값 - 이상적인 값)가 표시되며, [입력값 - 이상적인 값] 색상 차이가 왼쪽 하단 텍스트에 표시됩니다. 단, 의사색상 색상 차이 및 분할 색상 표시에서는 이 설정의 영향을 받지 않으며, 이 경우 하단에 (보정값 - 이상적인 값)이 표시됩니다.
표시가 수정되었습니다 색상/톤 인터랙티브_보정된_델타 대부분의 디스플레이에서는 색상 차이(보정값 - 이상적인 값)가 표시되며, [보정값 - 이상적인 값] 색상 차이가 왼쪽 하단 텍스트에 표시됩니다. 다음은 위 사례에 대한 보정된 색상 차이입니다.

EXIF 데이터 및 색상 매트릭스 표시에는 결과 요약이 포함되어 있습니다.

색상/톤 Interactive_exif_colorcorr Exif 및 색상 매트릭스 보기

색 보정 행렬, 결과 요약, 그리고 [입력 - 이상적인 값] 및 [보정된 값 - 이상적인 값] 색차 요약이 표시됩니다. 초기 및 최종 오차 값은 선택된 측정 기준(이 경우 L*>10 및 L* > 10인 모든 패치에 대한 Delta-E 94의 제곱합)이 얼마나 보정되었는지를 보여줍니다.

원본 이미지 결과

다음은 RAW 이미지에 대한 색상 행렬 최적화 예시입니다. 원본 이미지는 Panasonic GF1 Micro Four-Thirds(미러리스 렌즈 교환식) 카메라로 RAW(RW2) 이미지로 촬영되었으며(참조용으로 JPEG 이미지도 촬영됨), dcraw 프로그램을 사용하여 수동 설정, 일반 RAW 변환, 출력 감마 = 1.0(선형), 자동 화이트 레벨 끄기(체크 해제), 화이트 밸런스 = 없음, 출력 색 공간 = RAW로 변환했습니다. 이러한 설정은 디모자이킹 외에는 어떠한 이미지 처리도 적용하지 않았습니다.

해당 파일은 거의 완벽하게 선형적이었습니다. 음색 응답 곡선은 감마 값이 1.01인 직선이었습니다. 선형화 옵션 3 ( 선형 입력을 가정하고, 행렬을 적용한 다음 CS 감마 인코딩을 적용 )이 선택되었습니다.

출력 결과는 거의 완벽에 가깝습니다. 3색 센서로 얻을 수 있는 최상의 결과라고 할 수 있죠. 이는 특성이 잘 파악된 RAW 이미지를 사용할 때 기대할 수 있는 일반적인 결과입니다. 저희는 최근(2014년 5월) RAW 출력을 지원하는 4대의 카메라(Panasonic Lumix LX7 및 G3, Canon EOS-6D, Nikon D800E)를 사용하여 6가지 조명 조건(2700K 및 5000K LED, 3500K 및 5000K CFL, 일반(2700K) 백열등, 4700K(측정값 4000K) SoLux(이색 필터) 할로겐 램프)에서 계산 방식을 테스트한 결과, 놀랍도록 일관된 색 보정 이미지를 얻을 수 있었습니다.

컬러 매트릭스_파나소닉_로우 선형 원본 파일(감마 = 1, 색상 보정 없음)에서 얻은 결과

선형 행렬 결과 Color/Tone Interactive 및 Color/Tone Auto는 입력(카메라) 색 공간의 x, y 및 X, YZ 기본색 을 계산하고, 이를 표시(오른쪽 하단 세 줄)하며, CSV 및 JSON 출력 파일에 저장할 수 있습니다. 이 계산은 입력 이미지가 선형(감마 곡선 없이 RAW에서 변환)이거나 ACES 색 공간일 때 가장 잘 작동합니다. 신호 처리 계수를 계산하는 데 유용할 수 있습니다. x, y 기본색은 카메라의 색 영역과는 관련이 없습니다. 이 기본색은 R, G, B = {max, 0, 0}, {0, max, 0}, [0, 0, max}에 해당하는 x 및 y 값인데, 센서의 색상 간섭으로 인해 실제로는 얻을 수 없으며 실제 색상의 스펙트럼 범위를 벗어나는 경우가 많습니다.

색상 차이( ΔExx 및 ΔCxx ) 는 얼마나 정확해야 할까요?

삼색 카메라(대략 빨강 , 초록 , 파랑 ; RGB )의 컬러 필터 스펙트럼이 사람 눈의 필터 스펙트럼(대략 노랑-주황 , 초록 , 파랑 )과 다르기 때문에 카메라가 완벽할 수는 없습니다. 좋은 색 재현을 위해서는 색상을 RGB로 변환해야 하는데, 이 과정에서 신호 대 잡음비(SNR)가 크게 저하되기 때문에 카메라가 사람의 눈을 완벽하게 모방할 수는 없습니다.

위 예시의 수치, ΔE * ab ≅ 5, ΔE * 94 , 5ΔE00 ≅ 3 은 삼색 카메라(모든 표준 컬러 카메라 포함)에서 지금까지 본 것 중 최고 수준입니다. ΔExx < 1 인 이보다 더 나은 결과를 보인 경우는 최소 7개 채널을 가진 다중 스펙트럼 카메라에서뿐이었습니다.

Color/Tone Interactive에서 매트릭스 저장

매트릭스를 파일(CSV 형식)로 저장하려면 [파일] , [색상 매트릭스를 파일로 저장 ]을 클릭한 다음 파일 이름을 선택하십시오.

파일 메뉴 에서 [색상 행렬을 클립보드에 복사] 를 클릭하면 행렬을 클립보드에 복사할 수 있습니다. 클립보드에 복사한 내용은 이미지 처리 모듈의 [CCM 설정] 창에 붙여넣을 수 있습니다.

색상/톤 대화형 창 하단의 "데이터 저장"을 누르면 매트릭스가 CSV 출력 파일(기본적으로 이미지 파일 폴더의 하위 폴더인 Results에 저장됨)에 포함됩니다.

CSV 파일 색상 보정 매트릭스

매트릭스를 적용하여 이미지 색상을 보정합니다.

Color/Tone Interactive 에서 CCM이 계산되면 해당 행렬을 사용하여 임의의 이미지를 보정할 수 있습니다. 여기서는 세 가지 접근 방식을 설명합니다.

1. 색상/톤 인터랙티브에서 매트릭스를 적용합니다.

CCM 계산이 완료되면 색상/톤 대화형 창 오른쪽의 표시 상자에서 13. 읽기 - 색상 보정 - 이미지 저장을 선택합니다.

왼쪽 초기 화면에는 "수정할 이미지를 읽으려면 누르세요"라는 메시지가 표시되고, 수정된 이미지가 괜찮아 보이면 "수정된 이미지 저장"을 누르세요. " 수정할 이미지를 읽으려면 누르세요" 또는 " 현재 이미지 수정"을 누를 수 있습니다.

오른쪽 예시에서는 Colorchecker와 Gallery 이미지에 (디지털) CC20C(시안) 필터를 적용했습니다. 필터가 적용된 Colorchecker 이미지에 대해 색상 보정 행렬(CCM)을 계산한 후, [13. 읽기 - 색상 보정...] 을 선택했습니다. 필터가 적용된 Gallery 이미지를 불러와 CCM을 사용하여 즉시 보정했습니다. 보정 전 이미지와 보정 후 이미지는 각각 오른쪽 상단과 오른쪽 하단에 표시됩니다.

수정된 이미지를 저장하면 수정된 이미지가 저장됩니다.

멀티차트_벡터스코프 미리보기
보정 전 이미지와 보정 후 이미지

이 방법은 단일 이미지에만 적용 가능하며, 일괄 처리에는 사용할 수 없습니다.

2. Imatest 이미지 처리 모듈에서 행렬을 적용합니다.

Imatest 5.0 이상 버전에서는 이미지 처리 모듈을 사용하여 개별 이미지 또는 이미지 배치에 색상 보정 행렬(위에서 설명한 대로 색상/톤 인터랙티브 에서 CSV 파일로 저장)을 적용할 수 있습니다. 이렇게 하려면 이미지 처리 창 왼쪽에 있는 CCM(색상 행렬) 확인란을 선택하십시오. 이 행렬은 고도로 비선형적인 톤 매핑 및 양방향 필터 작업 전에 적용됩니다.

CCM 설정은 체크박스 오른쪽에 있는 'CCM 설정' 버튼을 클릭하여 입력하거나 확인할 수 있습니다. 주요 설정에는 선형화(위에서 설명), 색 공간, 입력 감마(선형화 설정 하나에 해당), 행렬 승수(이미지를 밝게 또는 어둡게 할 수 있으며 일반적으로 1로 유지됨)가 포함됩니다.

이미지 처리를 위한 CCM 설정

이미지 처리는 단일 이미지 대신 여러 이미지를 선택하는 것만으로 이미지 배치 작업을 수행할 수 있습니다. 이미지 배치가 선택된 경우, root_file_name.ext 형식의 파일이 자동으로 root_file_name - ext -improc.png 형식으로 저장됩니다.

3. MATLAB 코드를 사용하여 행렬을 외부에서 적용합니다.

컬러체크_1_로우_1004W
보정되지 않은 이미지

CCM은 Imatest 외부에서도 적용할 수 있습니다. MATLAB을 사용하여 행렬을 적용하는 방법을 예시로 보여드리겠습니다. MATLAB이 있다면 직접 실행해 볼 수 있으며, 없다면 C나 Python과 같은 다른 언어로 변환하여 실행할 수 있습니다.

오른쪽에 표시된 보정되지 않은 24패치 컬러체커 이미지는 색상 보정 행렬 계산의 입력으로 사용됩니다. 이 이미지는 원본 이미지를 색상 보정 없이 JPEG 파일로 변환한 후 해상도를 낮춘 것입니다. 이미지를 클릭(또는 마우스 오른쪽 버튼 클릭)하여 다운로드할 수 있습니다.

이 이미지는 Color/Tone Interactive 로 불러와진 후 다음 설정으로 색상 보정을 거쳤습니다.

최적화: 델타-E 00

선형화: 입력이 선형이라고 가정하고, 행렬을 적용한 다음, 색 공간 감마 인코딩을 적용합니다.

가중치: 2. 주요 내용 강조

크로마 배율: 1.06

XYZ 행렬을 계산하세요...

다음은 보정 결과입니다. 보정된 색상은 매우 정확하며, 이미 처리된 이미지에 행렬을 적용했을 때 일반적으로 얻는 결과보다 훨씬 좋습니다(ΔE ab 평균 = 5.32, ΔE 00 평균 = 3.11).

컬러체크_1_멀티차트_코르르

색상 보정 행렬은 [파일] > [색상 행렬 클립보드에 복사]를 클릭한 다음 이 페이지에 직접 붙여넣어 얻었습니다. 필요한 경우 이 페이지에서 복사할 수 있습니다.

1.48663 -0.192007 0.033443
-0.612018 2.03673 -0.796356
-0.367863 -0.580001 3.04927

컬러체크_1_수정된_표시
수정된 이미지

이미지 파일에 CCM을 적용하는 프로그램은 아래 상자에 있습니다. 이 프로그램은 2020년 7월에 업데이트되어 간단한 그래픽 사용자 인터페이스를 통해 훨씬 쉽게 실행할 수 있게 되었습니다. 가변 보정 RGB를 포함하는 핵심 계산은 사용자 정의 코드를 개발하는 데 템플릿으로 사용할 수 있습니다.

프로그램을 시스템에 로드하려면 상자 안의 텍스트를 선택하고 클립보드에 복사(Ctrl+C)한 다음 Matlab(또는 다른) 편집기에 붙여넣고 m 파일( ccm_test.m )로 저장하십시오.

ccm_test를 실행하기 전에 색상/톤 모듈을 사용하여 CCM을 계산해야 합니다. 테스트할 이미지가 없는 경우, 보정되지 않은 이미지(위)를 다운로드하고 3×3 CCM(위 참조)을 클립보드에 복사하세요.

MATLAB 명령 창에서 ccm_test를 실행하려면 다음과 같이 하십시오.

  1. 가능하다면 CCM을 클립보드에 복사하세요(색상/톤 모듈의 파일 드롭다운 메뉴를 사용하거나 텍스트 파일에서 Ctrl+C를 누르세요). 브라우저 창에서 위의 3x3 CCM 텍스트를 선택한 다음 Ctrl+C를 눌러 복사할 수도 있습니다.
  2. ccm_test를 입력하세요.
  3. 기본 안내가 포함된 창이 열립니다. 확인을 클릭하세요.
  4. 좁은 창문이 열립니다.
    1. 감마 값을 입력하십시오(보정되지 않은 파일의 경우 1을 입력합니다(위 참조): 색상/톤 대화형 의 밀도 플롯에서 감마 값을 확인할 수 있습니다).
    2. CCM을 입력하세요(클립보드에서 붙여넣는 것이 가장 쉽습니다).
  5. 이미지 파일을 찾아 열 수 있는 창이 열립니다.
  6. 수정된 이미지가 나타납니다. 원하시면 저장할 수 있습니다.

오른쪽에는 출력 이미지(위의 입력 이미지를 보정한 이미지)가 표시됩니다.

function ccm_test
% Test program for applying Color Correction matrix.
% Output for display gamma = 2.2 — sRGB and Adobe RGB color spaces.

uiwait(msgbox(['We recommend that you calculate the Color Correction Matrix (CCM),' newline ...
'and copy Color Matrix to the clipboard before running ccm_test.' newline newline ...
'After you click OK, two input dialog boxes will open.' newline newline ...
'1. a narrow box for entering the encoding gamma and entering or pasting the CCM.' newline ...
'2. A box for browsing and opening the image file to be corrected by the CCM.'], ...
'ccm_test instructions'));

answer = inputdlg({'Enter encoding gamma (typically 0.5-1)'; 'Paste or enter the 3×3 CCM into this box'}, ...
'Enter gamma and CCM', [1 20; 3 20]);
gamma = str2num(answer{1}); %#ok
ccmnum = str2num(answer{2}); %#ok
szcc = size(ccmnum); % Keep for diagnostics.
if isempty(answer{2}) || szcc(1)<3 || szcc(1)>4 || szcc(2)<3 || szcc(2)>4
ans2 = answer{2}; % sz2 = size(ans2),
ccmnum = [str2num(ans2(1,:)); str2num(ans2(2,:)); str2num(ans2(3,:))]
gamtemp = str2num(ans2(6,:)); %#ok
if isempty(answer{1}) && ~isempty(gamtemp)
gamma = gamtemp;
end
if isempty(ccmnum)
disp(['CCM is empty or badly-sized– try again.' newline 'szcc = ' num2str(szcc)]); 
return; 
end
end

[im,path] = uigetfile('*.*','Enter the image file to be corrected by the CCM'); % Find image file 
imagefile = fullfile(path,im);
if im==0 | isempty(path) | isempty(im), return; end %#ok

imageRGB = imread(imagefile); % Read the image file.
imtype = class(imageRGB); % Image type: typically uint8 or uint16.
imageRGB = double(imageRGB)/double(intmax(imtype)); % Normalize to maximum for image type.
figure; image(imageRGB);
title(['Original image: gamma = ' num2str(gamma)]); % Works without Image Processing Toolbox.

linearRGB = imageRGB.^(1/gamma); % Linearize the image (apply inverse of encoding gamma).

% Change to 2D to apply matrix; then change back.
[my, mx, mc] = size(linearRGB); % rows, columns, colors (3)
linearRGB = reshape(linearRGB,my*mx,mc); 
correctedRGB = linearRGB*ccmnum; 
correctedRGB = min(correctedRGB,1); correctedRGB = max(correctedRGB,0); % Place limits on output.
correctedRGB = correctedRGB.^(1/2.2); % Apply gamma for sRGB, Adobe RGB color space.
% Deal with saturated pixels. Not perfect, but this is what cameras do. Related to “purple fringing”.
correctedRGB(linearRGB==1) = 1; % Don't change saturated pixels. (We don't know HOW saturated.)
correctedRGB = reshape(correctedRGB, my, mx, mc);

figure; image(correctedRGB); title('Corrected image');

tosave = questdlg('Do you want to save the corrected image?','Save the corrected image?', 'Yes','No','No');
if strcmpi(tosave,'Yes')
[path,imroot,ext] = fileparts(imagefile);
imsave = [imroot '-CCM-corr' ext];
sfile = fullfile(path,imsave);
[savef, savepath] = uiputfile(fullfile(path,'*.*'), ...
'Enter a file name to save the CCM-corrected results; empty otherwise', sfile);
savefile = fullfile(savepath,savef);
imwrite(correctedRGB, savefile);
disp(['Results written to ' savefile]);
end

모래밭

계산의 배경 지식 중 일부는 Stephen Wolf의"디지털 스틸 및 비디오 이미징 시스템을 위한 색상 보정 매트릭스" 에서 찾을 수 있지만, Imatest 계산은 여러 면에서 다릅니다. 이상치 문제는 없으며 표준 색차 측정 기준 중 하나를 사용하여 최적화가 수행됩니다.