一、函数:
a.getOptimalDFTSize
函数:
(1)函数原型:
CV_EXPORTS_W int getOptimalDFTSize(int vecsize);
(2)函数作用:
-
getOptimalDFTSize
函数用于计算给定向量大小的最优离散傅里叶变换(DFT)尺寸。由于 DFT 的性能并不是向量尺寸的单调函数,因此通常在计算两个数组的卷积或对数组进行频谱分析时,将输入数据用零填充到略大的尺寸,这样可以更快地进行变换。
(3)参数:
vecsize
:输入参数,表示向量的大小。
(4)返回值:
-
函数返回的 N 是大于或等于
vecsize
的最小数,使得大小为 N 的向量可以高效地进行 DFT 变换。在当前实现中,N 的形式为 N=2p×3q×5rN=2p×3q×5r,其中 p、q、r 是一些整数。
(5)特殊情况:
-
如果
vecsize
太大(非常接近INT_MAX
),函数返回一个负数。
(6)DCT 变换:
-
虽然该函数不能直接用于估计离散余弦变换(DCT)的最优向量大小(因为当前的 DCT 实现仅支持偶数大小的向量),但可以通过
getOptimalDFTSize((vecsize+1)/2)*2
来间接处理。
(7)优化原理:
-
数组大小为 2 的幂(2、4、8、16、32,...)时处理速度最快。此外,大小为 2、3 和 5 的乘积的数组(例如 300 = 5 × 5 × 3 × 2 × 2)也被相当高效地处理。
(8)相关函数:
dft
:执行离散傅里叶变换。dct
:执行离散余弦变换。idft
:执行逆离散傅里叶变换。idct
:执行逆离散余弦变换。mulSpectrums
:用于乘以两个相似大小的 DFT 或 DCT 变换结果。
b. copyMakeBorder
函数:
(1)函数原型:
CV_EXPORTS_W void copyMakeBorder(InputArray src, OutputArray dst, int top,
int bottom, int left, int right, int borderType,
const Scalar& value = Scalar() );
(2)函数作用:
copyMakeBorder
函数在图像周围形成边框。它将源图像src
复制到目标图像dst
的中间,并用外推(extrapolated)像素填充图像的左侧、右侧、上方和下方。
(3)参数:
src
:源图像。dst
:目标图像,其类型与src
相同,尺寸为Size(src.cols+left+right, src.rows+top+bottom)
。top
、bottom
、left
、right
:分别指定在源图像矩形的每个方向上外推多少像素来构建边框。borderType
:边框类型,用于指定如何外推像素。不同的外推方法在borderInterpolate
中有详细说明。value
:当borderType
为BORDER_CONSTANT
时,用于指定边框的值,默认为Scalar()
。
(4)特殊模式:
-
当
src
已经是dst
中间的一部分时,函数不会复制src
本身,而只是构建边框。这可以通过不复制数据而选择dst
中与src
大小相同的中间部分来实现。
(5)注意点:
- 如果源图像是更大图像的感兴趣区域(ROI),
copyMakeBorder
会尝试使用 ROI 外的像素来形成边框。要禁用此功能并始终进行外推(就好像src
不是 ROI),可以在borderType
中使用BORDER_ISOLATED
。
c. merge
函数(重载):
(1)函数原型: