인하대학교 공학대학원(인공지능융합전공)/영상처리

왜 벽돌담이 물결무늬로 찍히는가 — 샘플링과 리컨스트럭션

복리 엔지니어 2026. 10. 2. 01:09
LECTURE NOTE

왜 벽돌담이 물결무늬로 찍히는가 — 샘플링과 리컨스트럭션

디지털 영상처리 5강 — Aliasing, Nyquist-Shannon 정리, Anti-aliasing, 그리고 보간법
🎓 인하대 공학대학원 🖼️ IGZ5017 Digital Image Processing 📐 Sampling · Reconstruction 📅 2026.10.01

지난 시간까지 푸리에 변환과 DFT를 배웠습니다. 이번 시간은 그 지식을 바탕으로 샘플링과 리컨스트럭션을 주파수 도메인에서 이론적으로 이해하는 시간이었습니다. 핵심 질문은 하나입니다 — 디지털로 바꿨다가 다시 되돌릴 때, 원래 신호를 완벽하게 복원할 수 있는가? 답은 “조건이 있다”이고, 그 조건이 Nyquist-Shannon 샘플링 정리입니다.

✓ 수강 메모: 이번 주는 대면 수업 예정이었으나 교수님의 개인 사정으로 동영상 강의로 대체되었습니다. 다음 주는 대면으로 진행됩니다.

01샘플링과 리컨스트럭션 — 전체 그림

카메라에서 벌어지는 일

📷 빛에서 디지털 이미지까지
광원에서 나온 빛이 물체에 닿음 → 카메라 렌즈를 통과 → CMOS 센서에 매핑 → 디지타이제이션(Digitization) → 디지털 이미지

여기서 디지타이제이션 = 샘플링 + 양자화(Quantization)로 요약됩니다.

과정방향의미
샘플링 (Sampling)Continuous → Discrete연속적인 입력을 이산 데이터로 바꾸는 과정
리컨스트럭션 (Reconstruction)Discrete → Continuous이산 데이터를 다시 연속 신호로 되돌리는 과정

1차원으로 보면 — 샘플링 주기

샘플링은 연속 데이터를 일정한 간격으로 찍어내는 것이고, 그 간격을 샘플링 주기(Sampling Period)라고 부릅니다.

전체 시퀀스가 1초인데  1/100초 단위로 샘플링한다면?
→ 총 100개의 샘플이 나온다

음성으로 이해하면 더 쉽다

🎤 강의실에서 마이크로 말할 때
마이크로폰 — 목소리가 연속(아날로그) 데이터로 입력 → A/D 컨버전 = 샘플링 → 이산 데이터로 변환 → 디지털 시스템에서 증폭 등 처리 (여전히 이산 데이터) → D/A 컨버전 = 리컨스트럭션 → 다시 연속 데이터로 → 스피커로 출력

즉 디지털 처리 시스템은 맨 앞에 샘플링, 맨 뒤에 리컨스트럭션이 놓인 구조입니다. 오늘 배울 것은 이 두 과정이 주파수 도메인에서 어떤 일을 벌이는가, 그리고 어떻게 해야 바람직한가입니다.

02Aliasing — 샘플이 모자라면 벌어지는 일

사인파를 듬성듬성 찍으면

⚠️ 언더샘플링(Undersampling)
연속적인 사인파를 듬성듬성 샘플링 → 샘플링 후에는 점(샘플)만 남고 곡선 정보는 사라짐 → 그 점들로 다시 신호를 만들면? → 원래와 전혀 다른 신호가 나올 수 있음
"

샘플링을 충분히 하지 못해서 발생하는, 우리가 원하지 않는 다른 주파수의 신호가 나오는 현상 — 그것을 Aliasing이라고 부릅니다.

원래보다 주파수가 더 낮은 신호가 나올 수도 있고
반대로 주파수가 더 높은(주기가 더 짧은) 신호가 나올 수도 있음
어느 쪽이든 우리가 원한 신호가 아님

2차원에서는 — 모아레 패턴

🧱 벽돌담이 물결무늬로 찍히는 이유
원래 장면에는 촘촘한 벽돌이 체크 패턴처럼 규칙적으로 존재합니다. 즉 매우 고주파인 영역이죠.

그런데 이것을 고화질이 아닌 저화질 카메라로 찍으면 — 즉 샘플링 주파수가 부족하면 — 사진에 원래 없던 물결무늬 패턴이 나타납니다. 이것이 2차원 영상에서의 Aliasing이고, 다른 이름으로 모아레(Moiré) 패턴이라고 부릅니다.

