Digital Image
꽤나 반가운 이름들이 나옵니다. 미러리스 카메라를 가지고 있는 저는 이미지 센서부터 비네팅 등 여러 사진 용어가 나올 때 이미지에 대한 공부에 꽤나 빨리 친해지겠다는 생각이 들었어요.
Image Sensor

이미지는 이미지 센서가 장착된 장치에 의해 만들어집니다. 옛날에는 DSLR 카메라로 촬여했고, 요즘은 대부분 스마트폰으로 촬영하죠.
빛의 캡처 과정을 봐볼까요.

이미지 센서는 물체로부터 반사된 빛의 양을 캡쳐하는 장치입니다.
광원(source)에서 빛이 나온다.
빛이 물체의 표면(surface)에서 반사된다.
반사된 빛이 센서(sensor) 또는 눈(eye)에 도달한다.
여기서 핵심은 표면에 반사되어 나온 빛 정보가 렌즈를 통과하고, 이미지 센서(CCD 또는 CMOS)를 거쳐 이미지가 만들어진다는 겁니다.
CCD와 CMOS
빛이 표면에서 반사되어 렌즈(Lens)를 통과한 뒤 CCD 센서에 도달하고, 최종적으로 이미지가 생성됩니다.

이 과정에서 두 가지 현상이 발생해요.
Vignetting(비네팅)
렌즈에 의해 발생하는 주변부 어두워지는 현상이에요.
Radiometric Response Function
CCD 센서에 의한 밝기 변환 특성을 말합니다.
두 가지 센서의 유형은 아래와 같습니다.
CCD(Charge Coupled Device)
고급 DSLR 카메라에 주로 사용됩니다.
CMOS(Complementary Metal-Oxide Semiconductor)
스마트폰에 주로 사용되긴 하지만 요즘은 스마트폰 센서도 충분히 좋죠.
CCD vs CMOS
― 글로벌 셔터 vs 롤링셔터

CCD와 CMOS의 핵심 차이는 셔터 방식이라고 할 수 있어요.
글로벌 셔터(CCD - Mechanical Global Shutter)
- 모든 라인(줄)이 동시에 빛을 받아들인다(Integration).
- Line 1 부터 Line n까지 동일한 시간 범위에서 동시에 촬영
- 따라서 이미지 전체가 같은 순간의 장면을 담는다.
롤링 셔터(CMOS - Electronic Rolling Shutter)
- 각 라인이 순차적으로 빛을 받아들인다.
- Line 1이 촬영되는 시점과 Line n이 촬영되는 시점에 미세한 시간차가 존재
- 위쪽 줄과 아래쪽 줄이 미묘하게 다른 시점의 장면을 담게 된다.
실제로 어떤 영향을 보일까요?
정지된 대상이나 천천히 움직이는 것을 촬영할 때는 문제 없습니다.
그러나 빠르게 움직이는 피사체나 카메라를 빠르게 흔들 때는 왜곡이 발생할 수 있어요.
Rolling Shutter
― 왜곡현상

롤링 셔터로 인한 대표적인 왜곡이 Skew(기울어짐) 입니다.
예를 들어볼께요.
건물을 촬영할 때 카메라를 좌우로 심하게 흔들면, 실제로는 수직인 건물이 기울어져 보입니다. 이는 이미지 위쪽과 아래쪽이 서로 다른 시간에 촬영되기 때문이에요. 빠르게 움직이는 피사체를 촬영하거나 촬영자가 빠르게 움직일 때도 같은 현상이 발생합니다.
이러한 왜곡 현상을 통칭하여 Jelly Effect(젤리 이펙트)라고 부릅니다.
Perspective Projection / 원근 투영
카메라는 3D 세계의 물체를 2D 이미지 평면에 투영하는 과정을 거칩니다.

- Camera origin(카메라 원점)에서 x, y, z축이 정의된다.
- 3D 공간의 물체가 Image plane(이미지 평면)에 투영된다.
- 센서 어레이의 각 지점에서 입사하는 빛의 양이 기록된다.

여기서 포인트는 3D 물체가 2D 센서 어레이에 투영되고, 센서의 각 위치에서 들어오는 빛을 기록하여 이미지가 만들어집니다.
Image - 2D Array of Light

