我想将具有固定色标尺寸的“标准过滤器”应用于单个通道图像
这就是我希望out[i,j]
等于img[i,j]
附近区域的像素值的标准。
对于那些熟悉Matlab的人,我正在寻找相当于
的人>> out = nlfilter( img, [P P], @std );
有没有办法使用ippi
函数执行此操作?
我遇到了ippiMean_StdDev
,但它似乎适用于单个窗口,而不是滑动窗口(返回标量值而不是数组)。
我也看到ippiRectStdDev
,但是手册说明这个功能是用于整体图像 - 我不知道这在我的情况下是如何适用的。
有没有人有这方面的工作实例或更详细的手册?
答案 0 :(得分:1)
最后我明白了。
数组大小:
输入尺寸H
x W
过滤器尺寸,P
x P
结果大小H-P+1
x W-P+1
中间缓冲区(32f和64f)大小H+1
x 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 );