03주파수 도메인에서 본 샘플링 — 무한히 반복되는 스펙트럼

샘플링을 수식으로 모델링하면

연속 영상을 fi(x,y)라고 합시다 (아래첨자 i는 ideal — 처음부터 존재하는 이론적인 연속 장면). 샘플링은 여기에 샘플링 함수를 곱하는 것으로 모델링됩니다.

샘플링 함수 = Dirac Delta Function의 집합
  → x 방향으로 Δx, y 방향으로 Δy 만큼 규칙적으로 떨어진
      무한히 많은 델타 함수들의 모임

fs(x,y) = fi(x,y) × s(x,y)
✓ 그림으로 떠올리면: 모판의 각 격자에 못이 하나씩 박혀 있는 듯한 모양입니다. 델타 함수의 Sifting Property에 의해, 각 격자 위치(jΔx, kΔy)의 값만 살아남고 나머지는 전부 0이 됩니다. 그것이 곧 샘플링입니다.

곱셈이 컨볼루션으로 — Multiplication Property

🔄 핵심 변환
공간 영역: fi(x,y) × s(x,y) → Multiplication Property 적용 → 주파수 영역: Fi(ωx,ωy) ∗ S(ωx,ωy)

공간 영역에서의 곱은 주파수 영역에서 컨볼루션입니다. 그런데 여기서 재미있는 점은 — 샘플링 함수의 푸리에 변환도 역시 델타 함수들의 모임이라는 것입니다. 다만 도메인이 주파수로 바뀌었을 뿐이죠.

공간 영역주파수 영역
샘플링 함수Δx, Δy 간격의 델타 함수 모임
(샘플링 주기)
ωxs, ωys 간격의 델타 함수 모임
(샘플링 주파수)
연산곱셈 (×)컨볼루션 (∗)

Band-limited 신호와 그 결과

자연적인 신호들은 대부분 Band-limited되어 있습니다 — 어떤 Cut-off Frequency 이상에서는 에너지가 없다는 뜻입니다.

음성: 가청 주파수 — 대략 20kHz 이상은 에너지가 없다
영상: 공간 주파수 기준으로 어느 수준 이상에서는 에너지가 거의 없다
💡 그래서 샘플링 후 스펙트럼은 이렇게 된다
원래 스펙트럼은 Cut-off Frequency 안에만 에너지가 모여 있는 삼각형 모양
샘플링 후에는 그 스펙트럼이 샘플링 주파수의 배수 위치마다 무한히 반복됨
델타 함수와 컨볼루션한 결과이므로, 각 샘플링 포인트에 원래 스펙트럼이 복사되어 붙는 것

04리컨스트럭션 = 저역통과 필터링

샘플링으로 스펙트럼이 무한 반복된 상태입니다. 여기서 원래 신호를 되찾으려면 어떻게 할까요? 답은 간단합니다.

✂️ 가운데 것만 남기기
주파수 도메인에서 Rectangle 함수를 곱한다 → Baseband(가운데 원본 스펙트럼)만 통과 → 나머지 반복된 복제본들은 전부 0 → → 정확히 원래 스펙트럼을 얻음
"

리컨스트럭션이 뭡니까? 그냥 Low-pass Filtering이다 — 이렇게 얘기하면 되겠어요. 베이스밴드에 있는 것만 패스시켜 주고 나머지는 다 0으로 만들어 주는 거니까요.

✓ 수식을 외울 필요는 없다: 교수님이 강조하신 부분입니다 — 개념을 이해하는 것이 더 중요합니다. ① 샘플링하면 스펙트럼이 샘플링 주파수 간격으로 무한 반복된다, ② 원래로 돌아가려면 Ideal Low-pass Filter를 곱한다. 이 두 가지만 기억하면 됩니다.

05Nyquist-Shannon 샘플링 정리 — 조건이 있다

❓ 어떻게 샘플링하든 항상 완벽하게 복원할 수 있는가?
정답은 ‘그렇지 못하다’입니다. 조건이 존재합니다.
ωs ≥ 2 × ωc

샘플링 주파수(ωs)가 Cut-off 주파수(ωc)의 2배 이상이어야
Aliasing이 발생하지 않는다

왜 2배인가 — 그림으로

📊 1D 스펙트럼으로 따라가기
원래 스펙트럼이 0을 중심으로 ±ωc 범위에 존재 → 샘플링 후, ωs 간격마다 같은 모양이 복사되어 반복 → ωs가 충분히 크면 → 원본과 옆의 ‘고스트’들이 겹치지 않음 ✓ → ωs = 2ωc일 때 → 딱 맞닿음 (경계) → ωs < 2ωc면 → 겹친다 = Aliasing ✗
✓ 무엇을 조절할 수 있나: Cut-off 주파수는 신호 고유의 성질이라 우리가 바꿀 수 없습니다. 조절할 수 있는 것은 샘플링 주파수뿐입니다. 그래서 그것을 충분히 키워야 한다는 결론이 나옵니다.
🚫 한 번 겹치면 되돌릴 수 없다
스펙트럼이 겹쳐 버리면 아무리 좋은 Low-pass Filter를 써도 원래 삼각형 모양을 만들 수 없습니다. 겹친 부분에서 주파수가 섞여 버렸기 때문이죠. 모아레 패턴이 생기는 근본 이유가 바로 이것입니다.

이 정리를 주장한 나이퀴스트(Nyquist)와 섀넌(Shannon)의 이름을 따 Nyquist-Shannon 샘플링 정리라고 부릅니다.

06Anti-aliasing — 미리 고주파를 날린다

두 가지 해결책

방법내용현실성
① 샘플링 주파수를 키운다더 높은 해상도로 샘플링비현실적 — 아래 참고
② Low-pass Filtering샘플링 이전에 고주파를 미리 제거실용적 — 실제로 쓰는 방법
"

카메라로 찍는데 Aliasing이 자꾸 생겨서 어떻게 해야 하냐고 물어봤더니 '더 좋은 카메라 사'라고 말하는 것 같습니다. 천만 원짜리 가지고 있으면 2천만 원짜리 사, 5천만 원짜리 사 — 그건 쉽지가 않잖아요.

Anti-aliasing Filter의 원리

🔪 겹칠 부분을 미리 잘라낸다
Aliasing은 주로 원래 스펙트럼의 고주파 쪽에서 발생 → 그렇다면 애초에 그 고주파 성분을 날려버리자 → 삼각형 스펙트럼의 양 끝 뾰족한 부분을 미리 제거 → 그 상태로 샘플링 → 겹칠 것이 없으니 Aliasing도 없음
⚙️ 전체 파이프라인
입력 신호 → Low-pass Filtering (Anti-aliasing) → 샘플링 → … 처리 … → Low-pass Filtering (Reconstruction) → 출력 신호
✓ 트레이드오프를 정확히 이해하기: 이렇게 하면 원래 신호가 그대로 나오지는 않습니다. 고주파가 사라졌으니까요. 하지만 Aliasing이 생기지 않은 신호를 얻습니다. 즉 ‘원본과 다르지만 깨끗한 결과’와 ‘원본을 노렸지만 지저분한 결과’ 중 전자를 택하는 것입니다.

07Low-pass Filter를 실제로 어떻게 구현하나

Ideal Filter는 구현이 불가능하다

주파수 도메인의 Rectangle 함수 (Ideal LPF)
    ⇓ 공간 영역으로 역변환
Sinc 함수 — 진폭이 줄어들며 무한히 반복되는 함수
⚠️ 왜 불가능한가
Sinc 함수는 -∞에서 +∞까지 쭉 이어져 있습니다. 무한한 길이의 함수와 컨볼루션하는 것은 구현이 불가능합니다. 그래서 현실에서는 Sinc 함수를 비슷하게 흉내 낸 유한한 필터로 대체합니다.

Moving Average — 가장 단순한 대체

아이러니하게도, Sinc 함수를 단순화한 결과는 다시 Rectangle 함수입니다. 주파수 도메인의 Rectangle을 공간 영역의 Rectangle로 바꿔 쓰는 셈이죠.

필터가중치특징
Box Filter모두 동일 (1,1,1 / 1,1,1 / 1,1,1)단순 평균 — 구현이 가장 쉬움, 결과가 다소 둔탁
Gaussian Filter중심이 가장 크고, 멀수록 작게Sinc 함수를 더 잘 모사 → 더 자연스러운 스무딩
✓ 왜 가우시안이 더 좋은가: 두 필터 모두 블러를 만들지만, 가우시안 쪽이 원래 이미지의 패턴을 잘 유지하면서 더 부드럽게 스무딩됩니다. 이유는 하나 — Sinc 함수를 더 잘 모사했기 때문입니다.

2D 컨볼루션 — 직접 계산해보기

🧮 3×3 Box Filter 적용
바꾸고 싶은 픽셀을 중심에 놓고 → 주변 3×3 윈도우의 값들을 가져와 → 필터와 곱해서 더함(Weighted Sum) = 컨볼루션 → Box Filter라면 결국 9개 픽셀의 평균 → 그 값으로 중심 픽셀을 대체 → 윈도우를 한 칸씩 이동하며 모든 픽셀에 반복
예) 0과 90이 인접한 강한 에지가 있을 때
    0 → 10 → 20 → 30 → 40 → … → 90

급격한 경계가 서서히 변하는 완만한 경사로 바뀜 = 스무딩
✓ 이미지 경계 처리: 윈도우가 영상 밖으로 나가는 가장자리는 어떻게 할까요? 패딩(Padding)이라는 개념인데, 이번 강의에서는 ‘윈도우를 정확히 씌울 수 있는 영역만 계산했다’고 보고 넘어갔습니다. 나중에 따로 배울 예정입니다.

실제 영상으로 확인

🔬 Anti-aliasing의 효과
원본 영상을 가로세로 1/2로 축소 (서브샘플링) → 눈으로 보면 별 차이 없어 보임 → 그런데 2배, 4배 확대해 보면? → 영상이 굉장히 지저분함 — Aliasing 발생
✅ 가우시안 필터를 먼저 적용하면
원본 → Gaussian Low-pass Filtering → → 서브샘플링 → → 확대해서 확인 → 영상이 다소 블러되긴 했지만 지저분하지 않음 — Aliasing 없음

고주파를 날렸으니 블러는 어쩔 수 없는 대가입니다. 하지만 Aliasing은 발생하지 않습니다.

08리샘플링(Resampling) — 해상도 변환

지금까지는 연속 신호를 처음 샘플링하는 이야기였습니다. 이제 이미 샘플링된 디지털 신호를 다시 샘플링하는 경우를 봅니다. 이것을 리샘플링 또는 Resolution Conversion이라고 합니다.

✓ 우리가 매일 쓰는 기능입니다: 카메라로 찍은 사진을 카톡으로 보낼 때 원래 해상도 그대로 가지 않습니다. 사이즈를 줄여서 보내죠. 반대로 작은 영상을 키우는 경우도 있는데, 교수님은 이쪽이 더 일반적으로 많이 쓰이는 케이스라고 하셨습니다.

리샘플링의 두 단계

🔁 과정
① 리컨스트럭션 — 디지털 신호를 다시 연속 신호로 만든다 (Low-pass Filtering) → ② 리샘플링 — 원하는 새로운 위치에서 다시 샘플을 찍는다

예) 원래 5개의 샘플만 있었는데, 연속 신호로 복원한 뒤 7개 위치에서 다시 샘플링 → 더 촘촘한, 더 큰 영상을 얻음.

🔧 그런데 여기서도 같은 문제
① 단계의 리컨스트럭션에는 Ideal Low-pass Filter = Sinc 함수가 필요한데, 구현이 불가능합니다. 그래서 Sinc 함수를 대체할 다른 함수가 필요합니다 — 이것을 보간(Interpolation)이라고 부릅니다.

09보간법(Interpolation) — Sinc 함수를 흉내 내는 진화 과정

① Sample and Hold — Rectangle

가장 단순한 방법
원래 샘플들과 Rectangle 함수를 컨볼루션 → 결과: 계단(Staircase) 형태의 연속 신호

둔탁하지만 적어도 점과 점 사이를 이어주는 역할은 합니다. 이것을 Sample and Hold 또는 Zeroth Order 보간이라고 부릅니다.

② Bilinear Interpolation — Triangle

한 단계 진화
Rectangle 대신 삼각형 함수와 컨볼루션 → 각 샘플에 삼각형을 곱하고 전부 중첩(Summation) → 결과: 점과 점을 직선으로 이어준 형태

1차원에서는 Linear Interpolation, 2차원 영상에서 x · y 양방향으로 적용하면 Bilinear Interpolation입니다. 계단 형태보다 훨씬 부드럽습니다.

두 샘플 사이의 거리를 1로 보고, 원하는 위치가 t만큼 떨어져 있다면

    값 = (1-t) · f(xk) + t · f(xk+1)

→ 아주 심플한 내분(내적) 계산

③ 더 진화시키면 — B-spline의 차수

🧩 재미있는 사실 — 사각형을 겹쳐 쌓으면
Rectangle 1개 = Zeroth Order
Rectangle 2개를 컨볼루션 = 삼각형 = First Order
3개를 컨볼루션 = 더 부드러운 곡선 = Second Order (2차 함수)
4개 = Third Order (3차 함수) … Fourth, Fifth Order도 존재
무한히 반복하면? → 가우시안에 가까워짐 (끝내 Sinc 함수가 되지는 않음)
⚠️ 2차 이상에서 생기는 문제
First Order(삼각형)까지는 피크값이 1이라 원래 샘플 값이 그대로 보존됩니다. 그런데 Second Order는 3/4, Third Order는 2/3으로 피크가 1이 아닙니다.

