PHOTOSHOT / DEVELOPMENT JOURNAL
기준값 하나로
검정과 흰색 나누기
임계값은 픽셀의 밝기를 숫자 하나로 구한 뒤, 기준 이상이면 흰색으로 바꾸는 기능입니다. 원래 색을 어떤 비율로 밝기에 반영하는지가 결과를 결정합니다.


14편의 예제는 기준값 152, 불투명도 100%입니다. 편집 화면에서는 같은 기능이 ‘한계값’으로 표시됩니다.
슬라이더와 히스토그램을 함께 보여줍니다
기준값은 0~255 범위이며 기본값은 128입니다. 예제에서는 96·128·152 순으로 올렸습니다. 기준을 올릴수록 흰색으로 남으려면 더 밝아야 합니다.
패널에는 밝기 분포와 현재 기준값의 위치를 함께 표시했습니다. 히스토그램의 높이는 로그값으로 압축해 작은 분포도 볼 수 있게 했습니다. 공통 히스토그램은 0.2126·0.7152·0.0722 가중치를 사용하고, 임계값 판정은 아래의 0.3·0.59·0.11 식을 사용합니다. 따라서 유채색에서 그래프의 위치와 실제 판정값은 정확히 일치하지 않을 수 있습니다.
위 사진은 기준 152의 최종 결과입니다. 배경의 어두운 영역은 검정으로, 흰 옷의 밝은 영역은 흰색으로 남습니다. 원본의 중간톤 정보는 이 출력에 그대로 남지 않습니다.
색마다 다른 비율로 밝기에 반영합니다
새 레이어는 8비트 R·G·B에 각각 0.3·0.59·0.11을 곱해 더하고, 정수로 반올림합니다. 이 숫자를 기준값과 비교합니다.
const value = Math.round(
0.3 * R + 0.59 * G + 0.11 * B
);
const output = value >= threshold ? 1 : 0;
out.fill(output);이 식은 화면의 RGB 값에서 계산한 가중 밝기입니다. sRGB를 선형화한 뒤 물리적인 휘도를 구하는 계산과는 구분해야 합니다.
R·G·B가 같은 회색은 그 값이 그대로 판정값이 됩니다. 순수 빨강·초록·파랑은 가장 큰 채널값이 모두 255여도 판정값은 서로 다릅니다.
기준과 같은 값은 흰색으로 처리합니다
비교 연산을 >=로 정했기 때문에 기준 바로 아래는 검정이고, 기준과 같은 값부터 흰색입니다. 이 경계는 한 값 차이로 바뀌므로 반올림 순서도 함께 명시했습니다.
표는 기준값 128에서 회색 입력을 실제 함수로 처리한 결과입니다. 127과 128이 어떻게 나뉘는지 확인할 수 있습니다.
결과가 화면에서 회색처럼 보일 때는 원본과 섞는 불투명도, 마스크, 화면 축소의 보간도 확인해야 합니다. 판정 함수 자체의 출력은 세 채널 모두 0 또는 255입니다.
| 입력 회색 | 판정값 | 최종 RGB |
|---|---|---|
| 126 | 126 | 0 · 0 · 0 |
| 127 | 127 | 0 · 0 · 0 |
| 128 | 128 | 255 · 255 · 255 |
| 129 | 129 | 255 · 255 · 255 |
흑백 레이어와 임계값을 구분했습니다
08편 흑백은 원래 색에 따라 서로 다른 회색 밝기를 남깁니다. 임계값은 계산한 밝기를 두 값으로 다시 나눕니다. 이름은 둘 다 흑백 결과를 떠올리게 하지만 출력 정보량은 다릅니다.
이 계산도 공통 조정 레이어 경로를 사용합니다. 완전히 투명한 픽셀은 건너뛰고, 나머지 픽셀은 원래 알파를 유지합니다. 사진의 실루엣이나 대비 구조를 점검하는 용도로 사용할 수 있지만, 흰색 영역을 자동으로 투명하게 만드는 기능은 아닙니다.
| 레이어 | 출력의 기준 |
|---|---|
| 흑백 | 원래 색상별 가중치 → 연속 회색 |
| 포스터화 | R·G·B 각각 → 정해진 단계 |
| 임계값 | 가중 밝기 → 검정 또는 흰색 |
구현 코드와 참고 자료
- 가중 밝기·반올림·경계 판정
Photoshot v0.16.0 · 실제 구현과 테스트 - 한계값 히스토그램과 위치 표시
Photoshot v0.16.0 · 실제 구현과 테스트 - 투명 픽셀 건너뛰기와 최종 합성
Photoshot v0.16.0 · 실제 구현과 테스트 - Adobe · Threshold의 기능 설명
기능 의미를 비교하기 위한 참고 문서입니다. Adobe의 내부 구현 코드 출처는 아닙니다.
