JA EN

二値化処理の種類と最適な閾値決定 - 大津法から適応的二値化まで

· 約 9 分で読めます

二値化処理の基礎 - 画像を白と黒に分離する意味

二値化 (Thresholding / Binarization) は、グレースケール画像の各ピクセルを閾値 (threshold) と比較し、白 (255) または黒 (0) の 2 値に変換する処理です。画像処理パイプラインの初期段階で頻繁に使用され、後続の輪郭検出、OCR、物体計数などの前処理として不可欠です。

なぜ二値化するのか: 多くの画像解析タスクでは、対象物 (前景) と背景を明確に分離する必要があります。グレースケール画像は 256 階調の情報を持ちますが、「文字か背景か」「細胞か培地か」「欠陥か正常か」といった判定には 2 値で十分です。二値化により情報量を削減し、後続処理を高速かつ堅牢にします。

二値化の数学的定義:

dst(x,y) = maxval if src(x,y) > thresh

dst(x,y) = 0 otherwise

二値化の種類:

OpenCV では cv2.threshold() でグローバル閾値、cv2.adaptiveThreshold() で適応的閾値を適用します。閾値の選択が二値化の品質を決定する最も重要な要素であり、本記事ではその決定方法を詳しく解説します。

固定閾値法 - 手動設定とヒストグラム分析

固定閾値法は最もシンプルな二値化手法で、ユーザーが指定した単一の閾値を画像全体に適用します。照明条件が安定し、前景と背景のコントラストが明確な場合に有効です。

閾値の手動決定: ヒストグラムを観察し、前景と背景に対応する 2 つのピーク (双峰性) の谷間に閾値を設定します。例えば、白い紙に黒い文字が印刷された文書画像では、背景 (200-255) と文字 (0-80) の間の 128 付近が適切な閾値になります。

OpenCV での実装:

ret, binary = cv2.threshold(gray, 128, 255, cv2.THRESH_BINARY)

閾値タイプのバリエーション:

固定閾値の限界: 照明が不均一な場合 (影、グラデーション照明、ビネッティング)、単一の閾値では前景と背景を正しく分離できません。画像の一部では適切でも、他の部分では前景が消失したり背景がノイズとして残ったりします。この問題を解決するのが適応的二値化です。

前処理による改善: 固定閾値の適用前にガウシアンぼかし (σ=1-3) でノイズを除去し、ヒストグラム平坦化でコントラストを改善すると、閾値の選択が容易になり結果も安定します。

大津の方法 (Otsu's Method) - 自動閾値決定の標準手法

大津の方法 (Otsu's Method、1979 年) は、ヒストグラムの統計的性質に基づいて最適な閾値を自動決定するアルゴリズムです。クラス間分散を最大化する閾値を選択し、前景と背景の分離度を最大にします。画像処理で最も広く使用される自動閾値決定法です。

アルゴリズムの原理: 閾値 t で画像を 2 クラス (C0: ピクセル値 ≤ t、C1: ピクセル値 > t) に分割したとき、クラス間分散 σ²_B(t) = ω0(t) × ω1(t) × (μ0(t) - μ1(t))² を最大化する t を最適閾値とします。ω0, ω1 は各クラスの画素数比率、μ0, μ1 は各クラスの平均輝度です。

計算効率: 全 256 通りの閾値に対してクラス間分散を計算し、最大値を与える閾値を選択します。ヒストグラムの累積和を利用すると O(L) (L: 階調数=256) で計算可能で、画像サイズに依存しない高速な処理です。

OpenCV での実装:

ret, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)

戻り値 ret に自動決定された閾値が格納されます。

大津法の前提条件と限界:

多段階 Otsu: 3 値以上に分類する多段階 Otsu 法も存在し、OpenCV 4.x では cv2.threshold() に直接は実装されていませんが、scikit-image の threshold_multiotsu() で利用可能です。

適応的二値化 - 照明不均一への対処

適応的二値化 (Adaptive Thresholding) は、画像内の各ピクセルに対して局所的な閾値を計算する手法です。照明が不均一な環境 (影、スポットライト、自然光の変動) で撮影された画像に対して、グローバル閾値では不可能な高品質な二値化を実現します。

基本原理: 各ピクセル (x, y) の閾値 T(x, y) を、そのピクセルを中心とする局所領域 (ブロックサイズ B×B) の統計量から計算します。局所的な明暗の変動に追従するため、照明ムラの影響を受けません。

平均値ベース (Mean):

T(x,y) = mean(局所領域) - C

局所領域の平均輝度から定数 C を引いた値を閾値とします。C は通常 5-15 の範囲で、大きいほど前景として判定される範囲が広がります。

ガウシアンベース (Gaussian):

T(x,y) = gaussian_weighted_mean(局所領域) - C

中心ピクセルに近いほど重みが大きいガウシアン加重平均を使用します。平均値ベースよりエッジ付近の精度が高く、文書画像の二値化で標準的に使用されます。

OpenCV での実装:

binary = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, blockSize=11, C=2)

