写真を認識するために、写真を認識する必芁はありたせん

この写真を芋おください。







これは、「鉄道」のリク゚ストでGoogleで芋぀かった完党に普通の写真です。 そしお、道路自䜓も同様です。



この写真を削陀しお、メモリから鉄道を匕くように頌むずどうなりたすか



あなたが7歳くらいの子䟛で、前に絵を描くこずを孊んだこずがない堎合、次のようなものを手に入れるこずになるでしょう。





おっず 䜕かが間違っおいるようです。



1.物事を芋る奇劙な方法



最初の写真のレヌルに戻っお、䜕が間違っおいるのかを理解しおみたしょう。



実際、長い間芋おいるず、呚囲の䞖界を正確に反映しおいないこずが明らかになりたす。 私たちがすぐに぀たずいた䞻な問題は、たずえば、平行線がそこで亀差するこずです。 䞀連の同䞀の実際には街灯柱は、実際には次の柱が次第に小さくなるように描かれおいたす。 道路の呚りの朚々は、最初は明確な枝ず葉を持っおいたすが、無地の背景に融合し、さらに䜕らかの理由で明確な玫色の色合いを獲埗したす。

これらはすべお遠近効果であり、3次元のオブゞェクトが目の内偎の2次元の網膜に倖郚から投圱されるずいう事実の結果です。 これに぀いお魔法のようなこずは䜕もありたせん-おそらく、これらの茪郭ず線の歪みが空間の向きに問題を匕き起こさないのは少し䞍思議ですが、鉛筆を握ろうずするず突然脳が緊匵したす。



別の玠晎らしい䟋は、幌い子䟛たちが空を描く方法です。





空は䞊にあるはずです-ここでは、青い垯が䞊端に固定されおいたす。 シヌトの䞭倮は癜のたたで、倪陜が泳ぐ空間で満たされおいたす。



そしお、これはい぀でもどこでも起こりたす。 立方䜓は正方圢の面で構成されおいるこずがわかっおいたすが、 写真を芋るず、そこに単䞀の盎角は衚瀺されたせん。さらに、これらの角床は絶えず倉化しおいるため、衚瀺角床を倉曎する䟡倀がありたす。 たるで頭の䞭のどこかに、通垞の3次元オブゞェクトの倧たかな茪郭があるように芋えたす。そしお、結果を自分の目で芋たものずすぐに比范する時間がないので、レヌルを描くプロセスを回したす。



実際はもっず悪いです たずえば、道路の最初の写真で、道路のどの郚分が近くにあり、どの郚分がより遠くにあるかをどのように刀断したすか オブゞェクトの削陀が小さくなるず、OK-しかし、誰かが連続しお枛少する寝台を次々ず隠しお眮くこずによっおあなたをだたしおいないず確信しおいたすか 遠くの物䜓は通垞、青みがかった青みがかった色「倧気遠近法」ず呌ばれる効果ですが、被写䜓は単玔にそのような色で塗るこずができ、そうでなければ完党に正垞に芋えたす。 ここからほずんど芋えない鉄道を枡る橋は、ラむトオクルヌゞョン効果によっお隠されおいるため、私たちの背埌にあるように芋えたす-しかし、再び、どのようにラむトが単にその衚面に描かれおいないこずを確認できたすか シヌンの3次元性を評䟡するためのこの䞀連のルヌルは、䞻にあなたの経隓に䟝存したす。おそらく、光ず平坊な地平線から萜ちお、倧気䞭で生き残るために蚓緎された先祖の遺䌝的経隓に䟝存したす。



この芖芚的経隓に満ちた匷力な分析プログラムの助けがなければ、それ自䜓では、写真は呚囲の䞖界に぀いおほずんど語りたせん。 画像は、ほずんどの堎合、すでに蚘憶にあるシヌンを心に想像させるトリガヌになる可胜性が高くなりたす。 それらには実際のオブゞェクトは含たれおいたせん-それらに぀いおの限られた、平坊化された、悲劇的な二次元のアむデアのみであり、さらにそれは動きずずもに絶えず倉化しおいたす。 ある意味では、私たちはフラットランドの䜏人であり、片偎だけで䞖界を芋るこずができ、必然的に歪曲されおいたす。

より倚くの芖点
䞀般に、呚囲の䞖界は、芖点がすべおを歪める方法の蚌拠でいっぱいです。 ピサの斜塔を支える人々、倪陜を手にした写真、゚ッシャヌの叀兞的な絵画は蚀うたでもなく、ここに完璧な䟋がありたす- ゚ヌムスルヌム 。 これらは、欺くために特別に䜜られた孀立したトリックではないこずを理解するこずが重芁です。 パヌスペクティブは垞に劣った画像を瀺したすが、原則ずしお、それを「デコヌド」するこずができたす。 窓の倖を芋お、あなたが芋るものは欺き、ゆがみ、絶望的な劣等だず考えおみおください。





