#07-1. 영상의 필터링

마스크 연산

가장자리 픽셀 처리

  • BORDER_REFLECT_101 : 안쪽에 있는 값과 대칭되도록 = BORDER_DEFAULT
  • BORDER_CONSTANT : 0으로 채우기
  • BORDER_REFLECT : 대칭이 되도록 채우기
  • BORDER_REPLICATE : 경계선 값으로 채우기

→ 바깥 가상의 픽셀값 어떻게 설정하느냐에 따라 연산 결과 달라짐

필터링 연산

  • filter2D (src, dst, ddepth, kernel, anchor=Point(-1, -1), delta = 0, borderType = BORDER_DEFAULT);
  • src 영상에 kernel 필터를 이용하여 필터링 수행 → 결과 dst에 저장
  • ddepth : 결과 영상의 깊이 지정
    • ddepth = -1 : 입력 영상과 같게 설정

  • Anchor : 커널 행렬에서 고정점으로 사용할 좌표
    • 기본값 Point(-1, -1) : 커널 행렬 중심 좌표를 고정점으로 사용

엠보싱 필터링

  • 변환
    • 픽셀 값 변화가 적은 평탄한 영역 : 회색 → 0에 가까운 값이 된다.
    • 경계 부분 : 밝거나 어둡게 설정 → 0보다 훨씬 크거나 훨씬 작은 값이 된다.
    • 음수값 : 포화연산에 의해 0이 되어버림 (입체감 감소) → 결과영상에 128을 더한다 (delta값)
  • 실습
    emboss = np.array([[-1, -1, 0],
    									 [-1, 0, 1],
    									 [0, 1, 1]], np.float32)
    dst = cv2.filter2D(src, -1, emboss, delta = 128)

#07-2. 블러링: 영상 부드럽게 하기

블러링

  • 초점이 맞지 않은 사진처럼 부드럽게 만드는 필터링 기법
  • Blurring, Smoothing
  • 인접한 픽셀 간의 값 변화가 크지 않은 경우 → 부드럽다!
  • 잡음 제거하는 전처리 과정, 부드럽게 만드는 용도로 사용

평균값 필터

  • 특정 픽셀과 주변 픽셀들의 산술 평균으로 설정

  • (행렬의 전체 원소의 합) / (행렬의 전체 원소 개수)

  • 마스크의 크기 증가

    • 블러링의 효과 증가
    • 연산량 크게 증가
  • blur(src, dst, ksize, anchor = Point(-1, -1), borderType = BORDER_DEFAULT);

    • 블러링 효과 강하게 하고 싶으면 ksize를 증가

    • ksize 킈의 평균값 필터 마스크 사용하여 dst 출력 영상 생성

      dst = cv2.blur(src, (ksize, ksize))

가우시안 분포

  • 평균을 중심으로 좌우 대칭의 종 모양을 갖는 확률 분포 (= 정규 분포) → 자연계에서 발생하는 대부분의 사건은 가우시안 분포를 따름
  • 평균, 표준편차에 따라 결정 → 주로 평균이 0인 가우시안 분포 함수 사용
  • 평균이 0이므로 x=0에서 최댓값
  • 표준편차 작으면 : 그래프 뾰족 표준편차 크면 : 그래프 넓게 퍼진 완만한 형태
  • 그래프 아래 면적 모두 더하면 = 1
  • 가우시안 분포 함수 값 = 특정 x가 발생할 수 있는 확률

가우시안 필터

  • 가우시안 분포를 따르는 2차원 필터 마스크 행렬 생성

  • 가우시안 분포 함수 : 연속 함수 → 이산형의 마스크 생성

  • -4a ~ 4a 사이 구간에서 대부분의 값이 존재

  • 2차원 가우시안 분포 함수 : 1차원 가우시안 분포 함수의 곱으로 분리 가능

    → x축 방향, y축 방향의 함수로 각각 분리

  • GaussianBlur(src,dst, ksize, sigmaX, sigmaY = 0, borderType = BORDER_DEFAULT)

    • 표준편차 커질수록 영상 부드럽

      for sigma in range(1, 6):
      		dst = cv2.GaussianBlur(src, (0, 0), sigma)
    • 내부적으로 x축 방향, y축 방향 1차원 가우시안 필터 마스크 각각 생성

    • 1차 가우시안 필터 마스크 생성 : getGaussianKernel()

    • ksize : (8*sigma + 1)보다 같거나 크게 지정

    • 각 행렬의 원소에 저장되는 값

      → a : Weight들의 합 = 1 이 되게 만드는 상수

