0

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

在此处输入图像描述 => 在此处输入图像描述

我尝试了该功能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]
4

1 回答 1

0

我认为 ippiCopySubpix_16u_C1R 不适合这项工作。
参考:http ://technion.ac.il/doc/intel/ipp/ipp_manual/IPPI/ippi_ch4/functn_CopySubpix.htm

此函数根据以下公式使用线性插值(参见附录 B 中的线性插值)计算目标图像的像素值:

在此处输入图像描述

其中 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 行的大小(以字节为单位)。

于 2016-07-12T21:26:42.067 回答