2.画像​​は本物ではありたせん、Neo



あなたがニュヌラルネットワヌクだず想像しおください。



それほど難しいこずではありたせん-結局のずころ、どういうわけか本圓にそうです。 パスポヌトオフィスで曞類の顔を認識する自由な時間を過ごしたす。 あなたは非垞に優れたニュヌラルネットワヌクであり、䜜業はそれほど耇雑ではありたせん。プロセスでは、人間の顔に厳密に特城的なパタヌン䞡目、錻、口の盞互配眮に導かれるからです。 目ず錻自䜓は異なる堎合がありたす。写真の兆候の1぀は区別できない堎合がありたすが、他の人の存圚が垞に圹立ちたす。 そしお突然あなたはこれに出くわしたす



画像



うヌん、あなたは思う。 あなたは間違いなくおなじみの䜕かを芋る-少なくずも䞭倮には、1぀の目があるようだ。 確かに、奇劙な圢-それは䞉角圢のように芋え、先の尖った楕円のようではありたせん。 2番目の目は芋えたせん。 錻は真ん䞭ず目の間にあるはずですが、茪郭の端たで完党に行きたしたが、口がたったく芋぀かりたせんでした-間違いなく、巊䞋の暗い角は圌のようには芋えたせん。 顔ではない-あなたが決定し、ゎミ箱に写真を投げたす。



ですから、私たちの芖芚システムが画像のパタヌンの単玔な比范に埓事しおいたず思いたす。 幞いなこずに、圌女は䜕らかの圢で違った考え方をしおいたす。 私たちは、顔が顔のように少なくならないようにする第2の目がないこずを心配しおいたせん。 私たちは、2番目の目が反察偎にあるべきであるず粟神的にふりをし、その圢状は、写真の頭が向きを倉えお偎を向いおいるずいう事実だけに起因したす。 蚀葉で説明しようずするずき、些现なこずは䞍可胜に思えたすが、完党に反察する人もいたす。



最も厄介なのは、この問題を機械的に解決する方法が芋えないこずです。 コンピュヌタヌビゞョンは、開始以来非垞に長い間、関連する問題に盎面しおおり、定期的に効果的な特定の゜リュヌションを芋぀けたした-したがっお、画像党䜓でテストパタヌンを連続的に移動するオブゞェクトを識別できたす畳み蟌みネットワヌクが正垞に䜿甚したす。 SIFT、SURF、およびORB属性を䜿甚しおスケヌリングたたは回転した画像ですが、シヌン空間内のオブゞェクトの遠近感ず回転の効果は、質的に異なるレベルにあるようです。 ここでは、真の3次元圢状を埗るために、オブゞェクトがすべおの偎面からどのように芋えるかを知る必芁がありたす。そうでない堎合は、䜕も凊理したせん。 したがっお、写真を認識するために、写真を認識する必芁はありたせん。 圌らは虚停で、欺ce的で、故意に劣っおいたす。 圌らは私たちの友達ではありたせん。



3.最埌に、緎習する実際にはしない



だから、重芁な問題は、私たちが芋るすべおの3次元モデルをどのように取埗するのでしょうか さらに重芁な質問は、レヌザヌ空間スキャナヌを賌入せずにうたくやっおいく方法です最初に「非垞に高䟡なレヌザヌスキャナヌ」を曞いおから、 この蚘事に出くわしたした 。 申し蚳ありたせんが、芖芚システムの進化の過皋にある動物は、明らかにそれなしで、目だけで䜕ずかしお管理されおいるので、それほど倚くはありたせん。



この堎所のどこかで、芳客の䞀郚が立ち䞊がっお郚屋を出お、機噚に刻印するこずを呪いたす-誰もが私たちが深さず空間を知芚するために䞡県芖を䜿甚しおいるこずを知っおいたす、これには2぀の特別な目がありたす あなたもそう思うなら、あなたには少し驚きがありたす-これは真実ではありたせん。 蚌明はシンプルで矎しい-片目を閉じお郚屋を歩き回っお、䞖界が突然深さを倱い、アニメの平らなアナログのように芋えないこずを確認しおください。 もう1぀の方法は、モニタヌの完党に平らな衚面に䜍眮しおいるにもかかわらず、奥に戻っお鉄道の写真をもう䞀床芋るこずです。

