{
: : 刘留
: :
Jean-yves Bouguet "تنفيذ هرمي ل Lucas Kanade وصف تعقب الخوارزمية"
http://www.aivisoft.net/
Geo.cra [في] gmail [dot] com
}
وحدة OpticalFlowlk ؛
واجهة
يستخدم
الرياضيات ، النوافذ ، sysutils ، المتغيرات ، الفئات ، الرسومات ، الوحدة ، colorConv ؛
يكتب
topticalflowlk = فئة
خاص
Imageold ، ImageNew: TtripleLongintarray ؛
ImageGray ، DX ، DY ، DXY: Tdoublelongintarray ؛
القيم الذاتية: tdoubleMextendendarray ؛
WBPOINT: TdoubleBooleAnarray ؛
الارتفاع ، العرض ، L ، Radiox ، Radioy: Longint ؛
الإجراء CornerDetect (Swidth ، snight: longint ؛ الجودة: ممتدة) ؛
الإجراء makepyramid (var images: ttriplelongintarray ؛ swidth ، snight ، sl: longint) ؛
عام
الإطار: tbitmap ؛
الميزات: TsinglePointInfoarray ؛
FeatureCount ، SupportCount: Longint ؛
السرعة ، الراديو: ممتد ؛
الإجراء init (swidth ، snight ، sl: longint) ؛
الإجراءات المميزات (إطارات: tbitmap) ؛
الإجراء calopticalflowlk (إطارات: tbitmap) ؛
تدمير المدمر. تجاوز؛
نهاية؛
تطبيق
الإجراء topticalflowlk.cornerDetect (swidth ، snight: longint ؛ الجودة: ممتدة) ؛
var
I ، J ، Fi ، FJ: Longint ؛
A ، B ، C ، sum ، minaccept ، maxeigenvalue: Exteded ؛
يبدأ
featureCount: = 0 ؛
{
下面采用 ميزة جيدة لتتبع 介绍的方法
J. Shi و C. Tomasi "ميزات جيدة للتتبع" ، CVPR 94
}
لأني: = 1 إلى swidth - 2 افعل
ل j: = 1 إلى snight - 2 تبدأ
dx [i ، j]: = ImageGray [i - 1 ، j - 1] + 2 * ImageGray [i - 1 ، j] + ImageGray [i - 1 ، j + 1]
- (ImageGray [i + 1 ، j - 1] + 2 * ImageGray [i + 1 ، j] + imagegray [i + 1 ، j + 1]) ؛
dy [i ، j]: = ImageGray [i - 1 ، j + 1] + 2 * ImageGray [i ، j + 1] + imagegray [i + 1 ، j + 1]
- (ImageGray [i - 1 ، j - 1] + 2 * ImageGray [i ، j - 1] + ImageGray [i + 1 ، j - 1]) ؛
dxy [i ، j]: = ImageGray [i + 1 ، j - 1] + imagegray [i - 1 ، j + 1]
- (ImageGray [i - 1 ، j - 1] + ImageGray [i + 1 ، j + 1]) ؛
نهاية؛
{求取 sobel 算子的 dx ، dy ، dxy
DX:
| 1 0 -1 |
| 2 0 -2 |
| 1 0 -1 |
داي:
| -1 -2 -1 |
| 0 0 0 |
| 1 2 1 |
dxy
| -1 0 1 |
| 0 0 0 |
| 1 0 -1 |}
MaxeigenValue: = 0 ؛
لأني: = 2 إلى swidth - 3 افعل
ل j: = 2 إلى snight - 3 تبدأ
ج: = 0 ؛ ب: = 0 ؛ ج: = 0 ؛
لـ fi: = i - 1 to i + 1 do
لـ FJ: = j - 1 to j + 1 تبدأ
a: = a + sqr (dx [fi ، fj]) ؛
b: = b + dxy [fi ، fj] ؛
c: = c + sqr (dy [fi ، fj]) ؛
نهاية؛
a: = a / 2 ؛ C: = C / 2 ؛
eigenvalues [i ، j]: = (a + c - sqrt ((a - c) * (a - c) + b * b)) ؛
إذا كانت القيم الذاتية [i ، j]> maxeigenvalue ثم maxeigenvalue: = eigenvalues [i ، j] ؛
نهاية؛
{求取矩阵
| ∑dx*dx ∑dxy |
م = | |
| ∑dxy ∑dy*dy |
的特征值
λ = ∑dx*dx + ∑dy*dy - ((∑dx*dx + ∑dy*dy)^2-4*(∑dx*dx*∑dy*dy - ∑dxy*∑dxy))^1/2 }
minaccept: = maxeigenvalue * Quality ؛
{设置最小允许阀值}
لأني: = 8 إلى swidth - 9 افعل
ل j: = 8 إلى snight - 9 افعل
إذا كانت القيم الذاتية [i ، j]> minaccept ثم ابدأ
wbpoint [i ، j]: = true ؛
INC (featureCount) ؛
إنهاء آخر
wbpoint [i ، j]: = false ؛
لأني: = 8 إلى swidth - 9 افعل
ل j: = 8 إلى snight - 9 افعل
إذا كان wbpoint [i ، j] ثم ابدأ
SUM: = eigenvalues [i ، j] ؛
لـ Fi: = i - 8 to i + 8 تبدأ
لـ FJ: = j - 8 to j + 8 do
إذا كان SQR (fi - i) + sqr (fj - j) <= 64 ثم
if (eigenvalues [fi ، fj]> = sum) و ((fi <> i) أو (fj <> j)) و (wbpoint [fi ، fj]) ثم ابدأ
wbpoint [i ، j]: = false ؛
ديسمبر (ميزة) ؛
استراحة؛
نهاية؛
إذا لم يكن wbpoint [i ، j] ثم كسر ؛
نهاية؛
نهاية؛
{用非最大化抑制来抑制假角点}
setLength (الميزات ، featureCount) ؛ fi: = 0 ؛
لأني: = 8 إلى swidth - 9 افعل
ل j: = 8 إلى snight - 9 افعل
إذا كان wbpoint [i ، j] ثم ابدأ
ميزات [fi] .info.x: = i ؛
ميزات [fi] .info.y: = j ؛
ميزات [fi] .index: = 0 ؛
INC (FI) ؛
نهاية؛
{输出最终的点序列}
نهاية؛
الإجراء topticalflowlk.init (swidth ، snight ، sl: longint) ؛
يبدأ
العرض: = swidth ؛ الارتفاع: = هرم ؛ L: = SL ؛
setLength (Imageold ، العرض ، الارتفاع ، L) ؛
setLength (ImageNew ، العرض ، الارتفاع ، L) ؛
الإطار: = tbitmap.create ؛
frame.width: = العرض ؛ Frame.Height: = الارتفاع ؛
frame.pixelformat: = pf24bit ؛
setLength (ImageGray ، العرض ، الارتفاع) ؛
setLength (القيم الذاتية ، العرض ، الارتفاع) ؛
setLength (DX ، العرض ، الارتفاع) ؛
setLength (DY ، العرض ، الارتفاع) ؛
setLength (dxy ، العرض ، الارتفاع) ؛
setLength (wbpoint ، العرض ، الارتفاع) ؛
featureCount: = 0 ؛
نهاية؛
الإجراء topticalflowlk.makepyramid (var images: ttripleLongintarray ؛ swidth ، snight ، sl: longint) ؛
var
I ، J ، K ، II ، JJ ، Nwidth ، Nheight ، Owidth ، Oheight: Longint ؛
يبدأ
{生成金字塔图像}
owidth: = swidth ؛ OHEIGHT: = QUITER ؛
لـ K: = 1 إلى SL - 1 تبدأ
nwidth: = (owidth + 1) shr 1 ؛ nheight: = (Oheight + 1) shr 1 ؛
لأني: = 1 إلى nwidth - 2 تبدأ
II: = أنا shl 1 ؛
ل j: = 1 إلى nheight - 2 لا تبدأ
JJ: = j shl 1 ؛
الصور [I ، J ، K]: = (الصور [II ، JJ ، K - 1] SHL 2 +
الصور [II - 1 ، JJ ، K - 1] SHL 1 + Images [II + 1 ، JJ ، K - 1] SHL 1 + Images [II ، JJ - 1 ، K - 1] SHL 1 + Images [II ، JJ + 1 ، K - 1] SHL 1 +
الصور [II - 1 ، JJ - 1 ، K - 1] + صور [II + 1 ، JJ - 1 ، K - 1] + صور [II - 1 ، JJ + 1 ، K - 1] + صور [II + 1 ، JJ + 1 ، K - 1]) shr 4 ؛
{高斯原则 , shl 右移位 , shr 左移位}
نهاية؛
نهاية؛
لأني: = 1 إلى nwidth - 2 تبدأ
II: = أنا shl 1 ؛
الصور [i ، 0 ، k]: = (الصور [ii ، 0 ، k - 1] shl 2 +
الصور [II - 1 ، 0 ، K - 1] SHL 1 + Images [II + 1 ، 0 ، K - 1] SHL 1 + Images [II ، 0 ، K - 1] SHL 1 + Images [II ، 1 ، K - 1] SHL 1 +
الصور [II - 1 ، 0 ، K - 1] + صور [II + 1 ، 0 ، K - 1] + صور [II - 1 ، 1 ، K - 1] + صور [II + 1 ، 1 ، K - 1 ]) SHR 4 ؛
الصور [i ، nheight - 1 ، k]: = (الصور [II ، Oheight - 1 ، K - 1] SHL 2 +
الصور [II - 1 ، Oheight - 1 ، K - 1] SHL 1 + Images [II + 1 ، OHEIGHT - 1 ، K - 1] SHL 1 + Images [II ، OHEIGHT - 2 ، K - 1] SHL 1 + Images [II ، OHEIGHT - 1 ، K - 1] SHL 1 +
الصور [II - 1 ، Oheight - 2 ، K - 1] + صور [II + 1 ، Oheight - 2 ، K - 1] + صور [II - 1 ، Oheight - 1 ، K - 1] + صور [II + 1 ، Oheight - 1 ، K - 1]) shr 4 ؛
نهاية؛
{处理上下边}
ل j: = 1 إلى nheight - 2 لا تبدأ
JJ: = j shl 1 ؛
الصور [0 ، J ، K]: = (الصور [0 ، JJ ، K - 1] SHL 2 +
الصور [0 ، JJ ، K - 1] SHL 1 + Images [1 ، JJ ، K - 1] SHL 1 + Images [0 ، JJ - 1 ، K - 1] SHL 1 + Images [0 ، JJ + 1 ، K - 1] SHL 1 +
الصور [0 ، JJ - 1 ، K - 1] + صور [1 ، JJ - 1 ، K - 1] + صور [0 ، JJ + 1 ، K - 1] + صور [1 ، JJ + 1 ، K - 1 ]) SHR 4 ؛
الصور [nwidth - 1 ، j ، k]: = (الصور [owidth - 1 ، jj ، k - 1] shl 2 +
الصور [OWIDTH - 2 ، JJ ، K - 1] SHL 1 + Images [OWIDTH - 1 ، JJ ، K - 1] SHL 1 + Images [OWIDTH - 1 ، JJ - 1 ، K - 1] SHL 1 + Images [OWIDTH - 1 ، JJ + 1 ، K - 1] SHL 1 +
الصور [OWIDTH - 2 ، JJ - 1 ، K - 1] + صور [OWIDTH - 1 ، JJ - 1 ، K - 1] + صور [OWIDTH - 2 ، JJ + 1 ، K - 1] + صور [OWIDTH - 1 ، JJ + 1 ، K - 1]) shr 4 ؛
نهاية؛
{处理左右边}
الصور [0 ، 0 ، k]: = (الصور [0 ، 0 ، k - 1] shl 2 +
الصور [0 ، 0 ، K - 1] SHL 1 + Images [1 ، 0 ، K - 1] SHL 1 + Images [0 ، 0 ، K - 1] SHL 1 + Images [0 ، 1 ، K - 1] SHL 1 +
الصور [0 ، 0 ، k - 1] + صور [1 ، 0 ، k - 1] + صور [0 ، 1 ، k - 1] + صور [1 ، 1 ، k - 1]) shr 4 ؛
{处理左上点}
الصور [0 ، nheight - 1 ، k]: = (الصور [0 ، Oheight - 1 ، K - 1] SHL 2 +
الصور [0 ، OHEIGHT - 1 ، K - 1] SHL 1 + Images [1 ، OHEIGHT - 1 ، K - 1] SHL 1 + Images [0 ، OHEIGHT - 2 ، K - 1] SHL 1 + Images [0 ، OHEIGHE - 1 ، K - 1] SHL 1 +
الصور [0 ، Oheight - 2 ، K - 1] + صور [1 ، Oheight - 2 ، K - 1] + صور [0 ، Oheight - 1 ، K - 1] + صور [1 ، Oheight - 1 ، K - 1 ]) SHR 4 ؛
{处理左下点}
الصور [nwidth - 1 ، 0 ، k]: = (الصور [owidth - 1 ، 0 ، k - 1] shl 2 +
الصور [Owidth - 2 ، Oheight - 1 ، K - 1] SHL 1 + Images [OWIDTH - 1 ، OHEIGHT - 1 ، K - 1] SHL 1 + Images [Owidth - 1 ، Oheight - 1 ، K - 1] SHL 1 + صور [Owidth - 1 ، Oheight - 1 ، K - 1] SHL 1 +
الصور [Owidth - 2 ، Oheight - 1 ، K - 1] + صور [Owidth - 1 ، Oheight - 1 ، K - 1] + صور [Owidth - 2 ، Oheight - 1 ، K - 1] + صور [OWIDTH - 1 ، Oheight - 1 ، K - 1]) shr 4 ؛
{处理右上点}
الصور [nwidth - 1 ، nheight - 1 ، k]: = (الصور [owidth - 1 ، Oheight - 1 ، K - 1] SHL 2 +
الصور [Owidth - 2 ، Oheight - 1 ، K - 1] SHL 1 + Images [OWIDTH - 1 ، OHEIGHT - 1 ، K - 1] SHL 1 + Images [OWIDTH - 1 ، OHEIGHT - 2 ، K - 1] SHL 1 + صور [Owidth - 1 ، Oheight - 1 ، K - 1] SHL 1 +
الصور [Owidth - 2 ، Oheight - 2 ، K - 1] + صور [Owidth - 1 ، Oheight - 2 ، K - 1] + صور [Owidth - 2 ، Oheight - 1 ، K - 1] + صور [OWIDTH - 1 ، Oheight - 1 ، K - 1]) shr 4 ؛
{处理右下点}
نهاية؛
نهاية؛
الإجراء topticalflowlk.initfeatures (إطارات: tbitmap) ؛
var
أنا ، J: Longint ؛
الخط: prgbtriple ؛
يبدأ
setstretchbltmode (frame.canvas.handle ، stretch_halftone) ؛
StretchBlt (frame.canvas.handle ، 0 ، 0 ، العرض ، الارتفاع ، الإطارات.
لأني: = 0 إلى الارتفاع - 1 تبدأ
السطر: = frame.scanline [i] ؛
لـ J: = 0 للعرض - 1 تبدأ
Imageold [j ، i ، 0]: = (line^.rgbtblue * 11 + line^.rgbtgreen * 59 + line^.rgbtred * 30) div 100 ؛
ImageGray [j ، i]: = Imageold [j ، i ، 0] ؛
INC (الخط) ؛
نهاية؛
نهاية؛
{初始化金字塔图像第一层 imageold [x ، y ، 0]}
MakePyramid (Imageold ، العرض ، الارتفاع ، L) ؛
{生成金字塔图像}
CornerDetect (العرض ، الارتفاع ، 0.01) ؛
{进行强角点检测}
نهاية؛
الإجراء topticalflowlk.calopticalFlowlk (إطارات: tbitmap) ؛
var
I ، J ، J ، Fi ، FJ ، K ، LL ، M ، DX ، DY ، GX ، GY ، PX ، PY ، KX ، KY ، ED ، EDC ، NWIDTH ، Nheight: Longint ؛
NX ، NY ، VX ، VY ، A ، B ، C ، D ، E ، F ، IK: Extended ؛
التاسع ، IY: tdoubleMextendendRay ؛
الخط: prgbtriple ؛
التغيير: منطقية ؛
يبدأ
setstretchbltmode (frame.canvas.handle ، stretch_halftone) ؛
StretchBlt (frame.canvas.handle ، 0 ، 0 ، العرض ، الارتفاع ، الإطارات.
لأني: = 0 إلى الارتفاع - 1 تبدأ
السطر: = frame.scanline [i] ؛
لـ J: = 0 للعرض - 1 تبدأ
ImageNew [j ، i ، 0]: = (line^.rgbtblue * 11 + line^.rgbtgreen * 59 + line^.rgbtred * 30) div 100 ؛
INC (الخط) ؛
نهاية؛
نهاية؛
{初始化金字塔图像第一层 ImageNew [x ، y ، 0]}
MakePyramid (ImageNew ، العرض ، الارتفاع ، ل) ؛
{生成金字塔图像}
setLength (IX ، 15 ، 15) ؛ SetLength (IY ، 15 ، 15) ؛
{申请差分图像临时数组}
لـ M: = 0 إلى FeatureCount - 1 لا تبدأ
{算法细节见:
Jean yves Bouguet "تنفيذ هرمي لوكاس كانادي وصف تعقب الخوارزمية"}
GX: = 0 ؛ GY: = 0 ؛
ل LL: = L - 1 Down TO 0 تبدأ
px: = الميزات [m] .info.x shr ll ؛
PY: = الميزات [m] .info.y sh sh ll ؛
{对应当前金字塔图像的 u 点 : u [l]: = u/2^l}
nwidth: = عرض shr ll ؛ nheight: = الارتفاع shr ll ؛
ج: = 0 ؛ ب: = 0 ؛ ج: = 0 ؛
لـ i: = max (px - 7 ، 1) to min (px + 7 ، nwidth - 2)
لـ J: = Max (Py - 7 ، 1) to min (py + 7 ، nheight - 2) تبدأ
fi: = i - px + 7 ؛ fj: = j - py + 7 ؛
ix [fi ، fj]: = (imageold [i + 1 ، j ، ll] - imageold [i - 1 ، j ، ll]) / 2 ؛
iy [fi ، fj]: = (imageold [i ، j + 1 ، ll] - imageold [i ، j - 1 ، ll]) / 2 ؛
a: = a + ix [fi ، fj] * ix [fi ، fj] ؛ b: = b + ix [fi ، fj] * iy [fi ، fj] ؛
c: = c + iy [fi ، fj] * iy [fi ، fj] ؛
نهاية؛
{计算 2 阶矩阵 g:
| ix (x ، y)*ix (x ، y) ix (x ، y)*iy (x ، y) |
∑ | ix (x ، y)*iy (x ، y) iy (x ، y)*iy (x ، y) |}
D: = A * C - B * B ؛
vx: = 0 ؛ Vy: = 0 ؛ DX: = 0 ؛ dy: = 0 ؛
إذا كان ABS (D)> 1E-8 ثم ابدأ
لـ K: = 1 إلى 10 تبدأ
E: = 0 ؛ F: = 0 ؛
لـ i: = max (px - 7 ، 1) to min (px + 7 ، nwidth - 2)
لـ J: = Max (Py - 7 ، 1) to min (py + 7 ، nheight - 2) تبدأ
fi: = i - px + 7 ؛ fj: = j - py + 7 ؛
kx: = i + gx + dx ؛ KY: = j + gy + dy ؛
إذا KX <0 ثم kx: = 0 ؛ إذا Kx> nwidth - 1 ثم kx: = nwidth - 1 ؛
إذا كنت <0 ثم ky: = 0 ؛ إذا كنت> nheight - 1 ثم ky: = nheight - 1 ؛
IK: = Imageold [I ، J ، LL] - ImageNew [KX ، KY ، LL] ؛
e: = e + ik * ix [fi ، fj] ؛
f: = f + ik * iy [fi ، fj] ؛
نهاية؛
{计算 2x1 阶矩阵 b:
| ik (x ، y)*ix (x ، y) |
∑ | ik (x ، y)*iy (x ، y) |}
nx: = (c * e - b * f) / d ؛
NY: = (b * e - a * f) / (-d) ؛
{计算 η = g^-1*b}
vx: = vx + nx ؛ vy: = vy + ny ؛
dx: = trunc (vx) ؛ dy: = trunc (vy) ؛
{得到相对运动向量 d}
نهاية؛
نهاية؛
gx: = (gx + dx) shl 1 ؛ GY: = (gy + dy) shl 1 ؛
{得到下一层的预测运动向量 g}
نهاية؛
gx: = gx div 2 ؛ GY: = gy div 2 ؛
px: = px + gx ؛ PY: = PY + GY ؛
ميزات [m] .info.x: = px ؛
ميزات [m] .info.y: = py ؛
ميزات [m] .vector.x: = gx ؛
ميزات [m] .vector.y: = gy ؛
if (px> width - 1) أو (px <0) أو (py> الارتفاع - 1) أو (py <0) ثم الميزات [m] .index: = 1 ؛
{失去特征点处理}
نهاية؛
لـ K: = 0 إلى L - 1 تبدأ
nwidth: = عرض shr k ؛ nheight: = الارتفاع shr k ؛
لأني: = 0 إلى nwidth - 1 افعل
ل j: = 0 إلى nheight - 1 افعل
Imageold [I ، J ، K]: = ImageNew [I ، J ، K] ؛
نهاية؛
{复制 j 到 i}
يكرر
التغيير: = خطأ ؛
لأني: = 0 إلى featureCount - 1 تبدأ
إذا كانت الميزات [i] .index = 1 ثم
لـ j: = i + 1 to featureCount - 1 لا تبدأ
الميزات [J - 1]: = الميزات [J] ؛
التغيير: = صحيح ؛
نهاية؛
إذا تغير ثم كسر.
نهاية؛
إذا تغيرت ثم ديسمبر (featureCount) ؛
حتى لا تتغير
setLength (الميزات ، featureCount) ؛
{删除失去的特征点}
السرعة: = 0 ؛ الراديو: = 0 ؛ Radiox: = 0 ؛ Radioy: = 0 ؛
إذا فازت> 0 ثم ابدأ
SupportCount: = 0 ؛
لأني: = 0 إلى featureCount - 1 افعل
if (الميزات [i] .vector.x <> 0) و (الميزات [i] .vector.y <> 0) ثم ابدأ
Radiox: = Radiox + ميزات [i] .vector.x ؛
Radioy: = Radioy + ميزات [i] .vector.y ؛
السرعة: = السرعة + SQRT (SQR (ميزات [i] .vector.x) + SQR (ميزات [i] .vector.y)) ؛
INC (SupportCount) ؛
نهاية؛
إذا كان الدعم> 0 ثم ابدأ
السرعة: = السرعة / الدعم ؛ //*0.0352778 ؛
الراديو: = arctan2 (radioy ، radiox) ؛
نهاية؛
نهاية؛
{计算平均速度和整体方向}
frame.canvas.pen.style: = pssolid ؛
frame.canvas.pen.width: = 1 ؛
frame.canvas.pen.color: = cllime ؛
frame.canvas.brush.style: = bsClear ؛
لأني: = 0 إلى featureCount - 1 افعل
frame.canvas.ellipse (ميزات [i] .info.x - 4 ، ميزات [i] .info.y - 4 ، ميزات [i] .info.x + 4 ، ميزات [i] .info.y + 4) ؛
{用绿圈标识特征点}
frame.canvas.pen.color: = clyellow ؛
لأني: = 0 إلى featureCount - 1 تبدأ
frame.canvas.moveto (ميزات [i] .info.x - الميزات [i] .vector.x ، الميزات [i] .info.y - ميزات [i] .vector.y) ؛
frame.canvas.lineto (ميزات [i] .info.x ، ميزات [i] .info.y) ؛
نهاية؛
{用黄色线条表示运动向量}
إذا (SupportCount> 0) و (السرعة> 3) ثم ابدأ
frame.canvas.pen.style: = pssolid ؛
frame.canvas.pen.width: = 6 ؛
frame.canvas.pen.color: = clwhite ؛
Frame.Canvas.ellipse (عرض Div 2 - 100 ، ارتفاع Div 2 - 100 ، عرض Div 2 + 100 ، ارتفاع Div 2 + 100) ؛
frame.canvas.moveto (عرض Div 2 ، ارتفاع Div 2) ؛
frame.canvas.pen.color: = clblue ؛
frame.canvas.lineto (عرض Div 2 + Trunc (90 * cos (radio)) ، ارتفاع Div 2 + trunc (90 * sin (radio))) ؛
frame.canvas.pen.style: = psclear ؛
frame.canvas.brush.style: = bssolid ؛
frame.canvas.brush.color: = clred ؛
Frame.Canvas.ellipse (عرض Div 2 + Trunc (90 * Cos (راديو)) - 8 ، ارتفاع Div 2 + Trunc (90 * Sin (راديو)) - 8 ، عرض Div 2 + Trunc (90 * Cos (راديو) ) + 8 ، ارتفاع div 2 + trunc (90 * sin (radio)) + 8) ؛
نهاية؛
نهاية؛
Destructor topticalflowlk.destroy ؛
يبدأ
setLength (Imageold ، 0) ؛
setLength (ImageNew ، 0) ؛
setLength (ImageGray ، 0) ؛
setLength (القيم الذاتية ، 0) ؛
setLength (dx ، 0) ؛
setLength (dy ، 0) ؛
setLength (dxy ، 0) ؛
setLength (wbpoint ، 0) ؛
ورث
نهاية؛
نهاية.