「デジタル画像処理 ~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 です。
  • type: しきい値変換タイプ。
    • THRESH_BINARY: しきい値 thresh より大きい場合は maxval に設定され、それ以外の場合は 0 に設定されます。
    • THRESH_BINARY_INV: しきい値 thresh より大きい場合は 0 に設定され、それ以外の場合は maxval に設定されます。
    • THRESH_TRUNC: しきい値 thresh より大きい場合は、しきい値 thresh に設定され、それ以外の場合は変更されません。
    • THRESH_TOZERO: しきい値 thresh より大きい場合は変更されません。それ以外の場合は 0 に設定されます。
    • THRESH_TOZERO_INV: しきい値 thresh より大きい場合は 0 に設定され、それ以外の場合は変更されません。
    • THRESH_OTSU: OTSU アルゴリズムを使用してしきい値を自動的に決定し、組み合わせて使用​​できます。
    • THRESH_TRIANGLE: 三角形アルゴリズムを使用してしきい値を自動的に決定し、組み合わせて使用​​できます。
  • retval: 返された閾値画像。

問題
(1) に注意してください。 retval は通常、バイナリしきい値イメージですが、一部のタイプ (TRUNC、TOZERO、TOZERO_INV など) では、しきい値が飽和したイメージを返します。
(2) この機能では、シングルチャンネルまたはマルチチャンネル画像の入力が可能ですが、マルチチャンネル画像を入力する場合、各チャンネルを個別にしきい値処理する必要があります。返されるしきい値画像も白黒の 2 値画像ではなくマルチチャネル画像であるため、使用する場合は特に注意してください。
(3) 閾値変換タイプが OTSU アルゴリズムまたは Triangle アルゴリズムを使用している場合、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) には、3 つの重要なグレースケール ピーク分布があります。
(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)
Copyright 2023 youcans, XUPT
Crated: 2023-12-23

「デジタル画像処理 -OpenCV/Python」独占連載コラム:https://blog.csdn.net/youcans/category_12418787.html

おすすめ

転載: blog.csdn.net/youcans/article/details/135164986