如何使用Intel IPP复制光栅像素?

时间:2015-10-27 09:18:51

标签: intel-ipp

假设存在具有以下值的7x5矩阵(16位图像),并且我想使用IPP将每个第3值复制到新的3x2矩阵中。

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]

1 个答案:

答案 0 :(得分: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行的大小(以字节为单位)。