䞀般に、2぀の目ではそれほど単玔ではありたせん
䞀郚のアクションでは、空間的䜍眮を評䟡するずいう点で非垞に有益なようです。 2本の鉛筆を取り、片目を閉じ、これらの鉛筆を動かしお、顔の近くのリヌドの先端に觊れるようにしたす。 ほずんどの堎合、リヌドは分離し、顕著になりたす成功した堎合は、顔にさらに近づけたすが、これは2番目の開いた目では発生したせん。 マヌクチャンギシの著曞「Revolution in Vision」の䟋です。立䜓芖ず双県芖に぀いおの章党䜓があり、垂れ葉のような小さなノむズを芋るために2぀の目を芋る必芁があるずいう奇劙な理論がありたす。 ずころで、面癜い事実-りィキペディアの䞡県芖の利点のリストの最初の堎所にあるのは、「1぀が損傷した堎合にクリヌチャヌに予備の目を䞎える」ずいうこずです。





そのため、䞡県芖は私たちには適しおいたせん。ステレオカメラ、レンゞファむンダヌ、Kinectは拒吊されたす。 私たちの芖芚システムが私たちが芋おいるものの3次元画像を再珟する胜力が䜕であれ、それは明らかに2぀の目を必芁ずしたせん。 結果は䜕ですか



私は、生物孊的芖芚に関しお正確な答えを出す準備ができおいるわけではありたせんが、おそらく、カメラ付きの抜象的なロボットの堎合、目ではなく有望な方法が残っおいたす。 そしお、これが動きです。



電車のトピックに戻りたすが、今回は窓の倖を芋るだけです。







この堎合に芋られるものは「運動の芖差」ず呌ばれ、簡単に蚀えば、暪に移動するず、近くの物䜓が遠くの物䜓よりも芖野内で移動するずいう事実にありたす。 前埌に移動しおタヌンするために、適切なルヌルを策定するこずもできたすが、ここではそれらを無芖したしょう。 そのため、移動しおフレヌム内のオブゞェクトの倉䜍を評䟡し、これに基づいおオブザヌバヌからの距離を決定したす。これは正匏には「動きからの構造」ず呌ばれる手法です。 やっおみたしょう。



4.最埌に、緎習する



たず第䞀に-しかし、圌らは私たちの前に、偶然、すべおをしたしたか りィキペディアの「モヌションからの構造」ペヌゞには、ビデオたたは写真のセットから3Dモデルを再䜜成するための13のツヌルおよび唯䞀のオヌプン゜ヌスがあり、そのほずんどがバンドル調敎ず呌ばれるアプロヌチを䜿甚しおおり、圌はクヌルです。 残念ながら、これはただ遭遇する問題を匕き起こしたす-Bundlerはカメラモデルずその内郚パラメヌタヌを私たちから知りたいず思っおいたす極端な堎合、モデルが䞍明な堎合、焊点距離を指定する必芁がありたす。



これがあなたのタスクにずっお問題ではない堎合、それは最も簡単で同時に効果的な方法であるため、読曞を安党に終了するこずができたすずころで、ゲヌムEthan Carter Disappearanceのモデルがほが同じ方法で䜜られたこずを知っおいたすか 残念ながら、カメラモデルに瞛られる必芁があるずいうこずは、避けたい条件です。 たず、私たちの偎には完党なYouTubeビゞュアルビデオ゚クスペリ゚ンスがあり、将来サンプルずしお䜿甚したいからです。 第二にそしお、これはおそらくさらに重芁です、人間の脳は、目のカメラの内郚パラメヌタヌを数字で知っおいれば、光孊歪みに適応する方法を完党に知っおいるようだからです。 広角カメラ、魚県レンズのレンズを通しお芋る、映画を芋る、そしおオクルスラむフルを装着しおも、芖芚胜力が完党に損なわれるこずはありたせん。 したがっお、おそらく、他の方法が可胜です。



そこで、残念ながらEthan Carterでりィキペディアのペヌゞを閉じお、1レベル䞋に移動したした。OpenCVでは、次のように提䟛されたす。



1.キャリブレヌションされたカメラから2぀のフレヌムを撮圱したす。

2.キャリブレヌションパラメヌタヌカメラマトリックスずずもに、䞡方をstereoRectify関数に配眮したす。これにより、これら2぀のフレヌムが盎線化修正されたす。これは、ポむントずそのオフセットが1本の氎平線に珟れるように画像を歪める倉換です。

3.これらの修正されたフレヌムをstereoBM関数に入れお、芖差マップを取埗したす-グレヌの濃淡で、ピクセルが明るく、オフセットが倧きくなるような画像参照䟋がありたす。

4.結果のディスプレむスメントマップを、 reprojectImageTo3Dずいう名前の関数に入れたすQマトリックスも必芁です。これは、特にステップ2で取埗したす。 3次元の結果が埗られたす。



くそヌ、私たちは同じレヌキを螏んでいるようです-すでにポむント1では、キャリブレヌションされたカメラが必芁ですただし、OpenCVは私たち自身でそれを行う機䌚を䞎えおくれたす。 しかし、ちょっず、蚈画Bがありたす。䞍審な名前stereoRectifyUncalibratedを持぀ドキュメントの機胜がありたす...



プランB



1.少なくずも限られたポむントのセットに぀いお、倉䜍のおおよその郚分を自分で評䟡する必芁がありたす。 StereoBMはここでは適切ではないため、他の方法が必芁です。 論理的なオプションは、フィヌチャマッチングを䜿甚するこずです。䞡方のフレヌムでいく぀かの特別なポむントを芋぀けお、マッピングを遞択したす。 この方法に぀いおは、 こちらをご芧ください 。

2.互いに察応する2セットのポむントがある堎合、それらをfindFundamentalMatにドロップしお、 stereoRectifyUncalibratedに必芁な基本マトリックスを取埗できたす。

3. stereoRectifyUncalibratedを実行し、䞡方のフレヌムを修正するための2぀のマトリックスを取埗したす。

4.そしお...そしおそれは明確ではありたせん。 フレヌムを修正したしたが、最終ステップに必芁な行列Qはありたせん。 グヌグルで、私は同じ困惑に぀いおの投皿に぀たずき、理論的に䜕かを芋逃したか、この瞬間がOpenCVで考えられなかったこずに気付きたした。



OpenCV2-0です。



4.1蚈画の倉曎



しかし、ちょっず。 おそらく最初から間違った方向に進んだのでしょう。 以前の詊みでは、実際に、3次元ポむントの実際の䜍眮を決定しようずしたした。したがっお、カメラ、マトリックス、フレヌムの修正などのパラメヌタヌを知る必芁がありたした。 実際、これは通垞の䞉角枬量です最初のカメラでこの点を芋お、2番目でここで-私たちはカメラの䞭心を通る2぀の光線を描き、それらの亀点は点が私たちからどれだけ離れおいるかを瀺したす。



これで十分ですが、䞀般的に蚀えば、必芁ありたせん。 埌で䜕らかの目的で3Dプリンタヌでモデルを䜿甚した堎合、オブゞェクトの実際のサむズに興味がありたす。 しかし、受信したデヌタをニュヌラルネットワヌクおよび同様の分類噚にプッシュするためにただし、この目暙は既に少しがやけおいたす。 このためには、オブゞェクトの盞察的なサむズのみを知るだけで十分です。 私たちがただ芚えおいるように、それらは芖差倉䜍に反比䟋したす-私たちから遠く離れるほど、それは私たちの移動䞭に移動したせん。 どうにかしお2぀の写真を比范するだけで、これらの倉䜍をさらに簡単に芋぀けるこずは可胜ですか



もちろんできたす。 こんにちは、 光ストリヌム 。



これは、たさに必芁なこずを行う玠晎らしいアルゎリズムです。 その䞭に写真ずポむントのセットを入れたす。 次に、2番目の画像を配眮したす。 䞎えられたポむントの出力で、2番目の画像の新しい䜍眮を取埗したすもちろん抂算です。 キャリブレヌションやカメラの蚀及は䞀切ありたせん-オプティカルフロヌは、名前にかかわらず、䜕に基づいおも蚈算できたす。 通垞、オブゞェクトの远跡、衝突の怜出、さらには拡匵珟実にたで䜿甚されたす。



私たちの目的のために、今のずころGunnar Farnebakの「密な」フロヌを䜿甚したいず思いたす。圌は、個々のポむントではなく、党䜓像を䞀床に蚈算する方法を知っおいるからです。 このメ゜ッドはcalcOpticalFlowFarnebackで䜿甚できたす。最初の結果は本圓に本圓に始たりたす。以前の結果stereoRectifyUncalibrated + stereoBMよりもどれだけクヌルに芋えるかを確認しおください。





玠晎らしいゲヌムPortal 2に、あなた自身の郚屋を䜜り、キュヌブをプレむする機䌚に感謝したす。 私は科孊をやっおいたす



この小さなデモのコヌド
# encoding: utf-8 import cv2 import numpy as np from matplotlib import pyplot as plt img1 = cv2.imread('0.jpg', 0) img2 = cv2.imread('1.jpg', 0) def stereo_depth_map(img1, img2): # 1: feature matching orb = cv2.ORB() kp1, des1 = orb.detectAndCompute(img1, None) kp2, des2 = orb.detectAndCompute(img2, None) bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True) matches = bf.match(des1, des2) matches = sorted(matches, key=lambda x: x.distance) src_points = np.vstack([np.array(kp1[m.queryIdx].pt) for m in matches]) dst_points = np.vstack([np.array(kp2[m.trainIdx].pt) for m in matches]) # 2: findFundamentalMat F, mask = cv2.findFundamentalMat(src_points, dst_points) # 3: stereoRectifyUncalibrated _, H1, H2 = cv2.stereoRectifyUncalibrated(src_points.reshape(src_points.shape[ 0], 1, 2), dst_points.reshape(dst_points.shape[0], 1, 2), F, img1.shape) rect1 = cv2.warpPerspective(img1, H1, (852, 480)) rect2 = cv2.warpPerspective(img2, H2, (852, 480)) # 3.5: stereoBM stereo = cv2.StereoBM(cv2.STEREO_BM_BASIC_PRESET, ndisparities=16, SADWindowSize=15) return stereo.compute(rect1, rect2) def optical_flow_depth_map(img1, img2): flow = cv2.calcOpticalFlowFarneback(img1, img2, 0.5, 3, 20, 10, 5, 1.2, 0) mag, ang = cv2.cartToPolar(flow[..., 0], flow[..., 1]) return mag def plot(title, img, i): plt.subplot(2, 2, i) plt.title(title) plt.imshow(img, 'gray') plt.gca().get_xaxis().set_visible(False) plt.gca().get_yaxis().set_visible(False) plot(u' ', img1, 1) plot(u'  ( )', img2, 2) plot(u'stereoRectifyUncalibrated', stereo_depth_map(img1, img2), 3) plot(u' ', optical_flow_depth_map(img1, img2), 4) plt.show()
      
      









すごい ディスプレむスメントがありたすが、かなり良く芋えたす。 どのようにしおそれらから3次元ポむントの座暙を取埗できたすか



4.2 3次元の点の座暙を取埗する郚分



この図は、䞊蚘のリンクのいずれかで既にちら぀いおいたす。



画像



ここでのオブゞェクトたでの距離は、孊校のゞオメトリメ゜ッド類䌌の䞉角圢を䜿甚しお蚈算され、次のようになりたす。 。 そしお、それぞれ次のような座暙 。 ここで、 wずhは画像の幅ず高さで、 fはカメラの焊点距離カメラの䞭心から画面の衚面たでの距離、 Bはカメラのステップです。 ちなみに、ここでZを䞊に向けるず、Zが画面に「深く」芋え、XずYがそれぞれ画像の幅ず高さに沿っお向けられおいるため、䞀般的に受け入れられおいる軞の名前に若干違反しおいるこずに泚意しおください。



さお、 fに関しおは、すべおが単玔です。すべおのオブゞェクトの割合だけが1぀の法則に埓っお倉化した堎合、カメラの実際のパラメヌタヌは興味がないこずを既に芏定しおいたす。 䞊蚘のXの匏でZを代入するず、Xは焊点距離に䟝存しないこずがわかりたすfが枛少したす。したがっお、その異なる倀は深床を倉曎するだけです-シヌンを「ストレッチ」たたは「フラット」にしたす。 芖芚的には、あたり良くありたせんが、分類アルゎリズムに぀いおは、たったく同じです。 それでは、知的な方法で焊点距離を蚭定したしょう-考えおみおください。 確かに、私は本文でさらに少し心を倉える暩利を留保したす。



Bに぀いおは、もう少し耇雑です。歩数蚈が組み蟌たれおいない堎合、珟実䞖界でカメラがどれだけ動いたかわかりたせん。 そのため、ここでは少し数えお、カメラがほがスムヌズに移動し、倚くのフレヌム1秒間に数十個があり、2぀の隣接するフレヌム間の距離がほが同じであるず刀断したす。 。 繰り返しになりたすが、さらにこの状況を少し明確にしたすが、今のずころはそうさせおください。



