

コンピュータビジョンや画像処理では、大津展之(おおつ のぶゆき)にちなんで名付けられた大津法が、画像の自動閾値処理に用いられています。[ 1 ]最も単純な形式では、このアルゴリズムは、ピクセルを前景と背景の2つのクラスに分ける単一の強度閾値を返します。この閾値は、クラス内強度分散を最小化することによって、あるいは同等に、クラス間分散を最大化することによって決定されます。[ 2 ]
大津の方法は、フィッシャーの判別分析の1次元離散版であり、ジェンクス最適化法に関連しており、強度ヒストグラムに対して実行されるグローバル最適k平均法[ 3 ]と同等である。多段階閾値処理への拡張は元の論文[ 2 ]で説明されており、その後、計算効率の良い実装が提案されている[ 4 ] [ 5 ] 。

させて、画像内のピクセルの正規化ヒストグラム(つまり、ピクセル強度の確率分布)ビン。このヒストグラムには2つのクラスがあります。背景ピクセルについては、前景ピクセルの場合。ピクセルをクラスに分類するための主要な識別要素はしきい値です。。ピクセルが含まれていますに、 そして含まれるものに。
アルゴリズムは、最適な閾値をグローバルに探索する。クラス内分散(ピクセル強度の分散)または)が最小化されます。
させて、累積確率を表す、 そしてを示す。授業のためにそして選択する条件付き確率これらのクラスの 番目のピクセルはそしてそれぞれ。
さあ、そして(ピクセル強度)の平均そしてそれぞれ。
同様に、
さあ、そして(ピクセル強度)の分散はそしてそれぞれ。
同様に、
させて、はクラス間(画素強度)分散であり、これは前述の2つのクラスの分散の加重和として定義されます。
どこ、ヒストグラム全体の分散。
考慮するそして我々は以下のことを証明できる。
アルゴリズムは、つまり、クラス間の分散です。この見解は、適切に閾値設定されたクラスはピクセル強度で分離され、逆に閾値が画素強度においてクラスを最も適切に分離できる閾値が最適だろう。
形式的には、この問題は以下のように要約されます。
histogramCountsは、異なるグレースケールレベル(8ビット画像に典型的) の256要素のグレースケール画像levelのヒストグラムです。は画像のしきい値(倍精度浮動小数点数)です。
function level = otsu ( histogramCounts ) total = sum ( histogramCounts ); % 画像内のピクセルの総数%% OTSU 自動しきい値処理top = 256 ; sumB = 0 ; wB = 0 ; maximum = 0.0 ; sum1 = dot ( 0 : top - 1 , histogramCounts ); for ii = 1 : top wB = wB + histogramCounts ( ii ); wF = total - wB ; sumB = sumB + ( ii - 1 ) * histogramCounts ( ii ); if wB > 0 && wF > 0 mF = ( sum1 - sumB ) / wF ; val = wB * wF * (( sumB / wB ) - mF ) * (( sumB / wB ) - mF ); if ( val >= maximum ) level = ii ; maximum = val ;終わり終わり終わり終わりMatlabにgraythresh()は、画像処理ツールボックスに組み込み関数がありmultithresh()、それぞれ大津法と多重大津法で実装されています。
この実装にはNumPyライブラリが必要です。
import numpy as npdef otsu_intraclass_variance ( image , threshold ): """ Otsu のクラス内分散。 すべてのピクセルが閾値より上または下の場合、これは警告をスローしますが、これは安全に無視できます。 """ return np . nansum ( [ np . mean ( cls ) * np . var ( image , where = cls ) # 重み · クラス内分散for cls in [ image >= threshold , image < threshold ] ] ) # NaN はクラスが空の場合にのみ発生し、その場合寄与はゼロになるはずで、`nansum` はそれを実現します。# デモンストレーション用のランダム画像: image = np.random.randint ( 2 , 253 , size = ( 50 , 50 ) )otsu_threshold = min ( range ( np . min ( image ) + 1 , np . max ( image )), key = lambda th : otsu_intraclass_variance ( image , th ), )OpenCVやScikit-imageといった画像処理専用のPythonライブラリには、このアルゴリズムの組み込み実装が用意されています。
大津の方法は、ヒストグラムが2つのピークの間に深く鋭い谷を持つ二峰性分布を持つ場合にうまく機能します。[ 6 ]
他のすべてのグローバル閾値処理法と同様に、大津法は、ノイズが多い場合、対象物のサイズが小さい場合、照明が不均一な場合、クラス内分散がクラス間分散よりも大きい場合に性能が低下します。[ 7 ]これらの場合、大津法の局所的な適応が開発されています。[ 8 ]
さらに、大津の方法の数学的基礎は、画像のヒストグラムを、等分散かつ等サイズの 2 つの正規分布の混合としてモデル化しています。 [ 9 ]しかし、大津の閾値処理は、これらの仮定が満たされない場合でも満足のいく結果をもたらす可能性があり、統計的検定(大津の方法と密接に関連している[ 10 ] ) が、作業上の仮定が完全に満たされていない場合でも正しく機能するのと同様です。
これらの仮定からのより深刻な逸脱を考慮するために、大津の方法のいくつかのバリエーションが提案されている[ 9 ] 。例えば、キトラー・イリングワース法[ 11 ]などである。
一般的な局所適応法としては、ノイズの多い画像における物体分割タスクで優れた性能を発揮する2次元大津法がある。この方法では、特定のピクセルの輝度値をその近傍の平均輝度値と比較することで、分割結果を改善する。[ 8 ]
各ピクセルにおいて、近傍の平均グレースケール値が計算されます。与えられたピクセルのグレースケール値を以下のように分割します。離散値であり、平均グレースケール値も同様に分割されます。値。次に、ピクセルのグレースケール値と近傍の平均のペアが形成されます。各ペアは、可能な2次元ビン。出現回数(頻度)の合計ペアの画像内の総ピクセル数で割った値は、 2次元ヒストグラムにおける 同時確率質量関数を定義します。
そして、2次元ヒストグラムに基づいて、2次元大津法が以下のように開発されました。
2つのクラスの確率は次のように表すことができます。
2つのクラスの強度平均値ベクトルと全体の平均ベクトルは、次のように表すことができます。
ほとんどの場合、非対角要素の確率は無視できるほど小さいので、簡単に検証できます。
クラス間離散行列は次のように定義される。
離散行列のトレースは次のように表すことができます。 どこ
一次元大津法と同様に、最適な閾値は最大化によって得られる。
のそしては反復的に得られ、これは一次元大津法と同様である。そして最大値が得られるまで変更しますつまり
max 、s 、t = 0 ;forss:0toL-1dofortt:0toL-1doevaluatetr(S_b);iftr(S_b)>maxmax=tr(S,b);s=ss;t=tt;endifendforendforreturns,t;Notice that for evaluating , we can use a fast recursive dynamic programming algorithm to improve time performance.[12] However, even with the dynamic programming approach, 2D Otsu's method still has large time complexity. Therefore, much research has been done to reduce the computation cost.[13]
If summed area tables are used to build the 3 tables – sum over , sum over , and sum over – then the runtime complexity is . Note that if only coarse resolution is needed in terms of threshold, can be reduced.
Function inputs and output:
hists is a 2D histogram of grayscale value and neighborhood average grayscale value pair.total is the number of pairs in the given image, determined by the number of the bins of 2D histogram at each direction.threshold is the threshold obtained.function threshold = otsu_2D ( hists, total ) maximum = 0.0 ; threshold = 0 ; helperVec = 0 : 255 ; mu_t0 = sum ( sum ( repmat ( helperVec ' , 1 , 256 ) .* hists )); mu_t1 = sum ( sum ( repmat ( helperVec , 256 , 1 ) .* hists )); p_0 = zeros ( 256 ); mu_i = p_0 ; mu_j = p_0 ; for ii = 1 : 256 for jj = 1 : 256 if jj == 1 if ii == 1 p_0 ( 1 , 1 ) = hists ( 1 , 1 );それ以外の場合、 p_0 ( ii , 1 ) = p_0 ( ii - 1 , 1 ) +ヒスト( ii , 1 ); mu_i ( ii , 1 ) = mu_i ( ii - 1 , 1 ) + ( ii - 1 ) *ヒスト( ii , 1 ); mu_j ( ii , 1 ) = mu_j ( ii - 1 , 1 ); end else p_0 ( ii , jj ) = p_0 ( ii , jj - 1 ) + p_0 ( ii - 1 , jj ) - p_0 (ii - 1 , jj - 1 ) + hists ( ii , jj ); % ここにバグがあります。MATLAB のインデックスは 0 より大きい必要があります。ii-1 は無効です。mu_i ( ii , jj ) = mu_i ( ii , jj - 1 ) + mu_i ( ii - 1 , jj ) - mu_i ( ii - 1 , jj - 1 ) + ( ii - 1 ) * hists ( ii , jj ); mu_j ( ii , jj ) = mu_j ( ii , jj - 1 ) + mu_j ( ii - 1 , jj ) - mu_j ( ii - 1 , jj - 1 ) + ( jj - 1 ) * hists ( ii , jj ); endif ( p_0 ( ii , jj ) == 0 )続行; end if ( p_0 ( ii , jj ) == total )ブレーク; tr = ( ( mu_i ( ii , jj ) - p_0 ( ii , jj ) * mu_t0 ) ^ 2 + ( mu_j ( ii , jj ) - p_0 ( ii , jj ) * mu_t1 ) ^ 2 ) / ( p_0 ( ii , jj ) * ( 1 - p_0 ( ii , jj )));if ( tr >= maximum ) threshold = ii ; maximum = tr ; end end end end画像のクラスのグレースケール値が正規分布とみなせるが、サイズや分散が等しくない場合、大津アルゴリズムの前提条件が満たされません。キトラー・イリングワースアルゴリズム(「最小誤差閾値処理」とも呼ばれる)[ 11 ]は、このようなケースを処理するための大津法の変形です。このアルゴリズムを数学的に記述する方法はいくつかあります。その1つは、テストされる各閾値について、結果として得られるバイナリ画像の正規分布のパラメータが、データに基づいて最尤推定によって推定されると考えることです。 [ 9 ]
このアルゴリズムは大津の方法よりも優れているように見えるかもしれないが、推定すべき不要なパラメータを導入するため、アルゴリズムが過剰パラメータ化されて不安定になる可能性がある。大津の方法の仮定が少なくとも部分的に妥当と思われる多くのケースでは、オッカムの剃刀に従って、キットラー・イリングワースアルゴリズムよりも大津の方法を優先する方が望ましいかもしれない。[ 9 ]

大津法の限界の一つは、弱い物体をセグメント化できないことである。この方法は、画像を前景と背景の2つのクラスに一度に分離するための単一の閾値を探索する。大津法は単一の閾値で画像をセグメント化しようとするため、分散の大きいクラスに偏る傾向がある。[ 14 ] 反復三クラス閾値処理アルゴリズムは、この限界を回避するために大津法を改良したものである。 [ 15 ] 画像が与えられると、最初の反復で、三クラス閾値処理アルゴリズムは閾値を計算する。大津の方法を用いる。閾値に基づく。アルゴリズムは平均を計算しますピクセル以上そして意味する以下のピクセルすると、アルゴリズムは画像を暫定的に3つのクラス(そのためトライクラスと呼ばれる)に分け、上側の平均より上のピクセルを一時的な前景として指定クラスと下位平均以下のピクセル一時的な背景として指定クラス。ピクセルはこれらは未決定(TBD)領域として示されます。これでアルゴリズムの最初の反復が完了します。2回目の反復では、新しい閾値を得るために、TBD領域のみに大津の方法を適用します。アルゴリズムは次に平均を計算しますTBD領域のピクセルのうち、そして平均TBD領域のピクセルのうち、TBD領域内のピクセルで、上限平均値より大きいもの一時的な前景に追加されます。また、TBD領域のピクセルで、下限平均値より小さいもの一時的な背景に追加されます同様に、新しいTBD領域が得られ、そこには、の間にあるすべてのピクセルが含まれます。これで2回目の反復処理が完了します。次に、アルゴリズムは次の反復処理に進み、停止条件を満たすまで新しいTBD領域を処理します。停止条件とは、連続する2回の反復処理で計算された大津の閾値の差が小さな値より小さくなった時点で反復処理を停止するというものです。最後の反復処理では、上のピクセルが閾値を超えるピクセルは前景クラスに割り当てられ、閾値以下のピクセルは背景クラスに割り当てられます。最後に、すべての一時的な前景ピクセルが結合されて最終的な前景が構成されます。すべての一時的な背景ピクセルが結合されて最終的な背景になります。実装では、反復を終了する停止基準以外に、このアルゴリズムにはパラメータは含まれません。大津法を繰り返し適用し、セグメンテーションのTBD領域を徐々に縮小することで、このアルゴリズムは、標準的な大津法よりも弱いオブジェクトをより良く保持する結果を得ることができます。
{{cite journal}}: CS1 maint: 複数の名前: 著者リスト (リンク){{cite book}}: CS1メンテナンス: 場所の発行元が見つかりません (リンク){{cite journal}}: CS1 maint: 複数の名前: 著者リスト (リンク){{cite journal}}: CS1 maint: 複数の名前: 著者リスト (リンク)