Skip to content

파이썬 라이브러리 scikit-image #
Find similar titles

개요 #

scikit-image (이전 scikits.image)는 Python 프로그래밍 언어 용 오픈 소스 이미지 처리 라이브러리이다. 여기에는 세분화, 기하학적 변형, 색 공간 조작, 분석, 필터링, 형태학, 형상 감지 등의 알고리즘이 포함된다. 이것은 파이썬 수치 및 과학 라이브러리 인 NumPySciPy와 상호 운용되도록 설계되었다.

Scikit-image 프로젝트는 Stéfan van der Walt의 scikits.image로 시작되었다. 이름은 SciPy에 대한 독립적으로 개발되고, 분산 된 써드 파티 확장인 "SciKit"(SciPy Toolkit)이라는 개념에서 유래한다. 원래의 코드베이스는 나중에 다른 개발자들에 의해 광범위하게 재작성되었다. 다양한 scikits 중에서 scikit-image뿐만 아니라 scikit-learn은 2012 년 11 월에 "잘 유지되고 인기가있는"것으로 알려져 있다. Scikit-image는 Google Summer of Code에서 활발하게 활동했다.

활용 예: Image segmentation #

이미지 분할은 관심 대상의 픽셀을 추출하기 위해 이미지의 각각의 다른 영역에 대한 여러 레이벨이라는 속성을 할당한다.

Binary segmentation: foreground + background #

Histogram-based method: Otsu thresholding #

from skimage import data
from skimage import filters
camera = data.camera()
val = filters.threshold_otsu(camera)
mask = camera < val

Image

분리 된 이미지의 연결된 구성 요소에 레이블 지정 #

바탕을 물체와 분리하면, 물체들 끼리 또한 서로 분리 할 수 있다. 이를 위해 각각에 다른 정수 레이블을 할당 할 수 있다.

데이터 생성:

n = 20
l = 256
im = np.zeros((l, l))
points = l * np.random.random((2, n ** 2))
im[(points[0]).astype(np.int), (points[1]).astype(np.int)] = 1
im = filters.gaussian_filter(im, sigma=l / (4. * n))
blobs = im > im.mean()

연결된 물체 모두를 레이블 할당:

from skimage import measure
all_labels = measure.label(blobs)

연결된 물체만 할당:

blobs_labels = measure.label(blobs, background=0)

Image

Marker based methods #

한 세트의 영역 안에 마커가 있는 경우, 이를 사용하여 영역을 세분화 할 수 있다.

Watershed segmentation #

Watershed (skimage.morphology.watershed ())은 이미지에서 "watershed(유역)"을 채우는 region-growing 방식이다.

from skimage.morphology import watershed
from skimage.feature import peak_local_max

# Generate an initial image with two overlapping circles
x, y = np.indices((80, 80))
x1, y1, x2, y2 = 28, 28, 44, 52
r1, r2 = 16, 20
mask_circle1 = (x - x1) ** 2 + (y - y1) ** 2 < r1 ** 2
mask_circle2 = (x - x2) ** 2 + (y - y2) ** 2 < r2 ** 2
image = np.logical_or(mask_circle1, mask_circle2)
# Now we want to separate the two objects in image
# Generate the markers as local maxima of the distance
# to the background
from scipy import ndimage
distance = ndimage.distance_transform_edt(image)
local_maxi = peak_local_max(distance, indices=False, footprint=np.ones((3, 3)), labels=image)
markers = morphology.label(local_maxi)
labels_ws = watershed(-distance, markers, mask=image)

Random walker segmentation #

랜덤 워커 알고리즘 (skimage.segmentation.random_walker ())_은 watershed와 유사하지만 좀 더 "확률론적"인 접근법을 사용한다. 그것은 이미지에서 레이벨의 확산(diffusion)이라는 아이디어를 기반으로 한다:

from skimage import segmentation
# Transform markers image so that 0-valued pixels are to
# be labelled, and -1-valued pixels represent background
markers[~image] = -1
labels_rw = segmentation.random_walker(image, markers)

Image

Suggested Pages #

0.0.1_20210630_7_v33