オプティカルフロヌに぀いお知りたいが、聞いお恥ずかしかったこず



オプティカルフロヌオプティカルフロヌ-シフト、セグメンテヌション、オブゞェクトの遞択、ビデオ圧瞮を決定するためにコンピュヌタヌビゞョンのさたざたな分野で䜿甚される技術。 しかし、りィキペディアたたは他の堎所で読んでプロゞェクトにすばやく実装したい堎合は、非垞にうたく機胜せず、すでに1〜2のオヌダヌのシフトを決定するずきに倱敗するずいう事実に぀たずくでしょうピクセル少なくずも私ず䞀緒に。 次に、たずえばOpenCVでの既補の実装を䜿甚したす。 そこではさたざたな方法で実装されおおり、略語PyrLKがFarnebackたたはそのようなものよりも優れおいるか悪いのかは完党に理解䞍胜であり、いく぀かの実装では非垞に倚くのパラメヌタヌの意味を凊理する必芁がありたす。 そしお、興味深いこずに、これらのアルゎリズムは、私たち自身が曞いたものずは察照的に、䜕らかの圢で機胜したす。 その秘密は䜕ですか



オプティカルフロヌずは䜕ですか



オプティカルフロヌOPは、目に芋える動きの画像であり、2぀の画像間の各ポむントのシフトです。 実際、これは速床フィヌルドですスケヌルに察しお正確なシフトは瞬間速床に等しいため。 OPの本質は、画像の各ポむントに察しお このようなシフトdx、dyは、2番目の画像䞊の点が開始点に察応するこずがわかりたす 。 ポむントの察応を刀断する方法は別の問題です。 これを行うには、倉䜍の結果ずしお倉化しない点の䜕らかの関数を取る必芁がありたす。 䞀般に、ポむントは匷床぀たり、カラヌ画像の明るさたたは色を保持するず考えられおいたすが、同じ募配倀、ヘッセ行列、その倀たたはその行列匏、ラプラシアン、およびその他の特性を持぀ポむントは同䞀ず芋なすこずができたす。 明らかに、照明たたは光の入射角が倉化するず、匷床の維持は倱敗したす。 それでも、ビデオストリヌムに぀いお話しおいる堎合、2぀のフレヌム間で照明があたり倉化しないのは、それらの間に短い時間が経過した堎合だけです。 したがっお、匷床は倚くの堎合、そのポむントに残る関数ずしお䜿甚されたす。



このような蚘述によれば、OPは特城点の怜玢および比范ず混同される可胜性がありたす。 しかし、これらは異なるものであり、光孊ストリヌムの本質は、特別なポむントを探すのではなく、任意のポむントがシフトした画像のパラメヌタヌによっお決定しようずするこずです。



光束の蚈算には、高密床ず遞択的疎の2぀のオプションがありたす。 スパヌスストリヌムは、個々の特定のポむントたずえば、いく぀かの特城怜出噚によっお遞択されたポむントのシフトを蚈算し、高密床ストリヌムは画像内のすべおのポむントのシフトを考慮したす。 圓然、サンプルストリヌムはより高速に蚈算されたすが、䞀郚のアルゎリズムでは差はそれほど倧きくなく、䞀郚のタスクでは画像のすべおのポむントでストリヌムを芋぀ける必芁がありたす。



瞮退した堎合には、シフトを決定するためのより単玔な方法を適甚できたす。 特に、画像のすべおのポむントに同じシフトがある堎合画像党䜓がシフトする堎合、䜍盞盞関法を適甚できたす䞡方の画像のフヌリ゚倉換を蚈算し、䜍盞の畳み蟌みを芋぀け、そのシフトを決定したす en.wikipedia.orgを参照 / wiki / Phase_correlation 。 ブロックマッチングを䜿甚するこずもできたす。りィンドり内の画像の差の暙準を最小化するシフトを芋぀けたす。 玔粋な圢では、このようなアルゎリズムは長時間機胜し、曲げやその他の歪みに察しお䞍安定です。 英語版りィキペディアには、これらのアルゎリズムがオプティカルフロヌを蚈算するための異なるオプションずしおリストされおいたすが、これらのアルゎリズムは他の目的に䜿甚でき、この問題を完党には解決しないため、あたり正確ではないようです。 画像の局所的な特性に基づいおオプティカルフロヌメ゜ッド英語版りィキペディアでは差分法ず呌ばれたすを呌び出したす。



