滤波是信号和图像处理中的一种基本操作。它的目的时选择性地提取图像中某些方面的内容,这些内容在特定应用环境下传达了重要信息。
通过观察图像灰度值变化的频率来描述图像的特征,称为频域;
通过观察图像灰度分布来描述图像特征,称为空域;
有几种著名的变换法可以用来清楚地显示图像地频率成分,例如傅里叶变换或余弦变换。图像是二维的,因此频率分为两种,即垂直频率和水平频率。
在频域分析框架下,滤波器是一种放大图像中某些频段,同时滤掉其他频段的算子。
*低通滤波器
一个简单的方法是把每个像素的值替换成它周围像素的平均值。这样一来,强度的快速变化被消除,代之以更加平滑的过渡。
cv::blur函数将每个像素的值替换成该像素邻域的平均值。
效果:
代码:
int main()
{
cv::Mat image = cv::imread("zifeng.jpg");
cv::imshow("original image", image);
cv::Mat result;
cv::blur(image, result, cv::Size(4, 4));
cv::imshow("mean filtered image", result);
cvWaitKey();
}
有时需要让邻域内较近的像素具有更高的重要度,因此可计算加权平均值,即较近的像素比较远的像素具有更大的权重,可采用高斯函数指定的加权策略。
代码:
cv::GaussianBlur(image, result, cv::Size(5, 5), 1.5);
cv::imshow("Gaussian filtered image", result);
如果用邻域像素的加权累加值来替换像素值,这种滤波器是
线性的。
简单应用:
1、缩减像素采样
测试图像缩小1/4后(缩小的方式是每4行像素中保留一行),再将每个像素放大4倍得到的结果: