OpenCV: Region-wise Operation

0Chae0·2026년 4월 3일

컴퓨터비전

목록 보기
1/1

Spatial Filtering

공간 필터링이란?

  • 이미지의 각 픽셀 값(i, j)을 '주변 픽셀'들과의 계산을 통해 새로운 값으로 바꾸는 과정
    - 마스크(Mask/Kernel): 필터링 규칙이 담긴 작은 행렬. 이 마스크를 이미지 위에서 슬라이딩 시키며 계산함
    • 계산 방식: 픽셀 값과 마스크의 대응되는 값을 곱한 뒤 모두 더함 (SUM of Mask x Neighborhood).
    • 용도: 블러링(Blurring), 샤프닝(Sharpening), 노이즈 제거(image restoration)
    • 기본 구성 요소
      I(i, j): 입력 이미지 (input image)
      O(i, j): 필터링 후 출력 이미지 (output image)
      w(s, t): 필터 커널(filtering kernel). 마스크(Mask)라고도 부르며, 어떤 효과를 줄지 결정하는 계산 규칙
      <핵심 수식>

      -> 현재 위치 (i, j)를 중심으로 마스크 크기만큼 주변 픽셀들을 훑으면서, 마스크의 값(w)과 이미지의 값(I)을 각각 곱한 뒤 모두 더하라는 뜻

필터 커널 (Mask)의 역할

  • 어떤 마스크(w)를 쓰느냐에 따라 블러링, 샤프닝, 복원 등 효과 결정됨
    위의 핵심 수식을 이용해서, 아래 그림 속 질문에 대한 답을 해보자.

    ->마스크의 모든 원소를 더하면 얼마가 되어야 하는가?
    => 보통 평균 필터 (Mean Filter)의 경우, 이미지의 전체 밝기를 유지하기 위해 마스크 값의 합을 1로 만든다. (ex) 3x3 필터라면 각 1칸이 1/9가 되어 다 더하면 1이 됨)

행렬 연산 과정 상세

Filtering = SUM (Mask .x Neighborhood)
여기서 '.'은 행렬 대 행렬로 복잡하게 곱하지 말고, 그냥 눈앞에 겹쳐진 같은 위치의 숫자들끼리만 곱하라는 뜻임

-> 위의 수식을 표 형태로 풀어쓴 것이다.
마스크 (w) 행렬: 필터의 계수들이 들어있다
주변부 (i) 행렬: 이미지에서 현재 처리 중인 픽셀 주변의 값들이다.
계산: 두 행렬의 같은 위치에 있는 원소끼리 곱한 뒤, 그 결과값들을 모두 합산하여 출력 이미지의 한 점 O(i, j)를 완성한다.

시각적 흐름도


전체 과정을 보여준다.
1. 입력 이미지(Input Image)위에 마스크(Mask)를 올린다.
2. 현재 위치의 '픽셀 주변부(Pixel Neighborhood)'와 마스크를 대응시킨다.
3. 곱셈 연산: 각 위치의 값을 서로 곱한다 (Product of neighborhood with mask).
4. 합산 연산: 곱한 결과들을 모두 더한다(Sum of all products).
5. 결과 기록: 계산된 최종 합산값을 출력 이미지(Output image)의 대응되는 위치에 저장한다.

Convolution (합성곱)

From the perspective of signal processing

신호 처리 관점에서 컨벌루션

  • filtering = convolution
    -> 필터 커널이 대칭일 때, 위의 필터링 연산은 컨벌루션과 완전히 같다.

  • 이산 신호 (Discrete Signal) 수식

-> x[n]은 입력신호(이미지), h[n]은 시스템의 응답(필터 마스크)

=> 공간 영역에서의 convolution은 주파수 영역에서의 곱셈과 같다.

convolution의 성질

  • 필터를 여러 개 겹쳐 쓰거나 병렬로 연결할 때 계산을 어떻게 단순화할 수 있는지 보여준다
    - 결합 법칙 (Associative property): 필터 h_1을 통과시킨 뒤 h_2를 통과시키는 것 == 두 필터를 미리 컨벌루션한 하나의 필터 (h_1 * h_2)를 통과시키는 것과 같다.
    • 배분 법칙 (Distributive property): 두 필터를 병렬로 연결해서 결과를 더하는 것은, 두 필터를 더한 하나의 필터를 통과시키는 것과 같다

연속 도메인에서의 컨벌루션 예시

  • 컨벌루션의 4단계 (Flip - Shift - Multiply - Integrate)
    1. Flip (뒤집기)
    1. Shift (이동)
      뒤집힌 신호를 t만큼 옆으로 민다
    2. Multiply (곱하기)
      겹치는 부분의 값을 서로 곱한다
    3. Integrate (더하기)
      곱한 값의 면적 (적분값)을 구한다
      결과 분석

      t = -1: 겹치기 시작하는 지점 (값=0)
      t = 0: 많이 겹쳐서 값이 커짐 (값=2)
      t = 2: 완전히 지나쳐서 다시 0이 됨 (값=0)*뒤집어서 밀면서 곱하고 더한다
      **컨벌루션은 수학적 정의상 마스크를 상하좌우로 한 번 뒤집어서 계산해야 한다. 하지만 우리가 쓰는 대부분의 필터 (평균 필터, 가우시안 필터 등)은 '대칭형'이라 뒤집어도 모양이 똑같다. 따라서 '필터링 = 컨벌루션' 이다.

Filtering vs. Convolution


-> 수식의 차이: 필터링은 인덱스를 더하고 (i+s), 컨벌루션은 뺀다 (i-s).
+) 만약 사용하는 필터 커널이 대칭(Symmetric)이라면, 즉 h[−i]=h[i]h[-i] = h[i] 이면, 필터링과 컨벌루션은 결과가 완전히 같다.

2D Image Filtering: Uniform Mean Filter

저역 통과 필터 (Low-pass filter): 이미지를 부드럽게

  • 주변부의 평균을 내어 급격한 변화(고주파)를 제거하는 필터
  1. Uniform Mean Filter
    • 모든 칸의 값이 같은 가장 단순한 형태
    • 경계 처리(Boundary processing): 필터가 이미지 끝에 걸쳤을 때 3가지 해결법
      - Mirroring: 이미지 경계를 거울처럼 반사시켜 채움
      • Zero padding: 이미지 밖을 모두 0으로 채움
      • Adjust kernel: 이미지 안에 있는 픽셀들로만 평균 재계산
  2. Gaussian Filter
    • 중심에서 멀어질수록 가중치를 줄여서 평균 필터보다 결과가 더 자연스럽고 부드러움
    • 분리 가능성 (Separability): 2D 가우시안 필터는 1D 가우시안 필터 두 번(가로, 세로)로 나눠서 계산 가능하다. (연산량 줄여 실행 속도가 빨라진다!)

고역 통과 필터 (High-pass Filter): 경계선 찾기

  • 픽셀 값의 변화가 큰 부분(고주파)를 강조하여 경계선 (Edge) 검출한다
    - 소벨 필터 (Soble filter): 1차 미분 사용해 수평, 수직 방향의 경계선을 찾는다
    • 라플라시안 필터 (Laplacial Filter): 2차 미분을 사용해 경계선을 더 날카롭게 찾는다

비선형 필터 (Nonlinear Filter)

  • 주변 값 중 최대값, 최소값, 또는 중간값을 선택
  • Unsharp Masking: 원본 이미지에서 흐릿한 (low-pass) 성분을 빼서 고주파 성분만 남긴 뒤, 이를 원본에 더해 이미지를 훨씬 선명하게 만든다

Summary

공간 필터링: 커널(마스크)을 어떻게 정의하느냐에 따라 효과가 달라진다.
선형 필터의 장점: 분리 가능(Separable)하여 효율적이다.
컨벌루션: 필터링과 원리는 같으며 교환, 결합, 분배 법칙이 성립한다.

profile
아무것도 하지 않으면 아무 일도 일어나지 않기에... 시작하는 컴공생의 블로그

0개의 댓글