그러면 보간한 곡선이 원래 샘플 위치를 정확히 지나가지 못합니다. 원래 값이 보존되지 않는 것이죠. 그래서 별도의 스케일링 전처리가 필요하다는 단점이 있습니다.

④ Cubic Convolution — 그 단점을 극복하다

🎯 Cubic Convolution의 특징
Third Order 필터의 일종 (3차 함수)
파라미터 α가 있으며, 보통 -0.5 또는 -1로 설정
중심에서의 값이 정확히 1
정수 위치(±1, ±2)에서의 값이 모두 0
✓ 이것이 결정적입니다: 중심은 1, 다른 정수 위치는 전부 0이므로 컨볼루션해도 원래 샘플 값은 그대로 유지되고, 사이사이 값만 적절히 채워집니다. 가우시안 같은 부드러운 형태를 가지면서도 원본을 보존하는 것이죠.
✏️ 직접 확인해 보기
xk와 xk+1 사이에서 t = 0으로 두면? → 다른 항들이 모두 사라지고 → 자기 자신(xk의 값)만 남는다 ✓

실제 보간 시에는 주변 4개 정도의 샘플을 사용해 계산합니다. 인터폴레이션에서 가장 자주 쓰이는 필터 중 하나입니다.

보간법 정리

방법기저 함수결과원본 보존
Sample & HoldRectangle (0차)계단 형태, 둔탁✓
BilinearTriangle (1차)직선 연결, 부드러움✓
Second / Third OrderRect 3~4개 컨볼루션더 부드러운 곡선✗ (스케일링 필요)
Cubic Convolution3차 함수 (α=-0.5 등)부드럽고 자연스러움✓ (가장 실용적)
IdealSinc완벽한 복원구현 불가

10마무리 정리

📌 오늘의 핵심 흐름
샘플링 = 델타 함수 곱하기 → 주파수에서 스펙트럼 무한 반복 → 리컨스트럭션 = Low-pass Filtering (가운데만 남기기) → ωs ≥ 2ωc 아니면 → 겹침 = Aliasing (모아레) → 해결 = 샘플링 주파수 증가(비현실적) 또는 Anti-aliasing LPF → LPF 구현 = Sinc 불가능 → Box / Gaussian Moving Average → 리샘플링 = 리컨스트럭션 + 재샘플링 → 보간 = Rect → Triangle → … → Cubic Convolution

이번 강의에서 가장 인상 깊었던 것은 Aliasing이 ‘스펙트럼이 겹치는 현상’이라는 설명이었습니다. 사진에 물결무늬가 생기는 것을 그동안 막연히 ‘해상도가 부족해서’라고만 알고 있었는데, 샘플링이 스펙트럼을 주기적으로 복제하고 그 복제본들이 서로 침범하는 그림을 보니 왜 한 번 생기면 되돌릴 수 없는지가 명확해졌습니다. 겹친 뒤에는 어떤 필터로도 분리할 수 없으니까요.

또 하나는 Anti-aliasing의 역설이었습니다. 깨끗한 결과를 얻기 위해 일부러 정보를 먼저 버린다는 것 — 블러를 감수하고 고주파를 날려야 지저분함이 생기지 않습니다. 영상을 축소할 때 눈으로는 멀쩡해 보이던 것이 확대하니 완전히 다르게 보이던 비교 샷이 특히 설득력 있었습니다.

마지막으로 보간법의 진화 과정이 하나의 이야기로 읽혔습니다. 이상적인 답(Sinc)은 무한해서 구현할 수 없고, 그래서 사각형 하나에서 출발해 겹치고 또 겹치며 점점 그 모양에 다가갑니다. 그러다 2차 이상에서 원본 값이 보존되지 않는 문제를 만나고, 그것을 해결한 것이 Cubic Convolution이죠. 완벽한 해법에 도달할 수 없을 때 공학이 어떻게 타협점을 찾아 나가는가를 보여주는 좋은 사례였습니다.

📌 디지털 영상처리 5강 정리였습니다. 다음 주는 대면 수업으로 진행됩니다.
※ 이번 회차는 동영상 강의로 진행되어 별도 배포 자료가 없었기에, 강의 내용을 기준으로 정리했습니다.