车流检测之halcon光流法算法实现
* This example program shows how to use optical_flow_mg to compute the optical flow in an image sequence and how to segment the optical flow.
*這個(gè)示例程序顯示了如何使用._flow_mg來計(jì)算圖像序列中的光流,以及如何分割光流。
dev_update_off ()
dev_close_window ()
* Initialize the image sequence.
初始化圖像序列
read_image (Image1, 'xing/xing000')
dev_open_window_fit_image (Image1, 0, 0, -1, -1, WindowHandle)
* Set the display parameters for the vector field.
設(shè)置現(xiàn)實(shí)的矢量場(chǎng)參數(shù)
dev_set_paint (['vector_field',6,1,2])
定義灰度值輸出模型,
dev_set_draw ('margin')
for I := 1 to 587 by 1
? ? * Read the current image of the image sequence.
? ? ?讀連續(xù)的圖像序列
? ? read_image (Image2, 'xing/xing'+I$'03')
? ? * Compute the optical flow.
? ? ? 計(jì)算光流
? ? optical_flow_mg (Image1, Image2, VectorField, 'fdrig', 0.8, 1, 8, 5, 'default_parameters', 'accurate')
*計(jì)算兩幅圖片的光流場(chǎng)。
參數(shù):1&2是輸入的兩個(gè)單色圖片序列的連續(xù)圖片,
??????????? 3為輸出的光流結(jié)果
? ? ? ? ? ?4是求取光流三種算法的選取其中的一種
? ? ? ? ? ?5高斯平滑初始偏差初始值
? ? ? ? ? ?6積分濾波偏差初始值
? ? ? ? ? ?7平滑項(xiàng)在數(shù)據(jù)項(xiàng)中的權(quán)重
? ? ? ? ? ?8梯度恒定性相對(duì)于灰度值恒定性的權(quán)重
? ? ? ? ? ?9多柵算法的名字
? ? ? ? ? 10多柵算法的變量?
? ? * Segment the optical flow vector field.
? ? 分割矢量場(chǎng)
? ? threshold (VectorField, Region, 1, 10000)
? ? * Display the current image of the sequence.? Note that this means that the optical flow vectors will also be displayed at the "end" of the movementof the objects in the image.
? ? 顯示序列的當(dāng)前圖像。注意,這意味著光流矢量也將顯示在圖像中物體運(yùn)動(dòng)的“末端”。
? ? dev_display (Image2)
? ? * Display the optical flow.
? ? dev_set_color ('yellow')
? ? dev_set_line_width (1)
? ? dev_display (VectorField)
? ? * Display the segmented optical flow.
? ? dev_set_color ('green')
? ? dev_set_line_width (3)
? ? dev_display (Region)
? ? * Copy the current image to the previous image of the sequence.
? ? *將當(dāng)前圖像復(fù)制到序列的前一個(gè)圖像。
? ? copy_obj (Image2, Image1, 1, 1)
endfor
?
背景介紹
?
光流的概念是Gibson在1950年首先提出來的。它是空間運(yùn)動(dòng)物體在觀察成像平面上的像素運(yùn)動(dòng)的瞬時(shí)速度,是利用圖像序列中像素在時(shí)間域上的變化以及相鄰幀之間的相關(guān)性來找到上一幀跟當(dāng)前幀之間存在的對(duì)應(yīng)關(guān)系,從而計(jì)算出相鄰幀之間物體的運(yùn)動(dòng)信息的一種方法。一般而言,光流是由于場(chǎng)景中前景目標(biāo)本身的移動(dòng)、相機(jī)的運(yùn)動(dòng),或者兩者的共同運(yùn)動(dòng)所產(chǎn)生的。
當(dāng)人的眼睛觀察運(yùn)動(dòng)物體時(shí),物體的景象在人眼的視網(wǎng)膜上形成一系列連續(xù)變化的圖像,這一系列連續(xù)變化的信息不斷“流過”視網(wǎng)膜(即圖像平面),好像一種光的“流”,故稱之為光流(optical flow)。光流表達(dá)了圖像的變化,由于它包含了目標(biāo)運(yùn)動(dòng)的信息,因此可被觀察者用來確定目標(biāo)的運(yùn)動(dòng)情況。
研究光流場(chǎng)的目的就是為了從圖片序列中近似得到不能直接得到的運(yùn)動(dòng)場(chǎng)。運(yùn)動(dòng)場(chǎng),其實(shí)就是物體在三維真實(shí)世界中的運(yùn)動(dòng);光流場(chǎng),是運(yùn)動(dòng)場(chǎng)在二維圖像平面上(人的眼睛或者攝像頭)的投影。
那通俗的講就是通過一個(gè)圖片序列,把每張圖像中每個(gè)像素的運(yùn)動(dòng)速度和運(yùn)動(dòng)方向找出來就是光流場(chǎng)。那怎么找呢?咱們直觀理解肯定是:第t幀的時(shí)候A點(diǎn)的位置是(x1, y1),那么我們?cè)诘趖+1幀的時(shí)候再找到A點(diǎn),假如它的位置是(x2,y2),那么我們就可以確定A點(diǎn)的運(yùn)動(dòng)了:(ux, vy) = (x2, y2) - (x1,y1)。
? ? ? ? 那怎么知道第t+1幀的時(shí)候A點(diǎn)的位置呢? 這就存在很多的光流計(jì)算方法了。
1981年,Horn和Schunck創(chuàng)造性地將二維速度場(chǎng)與灰度相聯(lián)系,引入光流約束方程,得到光流計(jì)算的基本算法。人們基于不同的理論基礎(chǔ)提出各種光流計(jì)算方法,算法性能各有不同。Barron等人對(duì)多種光流計(jì)算技術(shù)進(jìn)行了總結(jié),按照理論基礎(chǔ)與數(shù)學(xué)方法的區(qū)別把它們分成四種:基于梯度的方法、基于匹配的方法、基于能量的方法、基于相位的方法。近年來神經(jīng)動(dòng)力學(xué)方法也頗受學(xué)者重視。
作者:來套煎餅果子
鏈接:https://www.jianshu.com/p/f91a8a519a50
來源:簡(jiǎn)書
簡(jiǎn)書著作權(quán)歸作者所有,任何形式的轉(zhuǎn)載都請(qǐng)聯(lián)系作者獲得授權(quán)并注明出處。
總結(jié)
以上是生活随笔為你收集整理的车流检测之halcon光流法算法实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 斜齿轮重合度计算公式_斜齿圆柱齿轮的特点
- 下一篇: 数学家刘徽李善兰陈景润华罗庚