个人博客:http://www.chenjianqu.com/

原文链接:http://www.chenjianqu.com/show-12.html

目录:

1.       空间域和频域的概念

2.       图像滤波

3.       图像卷积

4.       常用空间域滤波器

5.       线性点运算

6.       均值滤波

7.       加权均值滤波

8.       高斯滤波

9.       阈值平均滤波

空间域和频域的概念

空间域与频率域为我们提供了不同的视角。在空间域中,函数自变量(x,y)被视为二维空间中的一个点,数字图像f(x,y)即为一个定义在二维空间中的矩形区域上的离散函数;换一个角度,如果将f(x,y)视为幅值变化的二维信号,则可以通过某些变换手段(如傅里叶变换、离散余弦变换、沃尔什变换和小波变换等)在频域下对图像进行处理了  因为在频率域就是一些特性比较突出,容易处理。比如在空间图像里不好找出噪声的模式,如果变换到频率域,则比较好找出噪声的模式,并能更容易的处理。

空间域 英文: spatial domain。 释义: 又称图像空间(image space)。由图像像元组成的空间。在图像空间中以长度(距离)为自变量直接对像元值进行处理称为空间域处理。

频率域。 英文: spatial frequency domain。 释义: 以频率(即波数)为自变量描述图像的特征,可以将一幅图像像元值在空间上的变化分解为具有不同振幅、空间频率和相位的简振函数的线性叠加,图像中各种频率成分的组成和分布称为空间频谱。这种对图像的频率特征进行分解、处理和分析称为频率域处理或波数域处理。

图像滤波

图像滤波,即在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制,是图像预处理中不可缺少的操作,其处理效果的好坏将直接响到后续图像处理和分析的有效性和可靠性。(滤波就是要去除没用的信息,保留有用的信息,可能是低频,也可能是高频)。

滤波的目:1. 是抽出对象的特征作为图像识别的特征模式;  2. 为适应图像处理的要求,消除图像数字化时所混入的噪声。

滤波可分为空间域滤波可频域滤波,前者通过图像卷积运算实现,后者通过傅立叶变换实现。

图像卷积

卷积运算:可看作是加权求和的过程,使用到的图像区域中的每个像素分别于卷积核(权矩阵)的每个元素对应相乘,所有乘积之和作为区域中心像素的新值。

卷积核:卷积时使用到的权用一个矩阵表示,该矩阵是一个权矩阵。不同的卷积核对应不同的滤波器。

边界问题:当处理图像边界像素时,卷积核与图像使用区域不能匹配,卷积核的中心与边界像素点对应,卷积运算将出现问题。解决办法:1.复制边界,2.忽略边界,3.设定边界值。

卷积示例:

3 * 3 的像素区域R与卷积核G的卷积运算

R5(中心像素)=R1G1 + R2G2 + R3G3 + R4G4 + R5G5 + R6G6 + R7G7 + R8G8 + R9G9

代码实现:(对边缘不进行处理)

//kernel为float类型的卷积核
Mat ConvolutionOperation(Mat &src, Mat &kernel)
{Mat dst(src.rows, src.cols, src.type(), Scalar(0));if (src.channels() == 1){int rowsSub = int(kernel.rows / 2);int colsSub = int(kernel.cols / 2);for (int i = 0; i < src.rows; i++) {for (int j = 0; j < src.cols; j++){if (i < rowsSub || i >= src.rows - rowsSub || j < colsSub || j >= src.cols - colsSub) {dst.at<uchar>(i, j) = src.at<uchar>(i, j);}else {float sum = 0;for (int ki = 0; ki < kernel.rows; ki++){for (int kj = 0; kj < kernel.cols; kj++){int i_ = i + ki - rowsSub;int j_ = j + kj - colsSub;sum += src.at<uchar>(i_, j_)*kernel.at<float>(ki, kj);}}dst.at<uchar>(i, j) = int(sum);}}}}return dst;
}

常用的空间域滤波器

根据滤波的效果,空间域滤波可分为空间平滑滤波器和空间锐化滤波器。平滑滤波报告均值滤波、加权均值滤波、阈值平均滤波、中值滤波、高斯滤波等,应用时他们仅是卷积核之间的不同。

平滑滤波用于模糊处理和降低噪声。模糊处理常用于预处理任务中,如在目标提取之前去除图像中的一些琐碎细节,以及桥接直线或曲线的缝隙。通过线性或非线性平滑滤波也可降低噪声。

以下分别介绍各个滤波器。

线性点运算