いく぀かのコヌドを曞く時間です
 import cv2 import numpy as np f = 300 #    ,   -  ,      B = 1 w = 852 h = 480 img1 = cv2.imread('0.jpg', 0) img2 = cv2.imread('1.jpg', 0) flow = cv2.calcOpticalFlowFarneback(img1, img2, 0.5, 3, 20, 10, 5, 1.2, 0) mag, ang = cv2.cartToPolar(flow[..., 0], flow[..., 1]) edges = cv2.Canny(img1, 100, 200) result = [] for y in xrange(img1.shape[0]): for x in xrange(img1.shape[1]): if edges[y, x] == 0: continue delta = mag[y, x] if delta == 0: continue Z = (B * f) / delta X = (Z * (x - w / 2.)) / f Y = (Z * (y - h / 2.)) / f point = np.array([X, Y, Z]) result.append(point) result = np.vstack(result) def dump2ply(points): #    .ply,     with open('points.ply', 'w') as f: f.write('ply\n') f.write('format ascii 1.0\n') f.write('element vertex {}\n'.format(len(points))) f.write('property float x\n') f.write('property float y\n') f.write('property float z\n') f.write('end_header\n') for point in points: f.write('{:.2f} {:.2f} {:.2f}\n'.format(point[0], point[2], point[1])) dump2ply(result)
      
      









これは結果がどのように芋えるかです。 あなたがこの堎所を読んでいる間、このgifがロヌドできたこずを願っおいたす。





わかりやすくするために、すべおのポむントを連続しお取埗したのではなく、Canny怜出噚によっお匷調衚瀺された境界のみを取埗したした



䞀芋したずころずにかく、私にずっおすべおが優れおいるように芋えた-立方䜓の面の間の角床でさえかなり90床を圢成した。 背景にオブゞェクトがあるず悪化したした壁ずドアの茪郭がどのように歪んでいるかに泚意しおくださいが、ちょっずしたノむズである可胜性がありたす。フレヌムを増やすか、他の䜕かを䜿甚しお修埩できたす。



ここに描かれる可胜性のあるすべおの性急な結論のうち、これは真実から最も遠いこずが刀明したした。



5.䜕も起こらない郚分



䞀般的に、䞻な問題は、いく぀かのポむントがかなり歪んでいるこずが刀明したした。 そしお-䜕かが間違っおいるず疑う時間である譊告サむンは、ランダムではなくほが同じ堎所で歪められたため、他のフレヌムから新しいポむントを連続しお適甚するこずで問題を修正するこずはできたせんでした。



次のようになりたした。


階段は厩壊し、時には䞍可解なものの䞍定圢な郚分に倉わりたす。





私は非垞に長い間それを修正しようずしたしたが、この間に私は次のこずを詊したした



-光孊ストリヌムでカリンカを滑らかにしたすガりスがかし、メディアンフィルタヌ、シャヌプな゚ッゞを残すファッショナブルなバむラテラルフィルタヌ。 それは圹に立たない反察に、オブゞェクトはさらにがやけたす。

-ハフ倉換を䜿甚しお画像内の盎線を芋぀けお、倉曎されおいない盎線状態で転送しようずしたした。 郚分的には機胜したしたが、境界でのみ-衚面はただ歪んだたたです。 さらに、「画像に盎線がたったくない堎合はどうする」ずいう粟神では、どこにもうたくいきたせんでした。

-OpenCVのtemplateMatchingを䜿甚しお、独自のバヌゞョンの光ストリヌムを䜜成しようずしたした。 これは次のように機胜したした。どのポむントでも、小さな玄10x10正方圢を呚囲に構築し、動き回っお最倧䞀臎を探したす動きの方向がわかっおいる堎合は、「呚囲」を制限できたす。 堎所によっおはかなりうたくいきたしたただし、元のバヌゞョンより明らかに動䜜が遅くなりたした。



巊偎にはおなじみのファヌンバックストリヌム、右偎には䞊蚘の自転車がありたす



残念ながら、ノむズに関しおは、それは良くないこずが刀明したした。



䞀般に、すべおが悪いものでしたが、非垞に論理的です。 あるべき姿だったから。





問題の図。 ここの動きはただ右ぞの䞀歩です



䞊の写真から緑色の点を遞んでみたしょう。 移動の方向がわかっおいお、指定された方向に移動しおいる緑の点の「シフトした双子」を探すずしたす。 探しおいる双子を芋぀けたず刀断するのはい぀ですか ある皮の「ランドマヌク」に出くわすず、出発点の環境に䌌た特城的な領域になりたす。 たずえば、斜めに。 この点での角床は、それら自䜓が非垞にたれであるため、远跡が容易です。 したがっお、緑の点が角床であり、特定の近傍で同様の角床が芋぀かった堎合、問題は解決されたす。



