EDUCATION/DSS Online 6기

DAY48 - 이미지 데이터 다루기

Kululu_ 2021. 3. 24. 15:44

이미지 데이터

- 이미지 데이터는 작은 픽셀들이 모여서 이미지를 이루고 있는 데이터입니다.

- 각각의 픽셀에는 "명도"에 대한 값이 들어가 있습니다.

- 흑백 이미지

    - 하나의 색상 채널을 가지고 픽셀의 값이 그 채널의 명도를 나타냅니다. (255에 가까울수록 흰색 0에 가까울수록 검은색)

- 컬러 이미지

    - R, G, B 세 개의 색상 채널을 가지고 채널별 픽셀의 값이 해당 채널의 명도를 나타냅니다.

- 이미지 데이터는 (세로 크기, 가로 크기, 채널 수) 형태의 shape을 갖는 넘파이 배열로 나타낼 수 있습니다.

 

 

OpenCV

- 이미지 데이터를 다룰 때 주로 사용하는 패키지 입니다.

- 파이썬에서 이미지를 출력할 때는 plt.imshow() 라는 함수를 사용하는데 이 함수는 이미지 데이터의 채널이 R, G, B 순으로 구성되어있다는 가정하에 이미지를 출력해줍니다.

- opencv를 이용해서 이미지 데이터를 불러올 경우 B, G, R 순으로 채널이 구성되어 있기 때문에 plt.imshow()로 출력하기 위해서는 채널의 순서를 바꿔서 배열을 다시 구성해주어야 합니다.

 

 

1) 이미지 데이터 불러오기

- cv2.imread(img_path)

 

2) 임계 처리

- 이미지 데이터를 전처리 하는 방법 중 하나로, 흑백이미지의 픽셀값(명도)이 지정한 임계치보다 큰지 작은지에 따라서 다른 값을 적용해주는 방식

  픽셀의 값이 임계값을 넘을 경우 픽셀의 값이 임계값을 넘지 못한 경우
THRESH_BINARY 지정한 value로 픽셀값 대체 0으로 픽셀값 대체
THRESH_BINARY_INV 0으로 픽셀값 대체 지정한 value로 픽셀값 대체
THRESH_TRUNC 지정한 value로 픽셀값 대체 원래의 픽셀값 사용
THRESH_TOZERO 원래의 픽셀값 사용 0으로 픽셀값 대체
THRESH_TOZERO_INV 0으로 픽셀값 대체 원래의 픽셀값 사용

 

 

3) 적응 임계처리

- 단순 임계처리 방식은 이미지 전체에 대해서 하나의 임계값만을 사용하므로 한 이미지 내에 어두운 영역과 밝은 영역이 공존할 때 두 영역에 모두 같은 임계값을 적용해야 합니다.

 

- 만약 각각의 영역 내에서 상대적으로 어둡거나 밝은 부분을 특정 명도로 치환하고 싶을 때는 단순 임계처리로는 불가능하므로 이럴 때 사용할 수 있는 것이 적응 임계처리입니다.

 

- 적응 임계처리는 일정한 영역에서 이웃한 픽셀들의 값을 사용하여 임계값을 만들어 해당 영역에 적용하는 방법입니다.

 

- 임계값을 만드는 방식

    - 평균 : ADAPTIVE_THRESH_MEAN_C

    - 가우시안 : ADAPTIVE_THRESH_GAUSSIAN_C

 

 

 

3) 이미지 필터링

- 커널이라고 하는 정방 행렬을 정의하고, 이미지 위에서 이 커널을 이동시키면서 이미지 영역과 곱하여 그 결과값을 이미지의 해당 위치의 값으로 만드는 연산입니다.

$$ f \otimes h = \sum_{u=-K/2}^{K/2} \sum_{v=-K/2}^{K/2} f(x + u, y + v) \cdot h(u, v) $$

$$ K : 커널 사이즈 $$

 

- 커널 예시 ( K = 3 인 커널 )

h(-1, 1) h(0, 1) h(1, 1)
h(-1, 0) h(0, 0) h(1, 0)
h(-1, -1) h(0, -1) h(1, -1)

 

 

4) 블러

- 평균 블러 : 값이 균일한 커널을 사용하여 평균값으로 이미지 필터링을 하는 방법

 

- 중앙값 블러 : 이미지 영역 내에서 중앙값을 해당 픽셀의 값으로 만드는 방법

    - 점 모양의 잡티 제거에 효과적

 

- 가우시안 블러 : 커널로 가우시안 함수를 사용하여 이미지 필터링을 하는 방법

    - 가우시안 블러를 사용하면 중심 위치 (x,y)와 멀리 떨어진 픽셀은 가우시안 함수의 값이 작아져 영향력이 줄어듭니        다.

    - 잡티 제거에 효과적

    - 단 이미지의 윤곽선도 뭉개지는 단점 존재

 

- 양방향 필터링 : 커널로 가우시안 함수를 사용하되 

    - 가우시안 함수 사용시 중심 위치 (x,y)와 픽셀 간의 거리 뿐만 아니라 명도 차이도 고려하는 방법

    - 중심 위치의 새로운 값을 결정할 때 명도의 차이가 큰 픽셀은 영향력이 줄어들게 되므로 가우시안 블러에 비해 윤        곽선을 보존하기가 용이함

 

평균 블러 예시
중앙값 블러 예시

 

가우시안 블러 예시

 

양방향 필터링 예시

 

5) 형태학적 변환

- 침식 : 커널이 적용된 영역 내에서 최소값으로 그 영역을 대체( 어두운 영역이 밝은 영역을 침식 )

- 팽창 : 커널이 적용된 영역 내에서 최대값으로 그 영역을 대체( 밝은 영역이 어두운 영역 쪽으로 팽창 )

- 그래디언트 : 팽창된 이미지 - 침식된 이미지 => 이미지의 윤곽선 추출

- 오프닝 : 침식 후 팽창 ( 잡음, 작은 물체, 돌기 등을 제거하는 데에 적합 )

- 클로징 : 팽창 후 침식 ( 전체적인 윤곽 파악에 용이 )

 

- 형태학적 변환을 할 때 커널로는 사각형 커널, 타원 커널, 십자가 커널등을 주로 사용합니다.

 

 

형태학적 변환 예시