Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

히스테리시스 임계값(Hysteresis Threshold)이란? Python scikit-learn으로 구현하는 방법

히스테리시스(Hysteresis)는 결과가 즉시 반응하지 않고 뒤늦게 따라가는 지연 효과를 의미합니다. 임계값(threshold) 관점에서 히스테리시스란 낮은 임계값 이상 또는 높은 임계값을 초과하는 영역, 즉 판단의 신뢰도가 매우 높은 영역을 가리킵니다.

히스테리시스를 활용하면 이미지 속 객체의 가장자리(edge) 바깥에 존재하는 노이즈를 효과적으로 무시할 수 있어, 더 깔끔하고 정확한 엣지 검출이 가능합니다.

그렇다면 scikit-learn 라이브러리를 사용해 히스테리시스 임계값 처리를 어떻게 구현할 수 있을까요? 아래 예제를 통해 살펴보겠습니다.

예제 코드

import matplotlib.pyplot as plt
from skimage import data, filters

fig, ax = plt.subplots(nrows=2, ncols=2)
orig_img = data.coins()
edges = filters.sobel(orig_img)
low = 0.1
high = 0.4
lowt = (edges > low).astype(int)
hight = (edges > high).astype(int)
hyst = filters.apply_hysteresis_threshold(edges, low, high)

ax[0, 0].imshow(orig_img, cmap='gray')
ax[0, 0].set_title('Original image')
ax[0, 1].imshow(edges, cmap='magma')
ax[0, 1].set_title('Sobel edges')
ax[1, 0].imshow(lowt, cmap='magma')
ax[1, 0].set_title('Low threshold')
ax[1, 1].imshow(hight + hyst, cmap='magma')
ax[1, 1].set_title('Hysteresis threshold')

for a in ax.ravel():
    a.axis('off')

plt.tight_layout()
plt.show()

실행 결과

히스테리시스 임계값(Hysteresis Threshold)이란? Python scikit-learn으로 구현하는 방법

코드 설명

  • 먼저 matplotlib과 scikit-learn(skimage)에서 필요한 라이브러리와 모듈을 가져옵니다.

  • subplots 함수를 사용해 2×2 형태의 플롯 영역을 미리 설정한 뒤, 각 이미지를 콘솔에 배치합니다.

  • scikit-learn 패키지에 기본으로 포함된 'coins'(동전) 데이터셋을 입력 이미지로 사용합니다.

  • sobel 필터를 적용해 입력 이미지의 소벨 엣지 이미지를 생성합니다. 이 과정에서 결과 이미지에는 가장자리 부분이 강조되어 나타납니다.

  • apply_hysteresis_threshold 함수를 사용해 낮은 임계값(0.1)과 높은 임계값(0.4) 사이의 값을 판별하고, 두 임계값 조건을 만족하는 영역만 최종적으로 추출합니다.

  • 마지막으로 imshow 함수를 사용해 원본 이미지, 소벨 엣지, 저임계값 결과, 히스테리시스 임계값 결과를 화면에 시각화하여 표시합니다.