暙準アプロヌチルヌカス-カナダ法



アルゎリズムの数孊的な説明はこの蚘事で十分詳现に説明されおいたすが 、理論的な偎面のみが圱響を受けたす。



倉䜍の結果ずしおのポむントの匷床が倉化しおいないず仮定しお、オプティカルフロヌの数孊モデルを怜蚎したす。



させお 最初の画像぀たり、時間tのある点x、yの匷床です。 2番目の画像では、この点はdx、dyにシフトしたすが、dtは通過し、 -テむラヌに埓っお匷床関数を第1項に分解したした理由は第1項のみです -座暙ず時間に関する、぀たり本質的に偏埮分 -2぀のフレヌム間のポむントx、yの茝床の倉化。



ポむントは匷床を保持しおいるず考えおいたす。぀たり、

2぀の未知数dxずdyを持぀1぀の方皋匏が埗られたす。぀たり、解くのに十分ではありたせん。぀たり、この方皋匏を理解するこずはできたせん。



この問題の最も簡単な解決策は、ルヌカスカナダアルゎリズムです。 画像オブゞェクトには1ピクセルより倧きいので、珟圚のポむントの近くでは、他のポむントもほが同じシフトを持っおいる可胜性が高いこずを意味したす。 したがっお、この点の呚りにりィンドりを取り、ガりスに埓っお分垃した重み係数を䜿甚しお、぀たり、調査䞭のピクセルに最も近いピクセルの重みが最倧になるように、最小二乗法に埓っお合蚈誀差を最小化したす。 最も単玔な倉換の埌、2぀の未知数を持぀2぀の方皋匏のシステムを取埗したす。



ご存じのように、このシステムには垞に䞀意の解があるわけではありたせん非垞に頻繁ですが。システムの行列匏がれロの堎合、解がないか無限数になりたす。 この問題は、開口の問題ずしお知られおいたす-呚期的な画像の芖野が限られおいる倉䜍のあいたいさ。 これは、ある皋床の呚期性がある画像の断片が芖野に入る堎合に察応したす。 ここでも、写真がどこに移動したかを人が明確に刀断するこずはできたせん。 問題は、このようなあいたいな状況でのノむズのために、れロの行列匏ではなく、非垞に小さな倀が埗られ、シフトの倀が非垞に倧きくなる可胜性があり、実際には特に盞関しないこずです。 そのため、特定の段階で、システムの行列匏が十分に小さくないかどうかを確認する必芁がありたす。もしそうであれば、そのような点を考慮したり、゚ラヌずしおマヌクしないでください。



なぜ機胜しないのですか


この段階で停止しおこのアルゎリズムを実装するず、正垞に機胜したす。 しかし、隣接する画像間のシフトが非垞に小さく、1ピクセルのオヌダヌである堎合にのみ、垞にではありたせん。 品質分析のために異なる盞察オフセットを持぀合成シヌケンスが生成され、このシフトは非敎数のピクセル数で衚すこずができ、結果のむメヌゞはそれに応じお補間されたす2ピクセルのシフトではすでに゚ラヌが倧きくなり、3以䞊の堎合、結果は䞀般に䞍十分になりたす。 問題は䜕ですか



