This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320C6657:有关 VLIB_trackuresFeaturesLucasKanade_7x7函数的问题、该函数位于 C66x 的 VLIB 库中

Guru**** 2595805 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/637434/tms320c6657-problem-about-vlib_trackfeatureslucaskanade_7x7-function-in-vlib-library-for-c66x

器件型号:TMS320C6657

您好!

我正在使用 VLIB 软件库进行视频稳定演示。

 

VLIB_harrisScore_7x7函数和 VLIB_nonMaxSuppress_7x7_S16函数用于检测跟踪点

(由于 VLIB_FeaturesustoTrack 函数无法处理我从 另一个线程中学到的太大的图像)

VLIB_TrackFeaturesLucasKanade_7x7 用于跟踪以下帧上的这些点(以匹配帧之间的特征点)、 还使用我从函数参考中的注释中学到的金字塔方法。

问题是在跟踪过程完成后、根据 outx / outy / error 输出、只有不到一半的点可以成功匹配。

这是正常现象还是我犯了什么错误?

我的代码:

//获取上面的 imPrev 和 imCur

uint8_t * oldpyr[4];

uint8_t * newpyr[4];

PyramidInit (oldpyr、oldpyrbuf、imPrev、width、height); //使用参考显示的方式

PyramidInit (newpyr、newpyrbuf、 imCur、width、height);

VLIB_imagePyramid8 (imPrev、宽度、高度、oldpyrbuf);

VLIB_imagePyramid8 (imCur、宽度、高度、newpyrbuf);

 

memset (gradx、0、sizeof (int16_t)*高度*宽度);

memset (Grady、0、sizeof (int16_t)*高度*宽度);

VLIB_xyGradents (imPrev、Gradx + width + 1、Grady + width + 1、width、height - 1);

memset (分数、0、身高*宽*尺寸(int16_t));

VLIB_harrisScore_7x7 (Gradx、Grady、宽度、高度、分数、 1310、缓冲器);

memset (f壮举、0、高度*宽度* sizeof (uint8_t));

INT THRESH = DSP_maxval (分数、宽度*高度)* 0.8;

VLIB_nonMaxSuppress_7x7_S16 (分数、宽度、高度、阈值、壮举+ 3 *宽度+ 3);

对于(I = 7;标志&& I <(高度- 7);I++)

for (j = 7;flag && j <(宽度- 7);j++)

if (f壮[I * width + j]=255)

X[nFeatures]= I << 4;

Y[nFeatures]= j << 4;

nfeatures ++;

if (nFeatures%2!= 0)

nfeatures --;

对于(i = 0;<nFeatures; i++)

newX[i]= X[i]>> 3;

Newy[i]= Y[i]>> 3;

对于(I = 3;I > 0;I-)

对于(j = 0;j < nFeatures;j++)

PyramidX[j]= X[j]>> I;

PyramidY[j]= Y[j]>> I;

memset (pyrgradx、0、sizeof (int16_t)*高度*宽度);

memset (pyrgrady、0、sizeof (int16_t)*高度*宽度);

VLIB_xyGradents (oldpyr[i]、pyrgradx +(width >> i)+ 1、pyrgrady +(width >> i)+ 1、width >> I、(height >> I)- 1);

VLIB_trackFeaturesLucasKanade_7x7 (oldpyr[i]、newpyr[i]、pyrgradx、pyrgrady、width >> I、 高度>> I、nFeatures、 PyramidX、PyramidY、newX、 Newy、NULL、10、1e-4、Scratch);

对于(j = 0;j < nFeatures;j++)

newX[j]= newX[j]<< 1;

Newy[j]= Newy[j]<<1;

//使用原始分辨率图像微调 newX,Newy 第四次

VLIB_trackFeaturesLucasKanade_7x7 (imPrev、imCur、Gradx、Grady、width、 高度、nFeatures、 X、Y、newX、 Newy、status、10、1e-4、Scratch);

期待您的响应!

谢谢、

Eddie

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    您使用的是哪个 SDK 版本?

    此致、
    Yordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Yordan、您好!

    我的 VLIB 版本是3.3.0.3。

    感谢您的回复!

    此致、

    Eddie

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    我已通知 RTOS 团队。 他们的反馈将在此处发布。

    此致、
    Yordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢!

    Eddie
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Eddie、

    很抱歉耽误你的回答。  这是否仍是一个需要注意的未决问题、或者我是否要关闭?

    关于您的评论:

    [引用用户="Eddie Zhou "]

    问题是在跟踪过程完成后、根据 outx / outy / error 输出、只有不到一半的点可以成功匹配。

    这是正常现象还是我犯了什么错误?

    [/报价]

    您能描述一下是否有任何模式未成功匹配一半的点?  需要注意的一些事项:

    1.不匹配点是否全部位于图像的特定区域(例如下半部分或靠近边框)?

    2.是超出某些空间阈值的所有点的不匹配点(例如,它们在原始图像中的移动距离可能超过 X 像素)。

    顺便说一下,在公路上行驶的汽车的前置摄像头中,上述两项都是正确的(边界附近的点也是*可能*向屏幕边界移动最快的点。

    还有其他一些共性吗?

    如果像素移动了很长的距离、则可能需要创建额外的金字塔层、以便以较小的分辨率跟踪此相关性。  如果它们接近映像的特定区域、则可能与内存损坏或缓冲区覆盖有关。

    此致、

    Jesse

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Jesse、

    感谢您的回答!

    实际上、我发现我在代码中犯了一个大错误。 我应该 已经将 cols 的索引分配给了 X、将 rows 分配给了 Y、但我执行了相反的操作。

    现在、我可以在大多数情况下获得匹配的大部分点。

    但是、正如您所提到的、当视频大幅移动时、代码仍然会出错。 我将尝试使用更多 层次的金字塔来看看它是否可以变得更好。 感谢您的建议!

    此致、

    Eddie。