1

我想将具有固定补丁大小的“标准过滤器”应用于单通道图像。
那就是我想out[i,j]等于周围邻域的像素值的标准差img[i,j]

对于那些熟悉 Matlab 的人,我正在寻找相当于

>> out = nlfilter( img, [P P], @std );

ippi有没有办法使用函数来做到这一点?

我遇到了,ippiMean_StdDev但它似乎适用于单个窗口,而不是滑动窗口(返回标量值而不是数组)。
我也看到了,ippiRectStdDev但手册指出此功能适用于积分图像 - 我看不出这在我的情况下如何应用。

有没有人有一个工作示例或更详细的手册?

4

1 回答 1

1

最后我想通了。

  1. 输入图像必须是 uint8 格式
  2. 需要分配 2 个缓冲区(在我的情况下是 32 位浮点数和 64 位浮点数)
  3. 数组大小:
    输入大小HxW
    过滤器大小,PxP
    结果大小H-P+1xW-P+1
    中间缓冲区(32f 和 64f)大小H+1x W+1(注意整数图像边界的加一!)

    // first, compute integral and sqIntegral image 
    IppiSize sz; sz.width = W; sz.height = H;
    ippiSqrIntegral_8u32f64f_C1R( uint8ImgPtr, W*sizeof(unsigned char), 
        d32ImgPtr, (W+1)*sizeof(float), 
        d64ImgPtr, (W+1)*sizeof(double), 
        sz, 0, 0 );
    // using the integral images compute the std filter result
    IppiRect rect = { 0, 0, P, P };
    IppiSize dsz; dsz.width = W-P+1; dsz.height = H-P+1;
    ippiRectStdDev_32f_C1R( d32ImgPtr, (W+1)*sizeof(float), 
        d64ImgPtr, (W+1)*sizeof(double), 
        dstPtr, (W-P+1)*sizeof(float), dsz, rect );
    
于 2013-10-30T13:02:44.663 回答