"디지털 이미지 처리-OpenCV/Python" 시리얼: 이미지의 임계값 처리

"디지털 이미지 처리-OpenCV/Python" 시리얼: 이미지의 임계값 처리


이 책의 JD 할인 구매 링크 https://item.jd.com/14098452.html
이 책의 CSDN 독점 연재 칼럼 https://blog.csdn.net/youcans/category_12418787.html

여기에 이미지 설명을 삽입하세요.


9장 이미지의 임계값 지정


이미지 임계값 처리는 간단하고 직관적이며 계산 속도가 빠르며 많은 이미지 처리 알고리즘의 전처리 프로세스입니다.


이 장의 요약

  • 이미지 임계값 처리 방법을 배우고 다양한 임계값이 처리 결과에 미치는 영향을 이해합니다.
  • 적응형 임계값 처리, 이동 평균 임계값 처리 등 영상의 국소적 특징을 활용하는 임계값 처리 방법을 소개합니다.
  • HSV 색상 범위를 기반으로 컬러 이미지 임계값을 학습하는 HSV 모델을 소개합니다.

9.1 고정 임계값 처리

그레이 값과 그레이 값의 한계에 따라 영상을 여러 영역으로 분할하거나 영상 내 대상 객체를 추출하는 것이 가장 기본적인 임계값 처리 방법이다.

이미지에서 대상과 배경의 회색조 분포가 분명한 경우 전체 이미지의 전역 임계값 지정에 고정 임계값을 사용할 수 있습니다. 영상의 히스토그램에 뚜렷한 경계가 있으면 영상의 분할 임계값을 쉽게 찾을 수 있지만, 영상의 히스토그램 경계가 명확하지 않으면 적절한 임계값을 찾기 어렵고 심지어는 이미지를 효과적으로 분할하기 위한 고정된 임계값을 찾는 것은 불가능합니다.

이미지에 노이즈가 있는 경우 전역 임계값을 사용하여 이미지의 경계를 완전히 분리하는 것이 어려운 경우가 많습니다. 이미지의 경계가 로컬 대비 아래에서 발생하는 경우 전역 임계값을 사용하면 성능이 저하됩니다.

OpenCV의 cv.threshold 함수는 이미지를 임계값으로 지정하는 데 사용됩니다.

함수 프로토타입

cv.threshold(src, thresh, maxval, type[, dst]) → retval, dst

매개변수 설명

  • src: 다차원 Numpy 배열인 입력 이미지로 단일 채널 이미지 또는 다중 채널 이미지를 허용합니다.
  • dst: 출력 이미지, src와 동일한 크기 및 채널 수.
  • thresh: 임계값은 부동 소수점 데이터이며 범위는 0에서 255입니다.
  • maxval: 최대값은 포화 한계를 나타내며 일부 변환 유형에 사용되며 일반적으로 255입니다.
  • 유형: 임계값 변환 유형입니다.
    • THRESH_BINARY: 임계값 임계값보다 크면 maxval로 설정되고, 그렇지 않으면 0으로 설정됩니다.
    • THRESH_BINARY_INV: 임계값 임계값보다 크면 0으로 설정되고, 그렇지 않으면 maxval로 설정됩니다.
    • THRESH_TRUNC: 임계값 임계값보다 크면 임계값 임계값으로 설정되고, 그렇지 않으면 변경되지 않습니다.
    • THRESH_TOZERO: 임계값 임계값보다 크면 변경되지 않고 유지되고, 그렇지 않으면 0으로 설정됩니다.
    • THRESH_TOZERO_INV: 임계값 임계값보다 크면 0으로 설정되고, 그렇지 않으면 변경되지 않습니다.
    • THRESH_OTSU: OTSU 알고리즘을 사용하여 임계값을 자동으로 결정하며 조합하여 사용할 수 있습니다.
    • THRESH_TRIANGLE: Triangle 알고리즘을 사용하여 조합하여 사용할 수 있는 임계값을 자동으로 결정합니다.
  • retval: 반환된 임계값 이미지입니다.

문제
(1) retval은 일반적으로 이진 임계값 이미지이지만 일부 유형(예: TRUNC, TOZERO, TOZERO_INV)에서는 임계값 포화 이미지를 반환합니다.
(2) 이 기능을 사용하면 단일 채널 또는 다중 채널 이미지를 입력할 수 있지만, 다중 채널 이미지를 입력하는 경우 각 채널을 독립적으로 임계값으로 설정해야 합니다. 반환된 임계값 이미지 역시 흑백 바이너리 이미지가 아닌 다중 채널 이미지이므로 사용 시 특히 주의하시기 바랍니다.
(3) 임계값 변환 유형이 OTSU 알고리즘 또는 삼각형 알고리즘을 사용하는 경우 8비트 단일 채널 입력 이미지만 처리할 수 있습니다.
(4) 임계값 변환 유형이 OTSU 알고리즘 또는 Triangle 알고리즘을 사용하는 경우 임계값 임계값이 작동하지 않습니다.


