zhtao2012

zhtao2012

0个粉丝

1

问答

0

专栏

0

资料

zhtao2012  发布于  2016-12-16 11:33:50
采纳率 0%
1个问答
10471

Hi3519+IMX226 IVE实现移动侦测

 
本帖最后由 zhtao2012 于 2016-12-16 11:40 编辑

大家好,目前在做3519开发的时候遇到一个问题:
在处理移动侦测的时候,sample中调用海思库函数HI_IVS_MD_Process,得到pstBlob的区域信息这种,在处理的时候海思是这么处理的:
for(i = 0;i < 254;i++)
    {
        if(pstBlob->astRegion.u32Area > u16Thr)
        {

            pstRect->astRect[u16Num].astPoint[0].s32X = (HI_U16)((HI_FLOAT)pstBlob->astRegion.u16Left / (HI_FLOAT)u16SrcWidth * (HI_FLOAT)u16DstWidth) & (~1) ;
                        pstRect->astRect[u16Num].astPoint[0].s32Y = (HI_U16)((HI_FLOAT)pstBlob->astRegion.u16Top / (HI_FLOAT)u16SrcHeight * (HI_FLOAT)u16DstHeight) & (~1);

                        pstRect->astRect[u16Num].astPoint[1].s32X = (HI_U16)((HI_FLOAT)pstBlob->astRegion.u16Right/ (HI_FLOAT)u16SrcWidth * (HI_FLOAT)u16DstWidth) & (~1);
                        pstRect->astRect[u16Num].astPoint[1].s32Y = (HI_U16)((HI_FLOAT)pstBlob->astRegion.u16Top / (HI_FLOAT)u16SrcHeight * (HI_FLOAT)u16DstHeight) & (~1);

                        pstRect->astRect[u16Num].astPoint[2].s32X = (HI_U16)((HI_FLOAT)pstBlob->astRegion.u16Right / (HI_FLOAT)u16SrcWidth * (HI_FLOAT)u16DstWidth) & (~1);
                        pstRect->astRect[u16Num].astPoint[2].s32Y = (HI_U16)((HI_FLOAT)pstBlob->astRegion.u16Bottom / (HI_FLOAT)u16SrcHeight * (HI_FLOAT)u16DstHeight) & (~1);

                        pstRect->astRect[u16Num].astPoint[3].s32X = (HI_U16)((HI_FLOAT)pstBlob->astRegion.u16Left / (HI_FLOAT)u16SrcWidth * (HI_FLOAT)u16DstWidth) & (~1);
                        pstRect->astRect[u16Num].astPoint[3].s32Y = (HI_U16)((HI_FLOAT)pstBlob->astRegion.u16Bottom / (HI_FLOAT)u16SrcHeight * (HI_FLOAT)u16DstHeight) & (~1);

                        bValid = HI_TRUE;
                        for(j = 0; j < 3;j++)
                        {
                          for (k = j + 1; k < 4;k++)
                          {
                                  if ((pstRect->astRect[u16Num].astPoint[j].s32X == pstRect->astRect[u16Num].astPoint[k].s32X)
                                           &&(pstRect->astRect[u16Num].astPoint[j].s32Y == pstRect->astRect[u16Num].astPoint[k].s32Y))
                                          {
                                              bValid = HI_FALSE;
                                                break;
                                     }

                          }
                        }
                        if (HI_TRUE == bValid)
                        {
                                u16Num++;
                        }
        }
    }
想问下,这个循环254次,按照文档说的“最多输出区域信息个数为 254”,输出的是我们在图像上看到的有移动侦测发生的时候产生的绿框的个数,还是我们把图像看成16*16共256个小格子的数目?   貌似我打印出来的是移动侦测发生的时候产生的绿框的个数,而且给的4个点的坐标也是绿框的坐标,如果把图像看成16*16的小格子,怎么确定每个小格子的变化?就像跑3516sample代码的时候可以每个格子让它输出0 或1 。

