HVX优化大尺寸Box Filter的行处理流程
Box Filter 17x17:
Box Filter 23x23:
Box Filter 35x35:
具体的思想是:
利用一行Buffer存储一行中每个像素点的周围nxn box filter后的结果,然后计算下一行的结果时,加上新需要的一行像素的结果,减去最上面一行不需要的结果即可;主要思想其实是复用了两行像素点求box filter时共同需要的像素的和。
for(i = lStartRow-radius;i<=lStartRow+radius;i++)
{
src1 = pSrc + min_t(max_t(i, 0), lSrcH-1)*lSrcStride;
boxFilter_Row(pZero,src1,lSrcW,pSum,pDst,scaleRt,VLEN);
}
for(i = lStartRow+1;i<lEndRow;i++)
{
src0 = pSrc + max_t(i - radius - 1, 0)*lSrcStride;
src1 = pSrc + min_t(i + radius, lSrcH - 1)*lSrcStride;
pDst += lDstStride;
boxFilter_Row(src0,src1,lSrcW,pSum,pDst,scaleRt,VLEN);
}
MVoid boxFilter_u8_29x29_Row( unsigned char *pSrcSub, unsigned char *pSrcAdd, int width, unsigned int *pSum, unsigned char *pDst, unsigned int scaleRt);