对图像进行点运算
Mat LinearPointOperation_Float(Mat& src, double a, double b)
{Mat dst(src.rows, src.cols, src.type(), Scalar(0));if (src.channels() == 1)for (int i = 0; i < src.rows; i++) {for (int j = 0; j < src.cols; j++)dst.at<float>(i, j) = src.at<float>(i, j)*a+b;return dst;
}

空间域平滑滤波

1均值滤波

卷积核:

代码实现:

Mat MeanFiltering(Mat &src, int n)
{Mat one = Mat::ones(Size(9, 9), CV_32FC1);Mat kernel = LinearPointOperation_Float(one, 1 / 81.0, 0);Mat dst = ConvolutionOperation(src, kernel);return dst;
}

运行结果:

2.加权均值滤波

卷积核:

代码实现:

Mat WeightedMeanFiltering(Mat &src, Mat &kernel)
{Mat dst = ConvolutionOperation(src, kernel);return dst;
}
Mat WeightedKernel = (Mat_<float>(3, 3) << 1, 2, 1, 2, 4, 2, 1, 2, 1);
Mat kernel = LinearPointOperation_Float(WeightedKernel, 1 / 16.0, 0);
Mat dst = WeightedMeanFiltering(img, kernel);

运行效果:

3. 高斯滤波器

一维高斯分布:

二维高斯分布:

高斯模板:

代码实现:

Mat GaussFiltering(Mat &src, Mat &kernel)
{Mat dst = ConvolutionOperation(src, kernel);return dst;
}
Mat GaussKernel = (Mat_<float>(5, 5) << 1, 4, 7, 4, 1, 4, 16, 26, 16,4,7,26,41,26,7,4,16,26,16,4,1,4,7,4,1);
Mat kernel = LinearPointOperation_Float(GaussKernel, 1 / 273.0, 0);
Mat dst = GaussFiltering(img, kernel);
imshow("dst", dst);

运行结果:

 

4. 阈值平均滤波

顾名思义,阈值平均滤波就是在平均滤波的基础上加上阈值的约束,即当像素点与图像均值的差小于设定的阈值时,输出像素点等于原像素点,否则求其对该像素点进行求模板均值。

代码实现:

求图像均值:

double ImageMean(Mat &src)
{long sum = 0;if (src.channels() == 1) {for (int i = 0; i < src.rows; i++) {uchar *srcRow = src.ptr(i);for (int j = 0; j < src.cols; j++)sum += srcRow[j];}}return double(sum*1.0 / (src.cols*src.rows));
}

实现阈值均值滤波:

Mat ThresholdMeanFiltering(Mat &src,int n,int thre)
{//获得卷积核Mat kernel = Mat::ones(Size(n, n), CV_32FC1);kernel = LinearPointOperation_Float(kernel, 1 / (1.0*n*n), 0);//创建输出图像Mat dst(src.rows, src.cols, src.type(), Scalar(0));if (src.channels() == 1){double m = ImageMean(src);//计算出图像均值int rowsSub = int(kernel.rows / 2);int colsSub = int(kernel.cols / 2);for (int i = 0; i < src.rows; i++) {for (int j = 0; j < src.cols; j++){if (i < rowsSub || i >= src.rows - rowsSub || j < colsSub || j >= src.cols - colsSub) {dst.at<uchar>(i, j) = src.at<uchar>(i, j);}else {if (abs(src.at<uchar>(i, j)-m) < thre)dst.at<uchar>(i, j) = src.at<uchar>(i, j);else {float sum = 0;for (int ki = 0; ki < kernel.rows; ki++){for (int kj = 0; kj < kernel.cols; kj++){int i_ = i + ki - rowsSub;int j_ = j + kj - colsSub;sum += src.at<uchar>(i_, j_)*kernel.at<float>(ki, kj);}}dst.at<uchar>(i, j) = int(sum);}}}}}return dst;
}

当输入n=5,thre=50时,运行结果:

 

参考文献

[1] CSDN博客:yeler082. 图像处理技术上的空间域和空间频率域.

https://blog.csdn.net/yeler082/article/details/78374818. 2017-10-28

[2] CSDN博客:John9ML. 图像处理基本概念——卷积,滤波,平滑.

https://blog.csdn.net/weixin_38570251/article/details/82054185. 2018-08-25.

[3] 韩九强,杨磊.数字图像处理.西安交通大学出版社.2018-08

图像处理-空间域平滑滤波相关推荐

  1. 图像处理-空间域锐化滤波

    个人博客:http://www.chenjianqu.com/ 原文链接:http://www.chenjianqu.com/show-14.html 目录: 1.前言  2.锐化滤波  3.Robe ...

  2. 数字图像处理 空间域平滑 MATLAB实验

    一.原理_均值滤波 设加噪图像为 f(x,y) ,经均值滤波处理后的图像为g(x,y) ,则: 式中, S是(x,y)像素点的邻域,K是S内的像素数. 最典型的S为3X3邻域,可用模板形式表示为: 这 ...

  3. 【youcans 的 OpenCV 学习课】7. 空间域图像滤波

    专栏地址:『youcans 的图像处理学习课』 文章目录:『youcans 的图像处理学习课 - 总目录』 [youcans 的 OpenCV 学习课]7. 空间域图像滤波 图像滤波是在尽可能保留图像 ...

  4. 图像处理 | 空间域与频率域滤波

    频率域滤波(低通) 作用:平滑处理图像,通过低频拒绝高频,同时高频往往是图像噪声所集中的地方. 1) 算法思路流程 频率域滤波的一般处理方法是:先修改一幅图像的傅里叶变换,然后计算其反变换,得到处理后 ...

  5. 数字图像处理-空间域处理-灰度变换-基本灰度变换函数(反转变换、对数变换、伽马变换和分段线性变换)

    数字图像处理-空间域处理-灰度变换-基本灰度变换函数(反转变换.对数变换.伽马变换和分段线性变换) 空间域处理是直接对像素进行操作的方法,这是相对于频率域处理而言的.空间域处理主要分为两大类:灰度变换 ...

  6. 数字图像处理 空间域高斯低通滤波 MATLAB实验

    一.原理_空间域高斯低通滤波 高斯低通滤波是一种使用的去噪滤波,可用于去除高斯噪声,且几乎没有振铃现象. 二.步骤 (1)读入原图像lena.bmp并显示: (2)对原图像分别添加高斯噪声,并显示加噪 ...

  7. 数字图像处理 频率域平滑 MATLAB实验

    一.原理_频率域平滑 理想低通滤波器的传递函数为: n 阶巴特沃斯低通滤波器的传递函数为: n 阶指数低通滤波器的传递函数为: 二.步骤 (1)读入原图像test.tif并显示: (2)对原图像添加高 ...

  8. 数字图像处理-空间域图像增强(一)(图像反转,对数变换,幂次变换、分段线性变换)

    空间域增强的第一部分:图像反转,对数变换,幂次变换.分段线性变换 (s:现点值,r: 原点值) 图像反转: 这个无需多说,就是把黑变白,白变黑,拿八位灰度图像来说 表达式:s=255-r 作用:看清暗 ...

  9. 数字图像处理 空间域锐化 MATLAB实验

    一.原理_空间域锐化 设图像为 f(x,y) , Roberts算子的定义式为: 其对应的模板为: Prewitt算子的定义式为: 其中, 其对应的模板为: Sobel算子的定义式为: 其中, 其对应 ...

