opencv学习笔记24-opencv图像的傅里叶变换(幅值谱)

一、函数:

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)
  • topbottomleftright:分别指定在源图像矩形的每个方向上外推多少像素来构建边框。
  • 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)函数原型:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

The_xzs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值