その埌、数孊が甚意されたした。 圌女は、呚囲のすべおの機胜が䜕床も連続的で埮分可胜であるずいう感芚を私たちに怍え付けたした。 䞀般に、研究所では、テむラヌの匏を䜿甚しお、点の近傍に関数の近䌌を曞くように教えられたした。 ここで、この堎所で掟生物の物理的な意味は䜕ですか それらを䜿甚しお、点の有限近傍で関数の倀の倉化を決定し、導関数は無限に小さい近傍のアむデアを䞎えたす。 この近傍を拡倧するには、テヌラヌ展開に高次の導関数を远加できたすが、これはシステムの非線圢性に぀ながり、解決がはるかに困難になり、特に実際には連続的で埮分可胜な埮分を扱っおいないため、利点は疑わしいです関数であり、䞀般的にどの離散関数かは明確ではありたせん。 したがっお、関数gxを探す方が論理的です。この堎合、離散ケヌスでは、fx+ gx= fx + 1、fx+ 2gx= fx +2、fx-gx= fx-1などしたがっお、この堎合、導関数は必芁ありたせんが、元の関数の点に最も近い線圢関数が必芁です。 簡単な数孊的蚈算が解決に぀ながる どこで 。 各蟺の1぀の隣接点に導関数を構築した堎合、幞運でしたこの堎合、匏は導関数の近䌌蚈算の匏ず䞀臎したすgx=fx + 1-fx-1/ 2。 OpenCVで兞型的なこずは、ルヌカスカナダの光束を蚈算するずき、この匏が䜿甚されたす。これに぀いおは埌で説明したす。 しかし、より倚くのポむントを取埗するず、匏はすでに䞀次導関数の叀兞的な差分スキヌムずは完党に異なりたす。



明らかに、たずえば元のポむントの巊右の3぀の隣接するポむントからこの関数を構築する堎合、それはより遠くにあるポむントにたったく䟝存せず、したがっお、3぀以䞊のポむントをシフトするず、䞍適切な結果が埗られるこずがよくありたす。 たた、この関数を䜜成するポむントの数が倚いほど、䜿甚されるポむントからの結果の線の平均偏差が倧きくなりたす-再び、線圢に倉化する画像はないが、悪魔はどの画像を知っおいるかずいう事実によりたす。 実際には、2ピクセルを超えるシフトでは、ポむント数に関係なく、すでに十分に倧きな゚ラヌが発生しおいたせん。



アルゎリズムのもう1぀の匱点は、ここでも滑らかな連続関数ではなく、任意の、さらには離散的な関数を扱っおいるこずです。 そのため、画像の䞀郚の断片では、匷床が明癜な芏則性なしで、たずえばオブゞェクトの境界で、たたはノむズのために「スキップ」する可胜性がありたす。 この堎合、関数gxは、点の近くでの画像の倉化を正確に蚘述できたせん。 これを少なくずも郚分的に解決するには、元の画像を汚すこずをお勧めしたす。非垞に匷く汚すのが䟿利です。぀たり、党員のお気に入りのガりスがかし重み係数による平均化ではなく、同じボックスフィルタヌりィンドり党䜓の均䞀な平均​​化 、さらには数回続けお。 画像の滑らかさは、现郚よりも重芁です。



ただし、これらの手段によっお、怜出された2〜3ピクセルのシフトを制限するこずもできたせん。 ずころで、OpenCV 1.0では、このような光孊ストリヌムの実装があり、非垞に小さなシフトでの理想的な条件でのみ機胜したした。



どうする


党䜓で普通のルヌカス・カナダは、小さなシフトを明確に定矩しおおり、その䞭の写真はその線圢近䌌に䌌おいたす。 これを克服するために、暙準のCVテクニック-マルチスケヌリングを䜿甚したす。異なるスケヌルの画像の「ピラミッド」を構築しほずんどの堎合、各軞で2倍にスケヌリングされ、カりントしやすくなりたす、小さな画像から倧きな画像ぞの光孊ストリヌムでそれらを通過したすその埌、小さな画像で怜出された小さなシフトは、倧きな画像での倧きなシフトに察応したす。 最小の画像では、1-2ピクセル以䞋のシフトが芋぀かり、小さいスケヌルから倧きいスケヌルに移動したす。前のステップの結果を䜿甚しお、シフト倀を調敎したす。 実際、OpenCVでは、calcOptFlowPyrLK関数によっお実装されたす。 このピラミッドアルゎリズムを䜿甚するず、倚くのポむントで線圢近䌌を蚈算する必芁がなくなりたす。ピラミッドのレベルを増やし、各レベルでこの関数のかなり倧たかな近䌌をずる方が簡単です。 したがっお、OpenCVでは、2぀の隣接ポむントのみの蚈算がありたす。 したがっお、このアルゎリズムの実装に関連しお、導関数に察する近䌌関数の利点に関する結論は圹に立たないこずが刀明したした。このような数の制埡点では、導関数が最良の近䌌関数です。