#07-3. 샤프닝: 영상 날카롭게 하기

언샤프 마스크 필터

  • sharpening : 날카로운 느낌이 나도록 변경하는 필터링 기법
  • 글자 인식 등에 유용 → 객체의 윤곽 뚜렷하게 구분
  • 영상 edge 근방에서 픽셀 값의 명암비가 커지도록
  • 블러링된 영상 사용 : unsharp → 언샤프 영상 역으로 이용하여 날카로운 영상 생성

언샤프 마스크 필터 동작 방식

  • g(x,y) 에 가중치 곱해서 샤프닝 정도 변경 가능

    • 가중치 < 1.0 : 덜 날카로운 영상

    • 가중치 = 1.0 : 날카로운 성분 그대로 한 번 더하는 것

  • OpenCV에서 제공 X → 직접 구현 필요

  • 블러링 : 평균값 필터, 가우시안 필터 사용

    → 표준 편차 커지면 더 넓은 영역 변경

blurred = cv2.GaussianBlur(src, (0, 0), 6)
alpha = 1.0
dst = cv2.addWeighted(src, 1 + alpha, blurred, -alpha, 0.0)
cv2.imshow('dst', dst)

kernel 활용하는 방법

  • filter2D 함수 사용

#07-4. 잡음 제거 필터링

영상과 잡음 모델

  • 잡음 : 원본 신호에 추가된 원치 않은 신호 → 주로 영상을 획득하는 과정에서 발생
  • 광학적 신호 → 전지적 신호 변환하는 센서에서 추가
  • s : 원본 신호, n : 추가되는 잡음
  • 잡음이 생성되는 방식 : 잡음 모델 → 가장 대표적인 것 : 가우시안 잡음 모델
  • 표준 편차 작은 가우시안 잡음 모델 → 잡음에 의한 픽셀 값 변화 감소

OpenCV 가우시안 잡음 모델

  • randn(dst, mean, stddev)
    • dst : 가우시안 난수로 채워질 행렬
    • mean : 가우시안 분포 평균
    • stddev : 가우시안 분포 표준 편차
noise = np.zeros(src.shape, np.int32)
cv2.randn(noise, 0, 100)
dst = cv2.add(src, noise, dtype=cv2.CV_8UC1)

양방향 필터

  • 가우시안 잡음 제거하기 위해 사용
  • 픽셀값 차이에 의존적
  • bilateralFilter(src, dst, d, sigmaColor, sigmaSpace, borderType = BORDER_DEFAULT)
    • d : 필터링에 사용할 이웃 픽셀과의 거리(지름) → -1 : sigmaSpace로부터 자동 계산
    • sigmaColor : 색 공간에서의 가우시안 필터 표준 편차
    • sigmaSpace : 좌표 공간에서의 가우시안 필터 표준 편차
    • borderType : 가장자리 픽셀 확장 방식
dst1 = cv2.GaussianBlur(src, (0, 0), 5)   # src: 잡음 추가된 영상
dst2 = cv2.bilateralFilter(src, -1, 10, 5)

미디언 필터

  • 평균의 함정 : outline에 따라 값 천차만별 → 중간값(median)을 영상 픽셀 값으로 설정 : 신뢰할 만한 값
  • medianBlur(src, dst, kszie)
    • ksize : 3보다 같거나 큰 홀수 지정

      for i in range(0, int(src.size/10)):     # 소금후추 뿌리기
          x = random.randint(0, src.shape[1]-1)
          y = random.randint(0, src.shape[0]-1)
          src[x,y] = (i%2) * 255
      dst2 = cv2.medianBlur(src, 3)
  • 어떤 노이즈 → 어떤 필터링
profile
숭실대학교 컴퓨터학부 21

0개의 댓글