画像処理には、数学的形態学と呼ばれるサブフィールドがあります。実装している操作は、拡張と呼ばれるこの分野の中心的な概念です。明らかに、この操作は広範囲に研究されており、非常に効率的に実装する方法を知っています。
この問題に対する最も効率的なアルゴリズムは、1992 年と 1993 年に van Herk と Gil と Werman によって個別に提案されました。このアルゴリズムでは、 のサイズに関係なく、サンプルごとに正確に 3 回の比較が必要ですT
。
数年後、Gil と Kimmel はアルゴリズムをさらに改良し、サンプルごとに 2.5 回の比較のみで済むようにしました。ただし、メソッドの複雑さが増したことで、比較が少なくなることは相殺される可能性があります (コードが複雑になると、実行速度が遅くなることがわかりました)。このバリアントを実装したことはありません。
HGW アルゴリズムと呼ばれるには、入力と同じサイズの 2 つの中間バッファーが必要です。途方もなく大きな入力 (数十億のサンプル) の場合、データをチャンクに分割し、チャンクごとに処理できます。
並べ替えでは、データを順方向にたどり、 size のチャンクの累積最大値を計算しますT
。同じように後ろ向きに歩きます。これらはそれぞれ、サンプルごとに 1 つの比較を必要とします。最後に、結果は、これら 2 つの一時配列のそれぞれにある 1 つの値の最大値です。データの局所性のために、入力に対して 2 つのパスを同時に実行できます。
一時配列が length である実行中のバージョンを実行することもできると思いますが、2*T
実装はより複雑になります。
van Herk、「長方形および八角形のカーネルでのローカル最小および最大フィルターの高速アルゴリズム」、Pattern Recognition Letters 13(7):517-521、1992 ( doi )
Gil、Werman、「Computing 2-D min、median、および max フィルター」、IEEE Transactions on Pattern Analysis and Machine Intelligence 15(5):504-507、1993 ( doi )
ギル、キンメル、「効率的な拡張、侵食、オープニング、およびクロージング アルゴリズム」、パターン分析と機械知能に関する IEEE トランザクション 24(12):1606-1617、2002 ( doi )
(注: Code Review に関するこの関連する質問からクロスポストされています。)