そしお、他に䜕がありたすか



このアルゎリズムは、光束を蚈算するための唯䞀のオプションではありたせん。 OpenCVには、Lucas-Canadaストリヌムに加えお、FarnebackストリヌムずSimpleFlowもありたす。これらは、しばしばHorn – Schunckアルゎリズムを指したす。



Horn – Schunckメ゜ッドは、Lucas-Canadaメ゜ッドよりも倚少グロヌバルです。 これは、画像党䜓の光束が非垞に滑らかになるずいう仮定に基づいおいたす。 同じ方皋匏から 機胜に行くこずを提案 、぀たり、重み係数αでシフトの急激な倉化がないずいう芁件を远加したす。 この関数を最小化するず、2぀の方皋匏のシステムが埗られたす。







これらの方皋匏では、ラプラシアンはおよそ蚈算するこずを提案したす -平均倀ずの差。 各ピクセルに察しお蚘述する方皋匏系を取埗し、䞀般的なシステムを反埩的に解きたす。







このアルゎリズムでは、マルチスケヌリングを䜿甚するこずも提案されおおり、画像を2倍ではなく、0.65の係数でスケヌリングするこずをお勧めしたす。



このアルゎリズムは、OpenCVの最初のバヌゞョンで実装されたしたが、埌に攟棄されたした。



Farnebackは、2次圢匏を䜿甚しお近傍の匷床の倉化を近䌌するこずを提案したしたI = xAx + bx + c with symmetric matrix A実際、Taylor展開を第1項に考慮しお、線圢近䌌I = bx + cを採甚したした近䌌の粟床を䞊げるこずに決めた回数画像がこの近傍内でシフトした堎合、 、二次展開に眮き換えお、括匧を開きたす。





。



これで、䞡方の写真のA、b、cの倀を蚈算でき、このシステムはdに関しお冗長になり特に最初の匏はわかりにくい、䞀般にdは2番目の匏から埗られたす 。 次の近䌌に頌らなければなりたせん 。 簡単にするために瀺す それから私達はちょうど埗る 。



蚈算のノむズを補正するために、怜蚎䞭のポむントの近くでは、すべおのポむントがほが同じシフトを持っおいるずいう仮定に再び戻りたす。 したがっお、゚ラヌを再床統合したす ガりスの重み係数wを䜿甚しおりィンドり䞊で、この合蚈誀差を最小化するベクトルdを芋぀けたす。 次に、最適な倀を取埗したす および察応する最小誀差 。 ぀たり、各ポむントに぀いお蚈算する必芁がありたす 、りィンドり党䜓で平均し、行列を反転しお結果を取埗したす。 したがっお、これらの積は画像党䜓に぀いお蚈算でき、異なるポむントに察しお事前に蚈算された倀を䜿甚できたす。぀たり、これは、高密床ストリヌムを考慮するこずが理にかなっおいる堎合にのみ圓おはたりたす。



い぀ものように、このアルゎリズムには倚くの修正ず改善があり、䞻に既知のアプリオリ情報フロヌの所定の初期近䌌の䜿甚を可胜にし、再びマルチスケヌリングを可胜にしたす。



SimpleFlowメ゜ッドは、次の考え方に基づいおいたす。導関数を怜玢したりィンドりのサむズ以䞊のシフトを決定する方法がただわからない堎合、なぜ導関数の蚈算に煩わされるのでしょうか。 りィンドり内で最も類䌌したポむントを芋぀けたしょう たた、あいたいさを解決し、ノむズを補正するために、流れが連続的であり、このポむントの近くではすべおのポむントがほが同じシフトを持぀こずを考慮したす。 たた、りィンドりサむズの問題は、マルチスケヌリングによっお再び解決されたす。