이미지는 빛의 2D 배열이라 할 수 있습니다.
이미지는 본질적으로 행렬(Matrix)과 매우 유사합니다.
픽셀(Pixel)
이미지를 구성하는 가장 작은 단위
- 각 픽셀은 2D 좌표를 가진다 - (행 번호, 열 번호)
- 각 픽셀은 값(Intensity, 밝기)을 가진다.
좌표 체계
- 가장 왼쪽 위가 (0, 0)
- 오른쪽으로 갈수록 열(Column) 인덱스 증가
- 아래로 갈수로고 행(Row) 인덱스 증가(일반 그래프와 반대)
- 행렬의 인덱싱 방식과 동일
하지만 주의할 점이 있어요.
수학에서 y axis는 위로 갈수록 커지지만, 이미지에서는 아래로 갈수록 행 인덱스가 커집니다. 지금도 저는 헷갈리지만 익숙할 때까지 계속 봐야겠죠.

그럼 픽셀값이라는게 뭘까요?
- 높은 픽셀값 = 더 밝다(more light)
- 낮은 픽셀값 = 더 어둡다(less light)
픽셀값에는 범위가 있습니다.
최솟값은 0, 빛이 없다는 것이고 검정색(Black) 이에요.
최댓값은 8비트 이미지 기준으로 255, 센서 한계이고 흰색(White)이에요.
여기서 8비트 이미지 기준이라고 했어요.
일반적인 표현 범위는 아래와 같아요.
[0, 255]: 8비트 이미지, 1 byte에 들어가기 때문에 가장 흔하게 쓰입니다.
[0, 1]: 부동소수점 표현 방식인데, 코딩할 때 자주 사용합니다.
참고로, 8비트 이미지가 가장 일반적이지만, 위성 이미지 등에서는 10비트, 11비트, 12비트도 사용됩니다. 비트 수가 클수록 표현 가능한 밝기 단계가 많아지겠죠. 하지만 그만큼 데이터 용량도 증가합니다.
Image Acquisition Process 이미지 획득 과정

Gonzalez 교과서의 Figure 2.15에서 보여주는 디지털 이미지 획득 과정은 아래와 같습니다.
- 조명원(Illumination source): 에너지(빛)을 방출
- 장면 요소(Scene element): 촬영할 대상 / 피사체
- 이미징 시스템(Imaging system): 렌즈 등의 광학 장치
- 이미지 평면에 투영: 장면이 내부 이미지 평면에 투영
- 디지털화된 이미지(Digitized Image): 최종 출력 이미지
연속적인 실세계의 장면을 이미징 시스템을 통해 디지털 이미지로의 변환 과정을 보여주고 있습니다.
Sensor Array

(a) 왼쪽은 연속 이미지가 센서 어레이에 투영된 모습을 보여주고 있고, (b) 오른쪽은 샘플링과 양자화의 결과물입니다.
연속적인 피사체가 센서 어레이의 격자 위에 투영되고, 각 격자 위치에서만 값을 취하여 디지털 이미지가 만들어집니다.
오른쪽에는 실제 CMOS 센서칩의 사진이 있습니다.
Sampling and Quantization
디지털 이미지를 만들기 위해서 반드시 거치는 두 가지 과정이 있습니다.

Sampling
- 연속적인 공간 좌표를 정수 좌표로 이산화하는 것
- 실제 세계에서는 모든 위치에 값이 있지만, 무한히 많은 값을 저장할 수 없다.
- 무한히 많은 값을 저장할 수 없기 때문에 특정 정수 위치에서만 데이터를 저장
- 즉, 1, 2, 3, 4 ... 같은 정수 좌표에서만 값을 취한다.
0부터 1사이에 무한히 많은 소수점 위치가 있지만, 모든 위치를 기록할 수 없기 때문에 정수 위치에서만 기록하는 겁니다.
Quantization
- 연속적인 밝기 값을 유한한 정수 값으로 변환하는 것
- 실제 밝기가 0.7이어도 소수값으로 저장할 수 없으므로 1로 반올림
- 실제 밝기가 30.2여도 30으로 정수화
- 표현 가능한 값 중 가장 가까운 값으로 매핑하는 과정
디지털 이미지에서는 Sampling(위치의 이산화)과 Quantization(밝기의 이산화) 두 과정이 필수적으로 발생한다. 비트 수가 클수록 Quantization 시 더 정밀한 밝기 표현이 가능하지만, 데이터 용량이 증가합니다.
Image: 2D array of light

흑백 이미지는 결국 큰 행렬. 각 위치에 밝기 값이 들어가 있고, 확대해 보면 픽셀 하나하나의 밝기 차이를 숫자로 확인할 수 있습니다.

How to Record Color?
전자기 스펙트럼

