2015-10-27 48 views
0

假设有一个具有以下值的7x5矩阵(16位图像),我想使用IPP将每个第三个值复制到一个新的3x2矩阵中。如何使用英特尔IPP复制光栅像素?

enter image description here =>enter image description here

我试过功能ippiCopySubpix_16u_C1R但它只复制我的原点矩阵的左角。我有哪些可能性?这里是我的测试代码:

Ipp16u x[7*5], y[3*2]; 
    IppiSize roiOrig = {7,5}; IppiSize roiDst = {3,2}; 
    auto * ptr = x; // fill the matrix 
    for (int i = 0; i < 7*5; i++) 
    { 
     *ptr++ = i; 
    } 

    ippiCopySubpix_16u_C1R(x, 7*2, y, 3*2, roiDst, 3, 3); 
    // result is [0 1 2 7 8 9] 

回答

0

我不认为ippiCopySubpix_16u_C1R是该作业的正确功能。
参见:http://technion.ac.il/doc/intel/ipp/ipp_manual/IPPI/ippi_ch4/functn_CopySubpix.htm

此函数计算使用线性内插的目标图像的像素值(见线性内插在附录B)按照下列公式计算:

enter image description here

其中i = 0,... roiSize.height - 1,j = 0,... roiSize.width - 1。

如您所见,dx和dy不是要跳过的像素的距离,而是偏移子像素中的值。

我认为你正在寻找的功能是:ippiCopy_16u_C3C1R
参考:https://software.intel.com/en-us/node/503752

功能水平跳过每三个源像素。

对于垂直跳过,请将srcStep设置为3行的大小(以字节为单位)。