より厳密には、アルゎリズムは次のずおりです。りィンドり内のすべおのポむントに察しお、開始ポむントからこのポむントぞの遷移の確率に逆察数䟝存性で察応する「゚ネルギヌ」の関数がありたす。 。 さらに、この゚ネルギヌずガりスりィンドりの畳み蟌みが考慮されたす この関数を最小化する倀dx、dyが芋぀かりたした。 サブピクセルの粟床を埗るには、芋぀かった最適点dx、dyの小さな近傍を考慮し、その䞭の゚ネルギヌ関数のピヌクを攟物面のピヌクずしお探したす。 たた、前述のように、この手順はスケヌリングされた画像のピラミッドに察しお実行されたす。 たた、蚈算を高速化するためのcな方法もありたすが、誰もが自分でそれを理解するのは興味深いこずです。 このため、このアルゎリズムは理論的に非垞に高速で、粟床が高いこずが重芁です。 そしお、圌は以前のものほど問題がなく、シフトが倧きければ倧きいほど、それはより悪く怜出されたす。



そしお、あなたが匷さではない堎合



䞊蚘では、ポむント間の察応は異なる倀で決定できるず蚀われたしたが、なぜ匷床だけを考慮するのですか そしお、他の数量を枛らすこずができるため、適切なフィルタヌで画像をフィルタヌ凊理し、フィルタヌ凊理された画像を䞊蚘のアルゎリズムの入力に送りたす。 したがっお、光ストリヌムを䜿甚する堎合は、たず、どの画像特性が条件の䞋で最も安定するかを考え、適切なフィルタリングを実行しお、この特性がアルゎリズムの入力での匷床にならないようにしたす。



緎習する



OpenCVが提䟛するアルゎリズムを実際に詊しおみたしょう。



ここでは、さたざたなシフト、回転、射圱倉換、セグメント、さたざたなノむズなどを䜿甚しお、パラメヌタを倉曎し、入力シヌケンスを倉曎しお、各アルゎリズムのさたざたな研究を行うこずができたす。これには時間がかかり、珟圚の蚘事のサむズを超えたすしたがっお、ここでは、固定距離の小さな画像シフトず小さなノむズの単玔な平行移動に限定するこずを提案したす。 これにより、䞀般的な甚語でアルゎリズムの実行方法ずそれらのどれがよりクヌルであるかを理解できたす。



手順の構文は、 マニュアルペヌゞで詳现に説明されおいたす。ここでは、コメントずずもにsqueeze-translationを瀺したす。



埓来のLucas-Canadaは、calcOpticalFlowPyrLKプロシヌゞャにピラミッドを実装しおいたす。 アルゎリズムは、スパヌスストリヌムを蚈算したす。぀たり、最初の画像の特定のポむントセットに぀いお、2番目の画像の䜍眮を掚定したす。 入力パラメヌタヌは非垞に明癜です2぀の入力画像、ポむントの入力および出力セット、status-察応するポむントが正垞に怜出されたかどうかを瀺す出力ベクトル、err-察応するポむントの掚定誀差の出力ベクトル、WinSize-ガりス平均が発生するりィンドりのサむズ、 21x21、それはうたく機胜したした、maxLevel-ピラミッドのレむダヌ数-1、぀たり最埌のレむダヌの数、私は5぀の基準を取りたした-シフトを決定する反埩プロセスを終了するための条件゚ラヌを反埩的に最小化する-これ パラメヌタIはデフォルト、フラグを巊 - 远加フラグは、初期の近䌌法たたは遞択フロヌ掚定誀差、minEigThresholdずしお䜿甚するこずができる - 募配閟倀、瞮退行列ず考えられるの䞋、私はデフォルトで巊。 OpenCV 2.4.1以降では、事前に蚈算されたスケヌリング画像のピラミッドを䜿甚しおストリヌムを蚈算できたす。



䜜業の結果、小芏暡および倧芏暡なシフトの䞡方が正垞に安定しお怜出され、かなり倧きなノむズに耐えるこずができたす。動䜜時間は5局ピラミッドコアi7 950で400ポむントで玄10 msです。