最新文章

  1. 抖音、快手和直播行业的火爆究竟给了谁机会?
  2. sega+model+3+android,世嘉MODEL2经典老游戏移植登场 追加联网对战
  3. 《vSphere性能设计:性能密集场景下CPU、内存、存储及网络的最佳设计实践》一3.3.3 供应实验室...
  4. node.js介绍及Win7环境安装测试(转)
  5. Windows7 支付宝证书安装方法
  6. setuptools Automatic Script Creation
  7. 论文Mathtype公式自动编号
  8. Flex中实现Tree绑定数据后自动展开节点
  9. automak 和 autoconf 介绍
  10. Spark REST服务api官网地址
  11. Sublime Text 3 配置C语言运行环境
  12. Alpha 完结撒花 —— 事后诸葛亮
  13. SEP8266 由零开始(一),最小系统,下载,与WiFi建立
  14. mysql查询补齐12个月_MySQL查询12个月数据,无数据补0
  15. php mssql 存储过程 输入参数,MSSQL_SQL Server存储过程中使用表值作为输入参数示例,在2008之前如果我们想要将表作 - phpStudy...
  16. C语言编程常用宏定义
  17. DeeplabV3+训练数据集流程(学习记录)
  18. 看着窗户外行走的路人,始终看不见你
  19. 第一篇:DDR3和mig的介绍
  20. 基于adb和shell命令的Android Mac电脑日常开发效率小工具

热门文章

  1. oracle拓展磁盘空间,Oracle磁盘空间使用统计
  2. 【Linux】处理数据文件
  3. jQuery中ajax请求的六种方法(三、五):$.getScript()方法
  4. 【原创】公司各个阶段 CTO 需要做什么?(下篇)
  5. c# 开发window服务
  6. [014]模板-模板实参推导
  7. 在二元树中找出和为某一值的所有路径
  8. STL —— STL六大组件
  9. Jexus vs IIS8 非绝对客观对比测试
  10. js 调用webservice接口