[루틴0901] 임계값 처리의 고정 임계값 방식

이 루틴은 고정된 임계값 방법을 사용하여 회색조 이미지의 임계값을 지정합니다. 다중 모드 회색조 분포 이미지의 경우 임계값 크기는 임계값 처리 결과에 심각한 영향을 미칩니다.


# 【0901】阈值处理之固定阈值法
import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt

if __name__ == '__main__':
    # 生成灰度图像
    hImg, wImg = 512, 512
    img = np.zeros((hImg, wImg), np.uint8)  # 创建黑色图像
    cv.rectangle(img, (60, 60), (450, 320), (127, 127, 127), -1)  # 矩形填充
    cv.circle(img, (256, 256), 120, (205, 205, 205), -1)  # 圆形填充
    # 添加高斯噪声
    mu, sigma = 0.0, 20.0
    noiseGause = np.random.normal(mu, sigma, img.shape)
    imgNoise = np.add(img, noiseGause)
    imgNoise = np.uint8(cv.normalize(imgNoise, None, 0, 255, cv.NORM_MINMAX))

    # 阈值处理
    _, imgBin1 = cv.threshold(imgNoise, 63, 255, cv.THRESH_BINARY)  # thresh=63
    _, imgBin2 = cv.threshold(imgNoise, 125, 255, cv.THRESH_BINARY)  # thresh=125
    _, imgBin3 = cv.threshold(imgNoise, 175, 255, cv.THRESH_BINARY)  # thresh=175

    plt.figure(figsize=(9, 6))
    plt.subplot(231), plt.axis('off'), plt.title("1. Original"), plt.imshow(img, 'gray')
    plt.subplot(232), plt.axis('off'), plt.title("2. Noisy image"), plt.imshow(imgNoise, 'gray')
    histCV = cv.calcHist([imgNoise], [0], None, [256], [0, 256])
    plt.subplot(233, yticks=[]), plt.title("3. Gray hist")
    plt.bar(range(256), histCV[:, 0]), plt.axis([0, 255, 0, np.max(histCV)])
    plt.subplot(234), plt.axis('off'), plt.title("4. threshold=63"), plt.imshow(imgBin1, 'gray')
    plt.subplot(235), plt.axis('off'), plt.title("5. threshold=125"), plt.imshow(imgBin2, 'gray')
    plt.subplot(236), plt.axis('off'), plt.title("6. threshold=175"), plt.imshow(imgBin3, 'gray')
    plt.tight_layout()
    plt.show()


프로그램 설명:
(1) 고정 임계값 방법을 사용하여 이미지를 임계값으로 설정한 실행 결과는 그림 9-1에 표시됩니다. 그림 9-1(1)은 프로그램에 의해 생성된 테스트 패턴을 나타내고, 그림 9-1(2)는 그림 9-1(1)에 가우시안 노이즈를 추가한 것이며, 그림 9-1(3)은 그림 9-1(2)에는 세 가지 중요한 회색조 피크 분포가 있습니다.
(2) 그림 9-1(4)부터 (6)은 그림 9-1(2)를 서로 다른 임계값으로 임계값을 적용하여 얻은 이진 영상을 보여 주며, 결과는 완전히 다릅니다. 이는 다중 모드 회색 분포 이미지의 경우 임계값 크기가 임계값 처리 결과에 심각한 영향을 미친다는 것을 보여줍니다.
(3) 그림 9-1(4)~(6)의 분할 결과는 모두 잡음이 많이 포함되어 있어 잡음이 임계값 처리 결과에도 영향을 미칠 수 있음을 알 수 있다.

그림 9-1 고정 임계값 방법을 사용한 임계값 이미지여기에 이미지 설명을 삽입하세요.
**


저작권 설명:
youcans@xupt 원본 작업, 재인쇄에는 원본 링크가 표시되어야 합니다: (https://blog.csdn.net/youcans/article/details/135164986)
저작권 2023 youcans, XUPT
Crated: 2023-12-23

"디지털 이미지 프로세싱-OpenCV/Python" 독점 연재 칼럼 : https://blog.csdn.net/youcans/category_12418787.html

Supongo que te gusta

Origin blog.csdn.net/youcans/article/details/135164986
Recomendado
Clasificación