ちなみに、このアルゎリズムは、高密床バヌゞョンず疎バヌゞョンの䞡方のGpuCUDAにも実装されおいたす。



FarnebackストリヌムはcalcOpticalFlowFarnebackプロシヌゞャによっお実装され、高密床ストリヌム、぀たり各ポむントのシフトが蚈算されたす。 パラメヌタヌ入力画像、フロヌトの2チャネルマトリックス圢匏の出力ストリヌム、pyr_scaleはピラミッドのレむダヌ間のスケヌルの比率を決定したす。levels-ピラミッドのレベル数、winsize-平均化されるりィンドりのサむズ、iterations-各レベルでの反埩数、poly_n- Aおよびbの倀を掚定する倚項匏のサむズ、poly_sigmaは埮分を平滑化するずきのガりスがかしのシグマ、掚奚パラメヌタヌ倀はマニュアルに瀺され、フラグは远加フラグです。たずえば、初期近䌌を䜿甚できたす IX流れたたはその他のりィンドり䞊で平均。



このアルゎリズムは私の芳察によれば安定性がはるかに䜎く、かなり均䞀な画像を芋逃しやすく明らかに、問題は倱敗したポむントのフィルタリングの欠劂です、倧きなシフトを適切に刀断できたせん。 512x512の画像で600ミリ秒働いた。



SimpleFlowストリヌムはcalcOpticalFlowSFプロシヌゞャを実装し再び、高密床ストリヌムが蚈算されたす、デフォルト倀のない倚くの神秘的なパラメヌタヌを持ち、䞀般的に、珟時点ではペヌゞの情報は非垞に簡朔に提䟛されたす。 それを理解しおみたしょう。 最初の3぀は入力画像で、出力2チャンネルです。 レむダヌ-ピラミッド内のレむダヌの数、぀たり、元の画像がスケヌリングされる回数。 averageing_block_size-ピクセル゚ネルギヌ関数を蚈算したりィンドりのサむズ。 max_flow-各ステップで決定できるようにする最倧シフト。実際、りィンドりのサむズによっお決定されたすintである理由は完党には明らかではありたせん。 ここで停止するか、さらにいく぀かのパラメヌタヌを蚭定するこずができたすが、それらのいく぀かの意味は私を惑わしおいたす。



このサむトは、 calcOpticalFlowSFframe1、frame2、flow、3、2、4、4.1、25.5、18、55.0、25.5、0.35、18、55.0、25.5、10で始たる䜿甚䟋を提䟛したす。 ;



私のアルゎリズムは他のアルゎリズムよりもずっず遅く、512x512の画像に぀き玄9〜12秒です。 䜜業の結果は、ファヌンバックよりももっずもらしいようです。少なくずも、均䞀な画像の倉化はより明確に刀断され、倧きな倉化の堎合ははるかにうたく機胜したす。



結論



オプティカルストリヌムをどこかで䜿甚する堎合は、たずそれが必芁かどうかを考えたす。倚くの堎合、より簡単な方法で実行できたす。 自分でフロヌを実装するこずは、数回考えられおいるだけです。各アルゎリズムには、倚くのトリック、埮劙さ、最適化がありたす。 , , OpenCV (, , ). SSE , , CUDA OpenCL . . (. . sparse ), calcOpticalFlowPyrLK, , . dense- calcOpticalFlowSF, . , calcOpticalFlowFarneback, , .



文孊



docs.opencv.org/modules/video/doc/motion_analysis_and_object_tracking.html

Pyramidal Implementation of the Lucas Kanade Feature Tracker. Description of the algorithm — Jean-Yves Bouguet

Two-Frame Motion Estimation Based on Polynomial Expansion — Gunnar Farneback

SimpleFlow: A Non-iterative, Sublinear Optical Flow Algorithm — Michael Tao, Jiamin Bai, Pushmeet Kohli, and Sylvain Paris

Horn-Schunck Optical Flow with a Multi-Scale Strategy — Enric Meinhardt-Llopis, Javier Sanchez

en.wikipedia.org/wiki/Optical_flow



All Articles