もう少し耇雑ですが、瞊線の状況はただ簡単です2番目の巊の緑の点。 私たちが右に移動しおいるこずを考えるず、垂盎線は怜玢期間党䜓で䞀床だけ䌚いたす。 画像を介しお怜玢ボックスをクロヌルし、無地の背景、背景、背景をもう䞀床、垂盎セグメント、背景をもう䞀床、背景、および背景をもう䞀床芋るず想像しおください。 それも簡単です



問題は、動きず平行な線を远跡しようずするずきに珟れたす。 赀い点には、远攟された双子の圹割の明確な候補はありたせん。 それらの倚くがあり、それらはすべお近くにあり、私たちが䜿甚する方法を䜿甚しおそれらのいずれかを遞択するこずは単に䞍可胜です。 これはオプティカルフロヌの機胜制限です。 察応する蚘事でりィキペディアから芪切に譊告されおいるように、「この1぀の方皋匏を2぀の未知の倉数で解くこずはできたせん」ずあなたにできるこずは䜕もありたせん。

䜕もありたせんか
䞀般に、正盎に蚀うず、これはおそらくあたり真実ではありたせん。 結局のずころ、右の写真に赀い点を芋぀けるこずができたすか これもそれほど難しいこずではありたせんが、このために他の方法を粟神的に䜿甚したす-近くの最も近い「緑の点」䞋隅を芋぀け、それたでの距離を掚定し、察応する距離を立方䜓の2番目の面に眮きたす。 オプティカルフロヌアルゎリズムには成長の䜙地がありたす-この方法を採甚するこずもできたすただ行っおいない堎合。





6.緑色のドットFTW



実際、遅れた垞識がこの時点で私たちに告げおいるように、私たちは最終的な目暙-認識、分類、および他の知性にずっお重芁ではない䜙分な䜜業をただ詊みおいたす。 写真のすべおのポむントを3次元の䞖界に詰め蟌もうずするのはなぜですか 2次元画像を䜿甚する堎合でも、通垞、各ピクセルを分類に䜿甚しようずはしたせん。ほずんどのピクセルには有甚な情報が含たれおいたせん。 ここで同じこずをしないのはなぜですか



実際、すべおがずおもシンプルでした。 同じ光束を蚈算したすが、「緑色」の安定点のみです。 ちなみに、OpenCVではすでに圌らが私たちの面倒を芋おくれたした。 必芁なものはLucas-Canadaストリヌムず呌ばれたす。



同じ堎合のコヌドず䟋を提䟛するのは少し退屈です。なぜなら、同じこずになるが、ポむント数がはるかに少ないからです。 途䞭で䜕か他のこずをしたしょう。たずえば、カメラの回転を凊理する機胜をアルゎリズムに远加したす。 その前に、私たちは専ら暪に移動したしたが、珟実の䞖界では列車の窓の倖は非垞にたれです。



タヌンの出珟により、X座暙ずZ座暙が混ざりたす。 カメラに盞察的な座暙を蚈算するための叀い匏はそのたたにしお、次のように絶察座暙に倉換したすここで -カメラ䜍眮の座暙、アルファ-回転角床











プレヌダヌは詐欺垫です;これは、カメラが䞊䞋に動かないず信じおいるためです



ここのどこかで焊点距離に問題がありたす-芚えおおいお、私たちはそれをask意的に決めたのですか そのため、異なる角床から同じポむントを評䟡する機䌚が埗られたので、X座暙ずZ座暙が互いに干枉し始めたため、それが重芁になりたした。 実際、前のコヌドに䌌たコヌドを任意のフォヌカスで実行するず、次のようなコヌドが衚瀺されたす。





明らかではありたせんが、これは通垞の立方䜓の呚りにカメラツアヌを配眮する詊みです。 各フレヌムは、カメラの次の回転埌の可芖ポむントの掚定倀です。 ミニマップのような平面図。



幞いなこずに、ただ光ストリヌムがありたす。 回転するずき、どのポむントがどのポむントに倉わるかを確認し、2぀のビュヌの角床からそれらの座暙を蚈算できたす。 ここから焊点距離を取埗するのは簡単です異なるアルファ倀に察しお䞊蚘の2぀の匏を取埗し、座暙を同等にし、fを衚珟するだけです。 はるかに良い





すべおのポむントが互いに完党に適合するわけではありたせんが、少なくずも立方䜓であるず掚枬できたす。



最埌に、ポむントの䜍眮の掚定倀が必ずしも䞀臎しないため、䜕らかの方法でノむズに察凊する必芁がありたすきちんずした䞍均䞀なリングの䞊のgifを参照しおください。それぞれの代わりに、理想的には1぀のポむントがあるはずです。 すでに創造性の䜙地はありたすが、私には次のような最も適切な方法がありたした。

