OpenCV离散傅里叶变换
离散傅里叶变换
- 作用:得到图像中几何结构信息
- 结论:傅里叶变换后的白色部分(即幅度较大的低频部分),表示的是图像中慢变化的特性,或者说是灰度变化缓慢的特性(低频部分)。
傅里叶变换后的黑色部分(即幅度低的高频部分),表示图像中快变化的特性,或者说是灰度变化快的特性(高频部分)。
dft()函数
函数原型
1 | void dft(InputArray src, OutputArray dst, int flage=0, int nonzeroRow=0) |
- InputArray 类型的 src。输入矩阵,可以为实数或者虚数。
- OutputArray 类型的 dst。函数调用后的运算结果存在这里,其尺寸取决于标识符,也就是第三个参数。
- int 类型的 falgs。转换的标识符,有默认值 0,取值可以为表中的结合。
标识符名称 | 意义 |
---|---|
DFT_INVERSE | 用一维或二维逆变换代替默认的正向变换。 |
DFT_SCALE | 缩放比例标识符,输出的结果都会以 1/N 进行放缩,通常擦很难过会结合 DFT_INVERSE 一起使用。 |
DFT_ROWS | 对输入矩阵的每行进行正向或反向的变换,此标识符可以在处理多种矢量的时候用于减小资源的开销,这些处理常常是三维或高位变换等复杂操作 |
DFT_COMPLEX_OUTPUT | 进行一维或二维复数苏胡祖反变换。这样的结果通常是一个大小相同的复矩阵。如果输入的矩阵有复数的共轭对称性(比如是一个带有 DEF_COMPLEX_OUTPUT 标识符的正变换结果),便会输出实矩阵。 |
- int 类型的 nonzeroRows,有默认值 0.当此参数设为非零时(最好是取值为想要处理的那一行的值,比如 C。rows),函数会假设只有输入矩阵的第一个非零行包含非零元素(没有设置 DFT_INVERSE 标识符),或只有输出矩阵的一个非零行包含非零元素(设置了 DFT_INVERSE 标识符)。这样的话,函数就可对其他行进行更高效的处理,以节省时间开销。
返回 DFT 最优尺寸大小:getOptimalDFTSize()函数
函数原型
1 | int getOptimalDFTSize(int vecsize) |
- int 类型的 vecsize,向量尺寸,即图片的 rows、cols。
扩充图像边界:copyMakeBorder()函数
函数原型
1 | void copyMakeBorder(InputArray src, OutputArray dst, int top, int bottom, int left, int right, int borderType, const Scalar& value=Scalar()) |
- InputArray 类型的 src,输入图像,即源图像,填 Mat 类型的对象即可。
- OutputArray 类型的 dst,函数调用后的运算结果存在这里,即这个参数用于存放函数调用后的输出结果,需和源图片有一样的尺寸和类型,且 size 应该为 Size(src.cols+left+right , src.rows+top+bottom)。
- 接下来的 4 个参数分别是为 int 类型的 top、bottom、left、right,分别表示在源图像的四个方向上填充多少像素。
- 第七个参数,int 类型的 borderType,边界类型,常见取值为 BORDER_CONSTANT,可参考 borderInterpolate()得到更多细节。
- 第八个参数,const Scalar& 类型的 value,有默认值 Scalar(),可以理解为默认值为 0。当 borderType 取值为 BORDER_CONSTANT 时,这个参数表示边界值。
计算二维矢量的幅值:magnitude()函数
函数原型
1 | void magnitude(InputArray x, InputArray y, OutputArray magnitude) |
- InputArray 类型的 x,表示矢量的浮点型 X 坐标值,也就是实部。
- InputArray 类型的 y,表示矢量的浮点型 Y 坐标值,也就是虚部。
- OutputArray 类型的 magnitude,输出的幅值,它和第一个参数 x 有着同样的尺寸和类型。
计算自然对数:log()函数
计算数组元素绝对值的自然对数
函数原型
1 | void log(InputArray src, OutputArray dst) |
- 输入图像
- 得到的对数值
矩阵归一化:normalize()函数
函数原型
1 | void normalize(InputArray src, OutputArray dst, double alpha=1, double beta=0, int norm_type=NORM_L2, int dtype=-1, InputArray mask=noArray()) |
- InputArray 类型的 src。输入图像,即源图像,填 Mat 类的对象即可。
- OutputArray 类型的 dst。函数调用后的运算结果。和源图片有一样的尺寸和类型。
- double 类型的 alpha。归一化后的最大值,默认值 1。
- double 类型的 beta。归一化后的最小值,默认值 0。
- int 类型的 norm_type。归一化类型,有 NORM_INF、NORM_L1、NORM_L2 和 NORM_MINMAX 等参数可选,有默认值 NORM_12。
- int 类型的 dtype,有默认值-1。当参数去负值时,输出矩阵和 src 有同样的类型,否则,它和 src 有同样的通道数,且此时图像深度为 CV_MAT_DEPTH (dtype)。
- InputArray 类型的 mask,可选的操作掩膜,有默认值 noArray()。
综合示例
1 |
|
本文作者 : HeoLis
原文链接 : https://ishero.net/OpenCV%E7%A6%BB%E6%95%A3%E5%82%85%E9%87%8C%E5%8F%B6%E5%8F%98%E6%8D%A2.html
版权声明 : 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
学习、记录、分享、获得