Python OpenCV 강좌 : 제 13강 - 흐림 효과

Python OpenCV Blur

Python OpenCV 강좌 : 제 13강 - 흐림 효과
[ Python-OpenCV ] - 윤대희

흐림 효과(Blur)


1

흐림 효과(Blur)블러링(Blurring) 또는 스무딩(Smoothing)이라 불리며, 노이즈를 줄이거나 외부 영향을 최소화하는 데 사용됩니다.

흐림 효과는 영상이나 이미지를 번지게 하며, 해당 픽셀의 주변 값들과 비교하고 계산해서 픽셀들의 색상을 재조정합니다.

단순히 이미지를 흐리게 만드는 것뿐만 아니라 노이즈를 제거해서 연산 시 계산을 빠르고 정확하게 수행하는 데 도움을 줍니다.

또한, 이미지의 해상도를 변경하는 경우에도 사용되는데 이미지의 크기를 변경하면 존재하지 않는 데이터를 생성하거나 존재하는 데이터를 줄여야 하므로 샘플링된 이미지를 재구성할 때 사용됩니다.



Main Code


import cv2

src = cv2.imread("Image/geese.jpg", cv2.IMREAD_COLOR)
dst = cv2.blur(src, (9, 9), anchor=(-1, -1), borderType=cv2.BORDER_DEFAULT)

cv2.imshow("dst", dst)
cv2.waitKey()
cv2.destroyAllWindows()



Detailed Code


dst = cv2.blur(src, (9, 9), anchor=(-1, -1), borderType=cv2.BORDER_DEFAULT)

단순 흐림 효과 함수(cv2.blur)로 입력 이미지에 흐림 효과를 적용할 수 있습니다.

단순 흐림 효과는 각 픽셀에 대해 커널을 적용해 모든 픽셀의 단순 평균을 구하는 연산입니다.

dst = cv2.blur(src, ksize, anchor, borderType)입력 이미지(src)커널 크기(ksize), 고정점(anchor), 테두리 외삽법(borderType)으로 흐림 효과를 적용한 결과 이미지(dst)를 반환합니다.

커널, 고정점, 테두리 외삽법에 대한 내용은 다음과 같습니다.



커널(Kernel)


2

커널(kernel)은 이미지에서 (x, y)의 픽셀과 해당 픽셀 주변을 포함한 작은 크기의 공간을 의미합니다.

이 영역 각각의 특정한 수식이나 함수 등을 적용해 새로운 이미지를 얻는 알고리즘에서 사용됩니다.

커널은 영역의 형태와 요소가 결합되는 방식을 정의하는 템플릿을 의미하기도 하며, 신호 처리 분야에서는 커널을 필터(filter)라고도 합니다.

위 이미지의 파란색 사각형 내부가 커널이 되며, 파란색 사각형 크기가 3 x 3이므로, 커널의 크기는 3 x 3이 됩니다.



고정점(Anchor Point)


고정점(Anchor Point)은 커널을 통해 컨벌루션된 값을 할당한 지점입니다.

여기서 컨벌루션(Convolution)이란 새로운 픽셀을 만들어 내기 위해 커널 크기의 화소 값을 이용해 어떤 시스템을 통과해 계산하는 것을 의미합니다.

커널 내에서 고정점은 하나의 지점만을 가지며, 이미지와 어떻게 정렬되는지를 나타냅니다.

위 이미지의 빨간색 부분이 고정점이 되며, 빨간색 사각형의 위치는 파란색 사각형을 기준으로 (1, 1)에 위치합니다.



테두리 외삽법(Border Extrapolation)


테두리 외삽법(Border Extrapolation)은 컨벌루션을 적용할 때, 이미지 가장자리 부분의 처리 방식을 의미합니다.

컨벌루션을 적용하면 이미지 가장자리 부분은 계산이 불가능한 데, 이 문제를 해결하기 위해 테두리의 이미지 바깥쪽에 가상의 픽셀을 만들어 처리합니다.

가상 픽셀의 값을 0으로 처리하거나, 임의의 값을 할당하거나, 커널이 연산할 수 있는 부분부터 연산을 수행하기도 합니다.

예를 들어 cv2.BORDER_DEFAULTgfedcb | abcdefgh | gfedcba의 형태로 외삽을 진행하는데 abcdefgh는 픽셀의 값을 의미합니다.

즉 테두리 부분이 a라면 테두리 밖의 부분은 이미지를 반사하듯이 표현되어, gfedcbgfedcba의 형태로 할당됩니다.

위 이미지의 굵은 선 바깥 부분에 대해 테두리 외삽법이 적용됩니다.



Additional Information


픽셀 외삽법 종류

속성 의미
cv2.BORDER_CONSTANT iiiiii | abcdefgh | iiiiiii
cv2.BORDER_REPLICATE aaaaaa | abcdefgh | hhhhhhh
cv2.BORDER_REFLECT fedcba | abcdefgh | hgfedcb
cv2.BORDER_WRAP cdefgh | abcdefgh | abcdefg
cv2.BORDER_REFLECT_101 gfedcb | abcdefgh | gfedcba
cv2.BORDER_REFLECT101 gfedcb | abcdefgh | gfedcba
cv2.BORDER_DEFAULT gfedcb | abcdefgh | gfedcba
cv2.BORDER_TRANSPARENT uvwxyz | abcdefgh | ijklmno
cv2.BORDER_ISOLATED 관심 영역 (ROI) 밖은 고려하지 않음



Result


3



Book Image

개정판이 출간됐습니다!

C#과 파이썬을 활용한 OpenCV 4 프로그래밍 (개정판)

컴퓨터 비전 기초 이론부터 머신러닝을 활용한 영상 처리 프로젝트까지

  • C#과 파이썬용 OpenCV의 데이터 형식과 행렬 및 배열 연산
  • 이미지/동영상/카메라를 활용한 입출력과 결과 저장
  • 전처리 과정과 정보를 탐색하기 위한 이미지 변형
  • 유의미한 정보를 검출하기 위한 이미지 변환
  • 이미지에서 정보를 검출 및 인식
  • 객체 검출을 포함한 모션 추적
  • K-means, KNN, SVM 등의 머신러닝 알고리즘 적용 방법
  • 카페(Caffe), 다크넷(Darknet), 텐서플로 모델을 활용한 딥러닝 모듈 적용 방법
  • Tesseract-OCR과 C# OpenCvSharp4를 활용한 프로젝트
  • 텐서플로와 Python OpenCV4를 활용한 프로젝트
  • 윤대희 저 | 위키북스

    [yes24 바로가기] [알라딘 바로가기] [교보문고 바로가기]

    후원하기


    ⤧  Previous post Python OpenCV 강좌 : 제 12강 - 이진화 ⤧  Next post Python OpenCV 강좌 : 제 14강 - 가장자리 검출
    Python-OpenCV Category