-暪に耇数のシフトがある堎合、それらの情報を結合したす。したがっお、1぀のポむントに぀いお、䞀床に耇数の深床掚定倀が埗られたす。

-カメラが回転するず、2セットのポむントを組み合わせおタヌンの前埌、䞀方を他方に合わせようずしたす。 このフィッティングは適切に「ポむント登録」ず呌ばれたす文脈から倖れた甚語を聞いた堎合は想像もしなかったでしょう。そのために、Python + OpenCVのgoogleバヌゞョンの反埩最近傍点アルゎリズムを䜿甚したした。

-次に、しきい倀半埄最近傍法で決定内にあるポむントがマヌゞされたす。 各ポむントに぀いお、「匷床」のようなものを远跡したす。これは、他のポむントず組み合わされた頻床のカりンタヌです。 匷床が倧きいほど、それが正盎で正しいポむントである可胜性が高くなりたす。



結果は、ポヌタルのキュヌブの堎合ほど安定しおいたせんが、少なくずも正確です。 以䞋は、私が最初にBlenderにアップロヌドし、カメラをひねっおフレヌムを保存した、再䜜成されたモデルです。





ダり゚ル教授の頭





ある皮のランダムな車



ビンゎ 次に、それらすべおを認識アルゎリズムに詰め蟌み、䜕が起こるかを確認する必芁がありたす。 しかし、これはおそらく、次のシリヌズに向けお出発したす。



アプリ



少し振り返っお、なぜこれをすべお行ったのかを思い出したしょう。 掚論の行は次のずおりでした。

-写真に描かれおいるものを認識できる必芁がありたす

-しかし、これらの写真は、䜍眮を倉えたり、同じものを異なる角床から芋たりするたびに倉わりたす。 時々認識を超えお

-これはバグではなく機胜です私たちの限定されたアむセンサヌは、被写䜓党䜓ではなく被写䜓の䞀郚のみを芋るずいう事実の結果

-したがっお、䜕らかの方法でセンサヌからのこれらの郚分デヌタを組み合わせお、完党な圢で被隓者のアむデアを収集する必芁がありたす。



䞀般的に蚀えば、これは確かに芖芚の問題だけではありたせん 。 これはルヌルであり、䟋倖ではありたせん-私たちのセンサヌは党胜ではなく、郚品のオブゞェクトに関する情報を垞に認識しおいたす-しかし、そのようなすべおのケヌスをある皮の䞀般的なフレヌムワヌクにどれだけ組み合わせるこずができるのでしょうか 蚀いたす芖界に戻る、あなたの目は垞に小さくお非垞に速い動きをしおいたす-サッカヌド-芖野内のオブゞェクト間をゞャンプしたすそしお、これらの動きの間隔であなたのビゞョンはたったく機胜したせん-鏡を芋おも自分のサッカヌドを芋るこずができない理由です空癜。 脳は、芋られる郚分を「瞫い合わせる」ために垞に努力を続けおいたす。 これは私たちが解決しようずしたばかりの問題ですか、それずもただ違いたすか 単語の発音のさたざたなバリ゚ヌションを「理想的な」スペルの1぀ず盞関させるこずができる堎合の音声認識。これも同様のタスクですか。 シノニムをアむテムの1぀の「むメヌゞ」に枛らすずどうなりたすか



はいの堎合、それは可胜です、問題は芖芚システムの単なる小さな町のアルゎリズムではなく、スキャナヌのレヌザヌポむンタヌを進化しおいない目で眮き換えるだけではありたせん。



自然界に芋られるものを再珟しようずするずき、そのすべおのコンポヌネントを盲目的にコピヌするこずは意味がないずいうこずは明らかな考慮事項です。 空を飛ぶために、矜ばたきの矜ず矜、十分に硬い矜ず揚力は必芁ありたせん。 速く走るために、機械的な脚は必芁ありたせん-車茪ははるかによく察凊したす。 私たちが芋たものをコピヌするのではなく、原則を芋぀けお自分でそれを繰り返したいず思いたすたぶんそれをより簡単/より効率的にする。 飛行の空力の法則の類䌌物である知性の原理は䜕ですか、ただわかりたせん。 ディヌプラヌニングず圌の預蚀者であるYan Lekunおよび圌の埌の倚くの人々は、受け取ったデヌタから機胜の「深い」階局を構築する胜力に目を向ける必芁があるず考えおいたす。 これにもう1぀説明を加えるこずができたす。関連するデヌタを1぀のオブゞェクトの䞀郚ずしお認識し、新しい次元に配眮する機胜です。



All Articles