另外我们要在网页上体现出移动侦测产生的时候区域格子的变化,比如我网页上移动侦测支持18*22个小格子,那么移动侦测产生的时候怎么确定每个格子的变化?   3519能做到这点吗? 3516里面有VDA的结构体,3519要怎么做?
[img=901,489]C:\Users\lenovo\Desktop\237GVCFD0L32OO1T`1M}GAU.png[/img]
我来回答
回答6个
时间排序
认可量排序

polestar

0个粉丝

2

问答

0

专栏

0

资料

polestar 2016-12-16 15:49:48
认可0
pstSad经阈值化后应该就是你想要的区域格子变化,输出0或1,pstBlob是连通域标记后的运动目标包围盒。
关于SAD,论坛里有几个帖子有详细说明,自己搜索一下。

仅 Hi3516A 支持 VDA 功能。
3519可以使用IVS去实现类似功能,其实质都是调用的IVE底层相关算子,sample里有MD检测。

zhtao2012

0个粉丝

1

问答

0

专栏

0

资料

zhtao2012 2016-12-16 16:09:49
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=43002&ptid=13686]polestar 发表于 2016-12-16 15:49[/url]
pstSad经阈值化后应该就是你想要的区域格子变化,输出0或1,pstBlob是连通域标记后的运动目标包围盒。
关 ...[/quote]

你好,对于pstSad这个输出参数,我打印之后,不管有无移动侦测产生,u16Width = 0, u16Height = 4096,这两个的值一直都没有什么变化,这个输出参数要怎么处理才能输出我想要的0或1呢?  
第一次接触海思底层,很多都不是很懂,请见谅!

hanfei69882

2个粉丝

26

问答

0

专栏

2

资料

hanfei69882 2016-12-16 17:25:04
认可0
本帖最后由 hanfei69882 于 2016-12-16 17:30 编辑

[quote][url=forum.php?mod=redirect&goto=findpost&pid=43008&ptid=13686]zhtao2012 发表于 2016-12-16 16:09[/url]
你好,对于pstSad这个输出参数,我打印之后,不管有无移动侦测产生,u16Width = 0, u16Height = 4096,这 ...[/quote]

1、我这边平台是hi3518e,可能会有差别

2、2楼对的,手册有显示只有3516A支持VDA,接下来要考虑的是利用现有资源实现功能
另外建议论坛搜索关键字 侦测 把相关概念搞清楚些,问问题不要让别人给出方案,而是看懂了哪些东西,哪个关键点或者概念不清楚,慢慢积累基本点就明白了

3、理解HI_IVS_MD_Process(MD_CHN MdChn, IVE_SRC_IMAGE_S *pstCur, IVE_SRC_IMAGE_S *pstRef, IVE_DST_IMAGE_S *pstSad, IVE_DST_MEM_INFO_S *pstBlob);
输入:两幅不同时刻的图像
输出有两个:阈值化后图像pstSad和联通区域标记后的pstBlob

4、看你的需求pstSad值更合适,我之前简单测量一下也是没有数据,后来没用了,要用的话可能要花时间弄明白,猜测需要注意点(手册上参考):
a. 根据 pstMdAttr-> enSadOutCtrl,若需要输出则不能为空,根据需要设置
b. 值存储是图像结构体,可能要提前分配空间,注意虚拟地址和物理地址

zhtao2012

0个粉丝

1

问答

0

专栏

0

资料

zhtao2012 2016-12-16 20:03:43
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=43011&ptid=13686]hanfei69882 发表于 2016-12-16 17:25[/url]
1、我这边平台是hi3518e,可能会有差别

2、2楼对的,手册有显示只有3516A支持VDA,接下来要考虑的是 ...[/quote]

1,stMdAttr.enSadOutCtrl = IVE_SAD_OUT_CTRL_THRESH 这个值已经初始化了;
2,图像结构体我也采用类似SAMPLE_COMM_IVE_CreateImage这种方式分配了内存,HI_IVS_MD_Process输出的pstSad的值一直都是我初始化分配内存时候的值。

weltion

1个粉丝

10

问答

0

专栏

0

资料

weltion 2017-02-18 09:59:28
认可0
stMdAttr.enSadOutCtrl = IVE_SAD_OUT_CTRL_THRESH
这样设置只会输出pstBlob,要想得到sad信息,需要改stMdAttr.enSadOutCtrl,改成带both的才行

bemy1004

0个粉丝

2

问答

0

专栏

0

资料

bemy1004 2018-05-30 16:03:06
认可0
应该输出的是在图像上看到的有移动侦测发生的时候产生的绿框的个数。个人认为16*16或者8*8没有太大的作用,(是指图像块16*16,而不是把图像划分为16*16!!!)。算法内部是按照4*4的格子作为一个SAD,最终的结果是一幅SAD图(w/4,h/4),每个格子的变化可以通过SAD图看出来。
s32Ret = HI_IVS_MD_Process(MdChn,&pstMd->astImg[s32CurIdx],&pstMd->astImg[1 - s32CurIdx],NULL,&pstMd->stBlob);
这里面的输出SAD,被设置为NULL了。
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区