색상은 빛의 파장에 의해 결정됩니다.
가시광선(Visible Light) 영역은 약 400nm(보라색) ~ 700nm(빨간색) 범위입니다.
- 짧은 파장: Cosmic rays → Gamma → X-rays → UV
- 가시광선: 보라색 → 파란색 → 초록색 → 노란색 → 빨간색
- 긴 파장: IR → Microwaves → Radio → Broadcast
이미지가 모든 색을 표현할 수는 없지만(비트 수 제한), 주요 색상의 조합으로 최대한 넓은 범위를 커버합니다.

사람의 눈이 빨간색, 초록색, 파란색 빛을 감지하듯이, 디지털 이미지도 RGB(Red, Green, Blue) 체계를 사용합니다.
RGB Color Cube(색 큐브, 오른쪽 그림)
- 각 축이 R, G, B 값을 나타냄
- 꼭짓점에 주요 색상이 위치
- (0, 0, 0) = Black
- (1, 1, 1) = White
- (1, 0, 0) = Red / (0, 1, 0) = Green / (0, 0, 1) = Blue
- (0, 1, 1) = Cyan / (1, 0, 1) = Magenta / (1, 1, 0) = Yellow
- 대각선 (0, 0, 0) → (1, 1, 1)이 Grayscale(회색조)

Bayer Color Pattern
베이어 컬러 패턴
실제 이미지 센서에서 컬러를 캡쳐하는 방법 원리는 이와 같습니다.
- 센서 위에 색상 필터(Filter layer)가 올려져 있다.
- 빨간색 필터: 빨간 빛만 통과
- 초록색 필터: 초록 빛만 통과
- 파란색 필터: 파란 빛만 통과

Bayer 패턴의 특징
- 초록(Green) 필터가 가장 많습니다. 전체의 약 50%.
- 빨간색과 파란색은 각각 약 25%
- 색상 표현에 있어서 Green이 가장 중요하기 때문에 초록색이 많다.

각 픽셀 위치에서는 R, G, B 중 하나의 색상만 기록됩니다.
베이어 패턴에서 컬러 이미지 생성

베이어 패턴 → 분리된 R, G, B 채널 → 최종 컬러 이미지
- Bayer color pattern: R, G, B가 섞여 있는 하나의 패턴
- R, G, B 채널 분리: 각 채널에는 해당 색상이 기록된 위치만 값이 있고, 나머지는 missing 비어있다.
- Interpolation(보간법): 비어 있는 위치를 주변 값을 이용하여 추정하여 채운다.
- 최종 이미지: R, G, B 채널이 모두 완전한 값을 가지게 되어 컬러 이미지 완성
Interpolation: 특정 위치에서만 값이 있을 때, 주변 값들을 이용하여 빈 위치의 값을 추정하는 방법

컬러 이미지 패치(작은 정사각형 영역)를 뜯어보면
패치(Patch)란?
이미지 전체에서 잘라낸 작은 정사각형(또는 직사각형) 영역
각 채널을 따로따로 보면 흑백 이미지처럼 밝기값만 갖고 있습니다.
Red 채널에서는 빨간색이 강한 영역은 밝고, 약한 영역은 어둡습니다.
Green 채널에서는 초록색이 강한 영역은 밝고, 약한 영역은 어둡습니다.
Blue 채널에서는 파란색이 강한 영역은 밝고, 약한 영역은 어둡습니다.
Color Image - 3D Tensor in Color Space

컬러 이미지의 데이터 구조
- Rows(행): 세로 방향
- Columns(열): 가로 방향
- Channels(채널): 깊이 방향. 0 = R, 1 = G, 2 = B 또는 라이브러리마다 상이.
채널 순서가 항상 RGB인 것은 아니에요.
예를 들어 OpenCV는 BGR 순서를 사용합니다. 사용하는 라이브러리에 따라 채널 순서를 반드시 확인해야 합니다.
컴퓨터의 이미지 저장 방식
컴퓨터 메모리는 기본적으로 1차원 배열입니다.
3D 텐서인 컬러 이미지를 1D 배열로 펼쳐서 저장해야 하죠.
어떤 순서로 펼치느냐에 따라 저장 방식이 달라집니다.
Row Major vs Column Major
'CS & AI > Computer Vision' 카테고리의 다른 글
| [Coursera] CNN - Padding & Stride / Deep Learning Specialization (0) | 2026.05.13 |
|---|---|
| [Coursera] CNN & Computer Vision / Deep Learning Specializaton (0) | 2026.05.05 |
| [Coursera] CNN - Edge Detection / Deep Learning Specialization (0) | 2026.05.05 |
| <영상처리> Histogram Equalization (0) | 2026.03.27 |
| <영상처리> Python과 OpenCV (0) | 2026.03.22 |
나의 성장 드라마
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!