傅里叶变换
- 傅里叶变换(法语:Transformation de Fourier、英语:Fourier transform)是一种线性积分变换,用于信号在时域(或空域)和频域之间的变换,在物理学和工程学中有许多应用。因其基本思想首先由法国学者约瑟夫·傅里叶系统地提出,所以以其名字来命名以示纪念。实际上傅里叶变换就像化学分析,确定物质的基本成分;信号来自自然界,也可对其进行分析,确定其基本成分。1
- 傅里叶变换在图像处理中的作用:
- 1.图像增强与图像去噪
- 绝大部分噪音都是图像的高频分量,通过低通滤波器来滤除高频——噪声; 边缘也是图像的高频分量,可以通过添加高频分量来增强原始图像的边缘;
- 2.图像分割之边缘检测
- 提取图像高频分量
- 3.图像特征提取:
- 形状特征:傅里叶描述
- 纹理特征:直接通过傅里叶系数来计算纹理特征
- 其他特征:将提取的特征值进行傅里叶变换来使特征具有平移、伸缩、旋转不变性
- 4.图像压缩
- 可以直接通过傅里叶系数来压缩数据,常用的离散余弦变换是傅立叶变换的实变换。2
图像滤波
- 图像滤波即在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制,即去掉无关的噪音,保留有用的信息。
- 滤波的目的有两个:一是抽出对象的特征作为图像识别的特征模式; 另一个是为适应图像处理的要求,消除图像数字化时所混入的噪声。
- 滤波常用API:
- 边缘检测(微分)
- Sobel,拉普拉斯算子
- 图像去噪/平滑(积分)
- GaussianBlur
- 中心差分提取图像边缘:
#include<iostream>
#include<opencv2/opencv.hpp>
#define Pi 3.1415926
using namespace std;
using namespace cv;
int main(int argc, char ** argv)
{
Mat src = imread("F:/girl.jpg", 1);
cvtColor(src, src, COLOR_BGR2GRAY);//转为灰度图像
namedWindow("src", WINDOW_AUTOSIZE);
imshow("src", src);
waitKey(0);
Mat dImg = Mat(src.rows, src.cols - 2, CV_8UC1);//少两列
//遍历及运算
for (int i = 0;i < src.rows;i++)
{
for (int j = 1;j < src.cols - 1;j++)
{
dImg.at<uchar>(i, j - 1) = src.at<uchar>(i, j + 1) - src.at<uchar>(i, j - 1);
}
}
namedWindow("dst", CV_WINDOW_AUTOSIZE);
imshow("dst", dImg);
waitKey(0);
}
结果:
卷积:
- 函数 f , g f,g f,g是定义在 R n R n {\displaystyle \mathbb {R} ^{n}} \mathbb {R} ^{n} RnRn上的可测函数 ( m e a s u r a b l e f u n c t i o n ) , f f 与 g g (measurable function), {\displaystyle f} f与 {\displaystyle g} g (measurablefunction),ff与gg的卷积记作 f ∗ g