パラメータ調整のガイドライン:

Sauvola の方法: 適応的二値化の改良版で、局所的な標準偏差も考慮します。T(x,y) = μ × (1 + k × (σ/R - 1))。コントラストが低い領域での性能が向上し、古い文書や劣化した画像の処理に優れます。

実践的な閾値設計 - 文書画像と産業検査での応用

実務での二値化は単純な閾値適用だけでなく、前処理・後処理を含むパイプライン全体の設計が重要です。代表的な応用分野での実践的なアプローチを紹介します。

文書画像の二値化パイプライン:

この手順で Tesseract OCR の認識精度が未処理比で 15-25% 向上します。

産業検査での二値化: 半導体ウェハーや基板の欠陥検出では、照明を制御できるため固定閾値が有効です。ただし、製品のロット間変動に対応するため、大津法で閾値を自動調整し、許容範囲 (±10) を設けて異常検知する設計が堅牢です。

カラー画像の二値化: RGB 画像を直接二値化する場合、HSV 色空間に変換して特定の色相範囲を抽出する方法が有効です。例えば赤い物体の検出では H: 0-10 または 170-180、S: 100-255、V: 50-255 の範囲でマスクを生成します。cv2.inRange(hsv, lower, upper) で実装します。

動的閾値の設計: 時系列画像 (動画、連続撮影) では、フレーム間で照明条件が変動する場合があります。各フレームで大津法を適用するか、直前 N フレームの閾値の移動平均を使用して急激な変動を抑制します。閾値の変動が ±20 を超えた場合は照明異常としてアラートを出す設計も有効です。

高度な二値化手法と深層学習アプローチ

従来の閾値ベースの二値化を超える高度な手法と、近年の深層学習による二値化アプローチを紹介します。複雑な背景や劣化した画像に対して、従来手法では困難だった高精度な二値化が可能になっています。

Niblack の方法: T(x,y) = μ + k × σ (k=-0.2 が標準)。局所平均と標準偏差を使用し、コントラストに応じた閾値を設定します。背景領域でノイズが多くなる欠点があり、Sauvola 法で改善されました。

Wolf の方法: Sauvola 法の改良で、画像全体の最小輝度を考慮します。極端に暗い領域や低コントラスト領域での性能が向上し、歴史的文書のデジタル化で高い評価を得ています。

Bradley の方法: 積分画像 (Integral Image) を使用して局所平均を O(1) で計算する高速な適応的二値化です。ブロックサイズに依存しない一定時間で計算でき、リアルタイム処理に適しています。

深層学習による二値化: U-Net や DeepLabV3 などのセマンティックセグメンテーションモデルを文書二値化に適用する研究が進んでいます。DIBCO (Document Image Binarization Competition) では、深層学習手法が従来手法を大幅に上回る F-measure (95% 以上) を達成しています。

ハイブリッドアプローチ: 実務では深層学習と従来手法を組み合わせるハイブリッドが効果的です。まず深層学習で大まかなセグメンテーションを行い、境界付近を適応的二値化で精密化する 2 段階処理により、精度と速度の両立が可能です。処理時間は GPU 使用時で 1 ページあたり約 50ms です。

関連記事

モルフォロジー演算の基礎 - 膨張・収縮・オープニング・クロージングの原理と実践

画像処理の基本操作であるモルフォロジー演算を体系的に解説。膨張、収縮、オープニング、クロージングの原理と構造要素の設計、実務での活用パターンを紹介します。

画像セグメンテーションの基礎 - 領域分割の原理と応用を理解する

画像セグメンテーションの基本概念から深層学習ベースの最新手法まで解説。セマンティック、インスタンス、パノプティックの違いと Web での活用事例を紹介します。

ディザリング技術の種類と応用 - 限られた色数で階調を表現する手法

誤差拡散法、Bayer ディザリング、ブルーノイズなど各種ディザリング技術の原理と特性を比較し、レトロ表現から印刷まで応用例を解説します。

画像フィンガープリント技術の仕組み - pHash と dHash による類似画像検出

画像フィンガープリント技術 (pHash, dHash, aHash) の原理と実装方法を解説。類似画像検出、重複排除、著作権侵害検知に活用できるハッシュアルゴリズムの比較と実践例を紹介します。

工業検査における画像処理技術 - 外観検査から寸法計測まで

製造業の品質管理で使われる画像処理技術を体系的に解説。欠陥検出、寸法計測、パターンマッチング、深層学習による異常検知の実践手法を紹介します。

ヒストグラム均等化によるコントラスト改善 - 画像の明暗分布を最適化する技術

ヒストグラム均等化の数学的原理から CLAHE による局所的コントラスト改善まで解説。低コントラスト画像を劇的に改善する手法と適切なパラメータ設定を紹介します。

関連用語