일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 파이토치
- k8s
- Deep Learning
- GUI
- FLASK
- Docker
- Computer Vision
- 컴퓨터 비전
- paper review
- POD
- 데이터베이스
- Tkinter
- 파이썬
- tensorflow
- yaml
- vue.js
- Web Programming
- Django
- kubernetes
- 텐서플로우
- 장고
- 논문 리뷰
- OpenCV
- 웹 프로그래밍
- 그래픽 유저 인터페이스
- pytorch
- numpy
- 딥러닝
- MariaDB
- Python
- Today
- Total
Maxima's Lab
[Python, Scipy] Connected Component Labelling (연결 성분 레이블링) 본문
오늘은 이미지 내 연결 성분들에 대해서 Labelling를 하는 방법인 Connected Component Labelling에 대해서 알아보겠습니다.
해당 알고리즘을 적용하기 위해 Scipy 내 ndimage 패키지의 gaussian_filter() 함수와 label() 함수를 사용합니다.
- from scipy.ndimage import gaussian_filter()
- from scipy.ndimage import label()
위의 함수들을 이용해서 하단의 Original Image에 대해 Connected Component Labelling 알고리즘을 적용합합니다.
위의 Original Image 내 총 6개의 서로 다른 도형들이 존재하며, 2개의 사각형들은 연결되어 있는 것을 확인할 수 있습니다.
Connected Component Labelling을 통해 궁극적으로 얻고자 하는 결과는 Background(배경)을 제외하고, 5개의 objects로 구분하는 것입니다.
Connected Component Labelling을 적용하기 위한 개략적인 코드는 다음과 같습니다.
import matplotlib.pyplot as plt
from scipy import ndimage
import cv2
img = cv2.imread("...")
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY).copy()
gaussian_sigma = 1.0
threshold = 30
result = ndimage.gaussian_filter(img, gaussian_sigma)
labels, Num_objects = ndimage.label(result > threshold)
위의 코드 중 ndimage.gaussian_filter() 함수를 통해 Original Image의 Noise을 제거하는 작업을 진행하였습니다.
추가적으로, threshold (= 30)을 이용하여, result > threshold 코드를 적용한 이유는, Original Image 내 Pixel 값이 30보다 큰 위치에 대해서 Connected Component Labelling 작업을 진행하기 위함입니다. (Background 영역을 제외하고 Labelling을 하기 위함입니다.) threshold 값을 통해 Connected Component Labelling을 적용하고자 하는 영역은 다음 이미지 내 White 영역입니다.
위 이미지 내 Connected Component Labelling 적용한 결과는 다음과 같습니다.
알고리즘 적용 결과, Bakcground(배경)을 제외하고 총 5개의 objects에 대해서 1, 2, 3, 4, 5의 값으로 Labelling이 진행됩니다.
각 Label (0, 1, 2, 3, 4, 5) 값에 대응되는 Pixel 위치들에 대한 Mask Image는 다음과 같습니다.
이상으로, scipy 내 ndimage.gaussian_filter() 함수와 ndimage.label()를 통해 Connected Component Labelling 알고리즘을 적용하는 방법에 대해서 알아보았습니다.