传统图像处理算法总结

传统图像处理算法总结1.图像滤波目的:保证图像细节特征的条件下抑制图像噪声。1.1线性滤波1.11方框滤波原图像与内核的系数加权求和方框滤波的核:normalize=true时,方框滤波就变成了均值滤波。也就是说,均值滤波是方框滤波归一化(normalized)后的特殊情况。方框滤波的缺点:丢失了图像的边缘信息。opencv函数:boxFilter(src,dst,-1,…

大家好,又见面了,我是你们的朋友全栈君。

1. 图像滤波

目的:保证图像细节特征的条件下抑制图像噪声。

1.1 线性滤波

1.11 方框滤波

原图像与内核的系数加权求和
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
方框滤波的核:
在这里插入图片描述
normalize = true 时,方框滤波就变成了均值滤波。也就是说,均值滤波是方框滤波归一化(normalized)后的特殊情况。

方框滤波的缺点:丢失了图像的边缘信息。

opencv 函数 :boxFilter(src, dst, -1, Size(10, 10));
效果图:
在这里插入图片描述

1.12 均值滤波

内核中心点的像素值为内核中所有点像素的平均值
均值滤波的核:
在这里插入图片描述在这里插入图片描述

均值滤波的缺点:在图像去噪的同时也破坏了图像的细节部分,使图像模糊。

opencv 函数 :blur(src, dst, Size(10, 10));
效果图:
在这里插入图片描述

1.13 高斯滤波

原图像与满足正态分布的内核做卷积
由于正态分布也被称为高斯分布,因此这项技术被称为高斯模糊。

高斯滤波的核:
在这里插入图片描述

高斯滤波的优点:对于 抑制服从正态分布的(高斯)噪声非常有效。

**opencv 函数: GaussianBlur(src, dst, Size(5, 5), 0, 0); **
// sigmaX 和 sigmaY 都是0,就由 ksize.width 和 ksize.height 计算出来
// Size w,h 必须为奇数

效果图:
在这里插入图片描述

1.2 非线性滤波

1.2.1 中值滤波

内核中心点的像素值为内核中所有点像素的中值。
均值滤波的核:

在这里插入图片描述
在这里插入图片描述
中值滤波的特点:对椒盐噪声表现较好,对高斯噪声表现较差。
椒盐噪声:又称脉冲噪声,它随机改变一些像素值,在二值图像上表现为使一些像素点变白,一些像素点变黑。而中值滤波则不受极大极小值影响
opencv 函数: medianBlur ( image, out, 7)

1.2.2 双边滤波

滤波器由两个函数构成,一个由几何空间距离决定滤波器系数,另一个由像素差值决定滤波器系数。
双边滤波的优点:保留边界的同时去除噪声。
opencv 函数:bilateralFilter (image, out, 100, 0, 0 ); 参数3:每个像素领域的直径d,参数4、5:颜色空间和坐标空间的sigma。

1.3 形态学滤波

1.3.1 腐蚀

操作过程:构建一个核,并指定核的锚点,用该核与图像卷积,计算核覆盖区域的像素点最小值,将其作为图像在锚点位置的像素值
效果:使暗的更暗

在这里插入图片描述

1.3.2 膨胀

操作过程:构建一个核,并指定核的锚点,用该核与图像卷积,计算核覆盖区域的像素点最大值,将其作为图像在锚点位置的像素值
效果:使亮的更亮
在这里插入图片描述

1.3.3 开运算

操作过程: 先腐蚀,再膨胀
效果:消除小物体。

1.3.4 闭运算

操作过程: 先膨胀,再腐蚀
效果:排除小型黑洞。

1.3.5 形态学梯度

操作过程: 膨胀 – 腐蚀
效果:保留物体边缘轮廓。

1.3.6 顶帽

操作过程: 原图 – 开运算
效果:背景提取。

1.3.7 黑帽

操作过程: 闭运算 – 原图
效果:轮廓提取。

2. 阈值化

2.1 阈值化的目的

对图像像素进行取舍,直接剔除一些低于或高于一定值的像素。

2.2 固定阈值函数

double threshold(InputArray src, OutputArray dst, double thresh, double maxval, int type)
thresh: 决策阈值的大小
maxval: 将大于thresh的值置为maxval值
type:二值化方法,常用THRESH_BINARY
二值化示例:threshold(img, result, 170, 255, CV_THRESH_BINARY);

3. 图像金字塔

3.1 高斯金字塔

3.1.1 向下采样

操作步骤:
①. 用高斯核对图像进行卷积操作。
②. 删除偶数行和列。
效果:
①. 图像缩小为原来的1/4。
②. 图像部分信息丢失,变模糊。

3.1.2 向上采样

操作步骤:
①. 将图像在每个方向上扩大为原来的二倍,新增的行和列用0填充。
②. 用高斯核进行卷积模糊操作。
效果:
①. 图像缩小为原来的4倍。
②. 图像部分信息丢失,比原图模糊。

3.2 拉普拉斯金字塔

3.2.1 求解方式

第 i 层 拉普拉斯金字塔 = 第 i 层高斯金字塔 – 其先下采样再上采样。
(拉普拉斯金字塔是通过源图像减去先缩小后再放大的图像的一系列图像构成的。)

在这里插入图片描述
在这里插入图片描述

3.2.2 拉普拉斯金字塔作用

可以获得高斯金字塔下采样再上采样中间丢失的图像信息。

3.3 resize函数

作用:完成图像缩放
函数参数:void resize(InputArray src, OutputArray dst, Size dsize, double fx=0, double fy=0, int interpolation=INTER_LINEAR )
fx、fy为缩放系数
interpolation: 插值方法
缩小图像一般用INTER_AREA – 区域插值(利用像素区域关系的重采样插值)
放大图像一般用INTER_LINEAR – 线性插值

4. 边缘检测

4.1 Sobel 算子

4.1.1 Sobel 计算流程

在这里插入图片描述在这里插入图片描述
Gx 用于检测横向灰度值,Gy 用于检测纵向灰度值
在这里插入图片描述
在这里插入图片描述

4.1.2 Sobel 函数

Sobel ( const cvArr* src, CvArr* dst, int xorder, int yorder, int aperture_size =3 )
xorder = 1则计算图像x方向导数,yorder = 1则计算图像y方向导数。aperture_size: sobel 核大小,只能为1, 3, 5, 7。
cvSobel( src, dstx, 1, 0, 7 ); //sobel
cvSobel( src, dsty, 0, 1, 7 );
cvAddWeighted(dstx, 0.5, dsty, 0.5, 0, dst);

4.1.3 Sobel的改进——Scharr 滤波器

Scharr( src_gray, grad_x, ddepth, 1, 0, scale, delta, BORDER_DEFAULT );
Scharr( src_gray, grad_x, ddepth, 0, 1, scale, delta, BORDER_DEFAULT );
在这里插入图片描述
Sobel 滤波器只支持 size = 3的核。

4.2 Laplacian算子(二阶微分算子)

4.2.1 Laplacian算子

在这里插入图片描述

4.2.1 Laplacian函数

Laplacian( src_gray, dst, ddepth, kernel_size, scale, delta, BORDER_DEFAULT );
src_gray: 输入图像须为单通道图像。
Laplacian(src,dst,CV_16S, 3);

4.3 Canny 算子

4.3.1 Canny 计算流程

①. 高斯滤波减少噪声
②. 利用sobel算子计算梯度幅值和方向
③. 非极大值抑制
④. 设置高低阈值(2:1 ~ 3:1)
case 1. 若像素值 > 高阈值, 该像素为边缘
case2. 若像素值 < 低阈值, 该像素不是边缘
case3. 若像素值在两者之间,该像素仅仅在连接到一个高于高阈值的像素时被保留。

4.3.2 非极大值抑制 ===== 》 保留局部像素最大值点

步骤:
①. 确定像素点C的灰度值在其8值邻域内是最大的。
②. 判断C在其梯度方向是否最大,即与dTmp1和dTmp2比较。
(如果C点灰度值小于这两个点中的任一个,那就说明C点不是局部极大值,那么则可以排除C点为边缘。)
③. 采用插值求解梯度方向与
g1和g2对dTmp1进行插值,根据g3和g4对dTmp2进行插值(以得到dTmp1、dTmp2两个位置处的像素值),这要用到其梯度方向,这也是Canny算法中要求解梯度方向矩阵Thita的原因(算法的第二步)。**
在这里插入图片描述

4.4 直方图均衡化

4.4.1 直方图均衡化目的

对图像进行非线性拉伸,使图像直方图分布均匀,常用于图像增强处理中。

4.4.2 直方图均衡化函数

equalizeHist(image, image);
输入图像须为单通道

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/145810.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 后端框架SpringBoot入门[通俗易懂]

    后端框架SpringBoot入门[通俗易懂]SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员…

  • 谷歌地球Google Earth打不开的解决办法[通俗易懂]

    谷歌地球Google Earth打不开的解决办法[通俗易懂]从2020年11月20号左右,谷歌地球中国服务器全部关停,所有原来可以使用的hosts,全部不能使用了,导致原来可以在电脑上打开谷歌地球的,现在全部提示无网络,如下图:这个是谷歌地球的最新版,一样打不开:解决办法,尝试了,国内所有的有关谷歌地图的软件。唯一现在可以使用的:BIGEMAP如下图分下下载地址,大家可以安装来试一试,免费可用:http://download.bigemap.com/bmsetup.rar欢迎留言,提供更多谷歌地球的信息…

  • Java分布式应用技术架构介绍

    Java分布式应用技术架构介绍分布式架构的演进系统架构演化历程-初始阶段架构初始阶段的小型系统应用程序、数据库、文件等所有的资源都在一台服务器上通俗称为LAMP特征:应用程序、数据库、文件等所有的资源都在一台服务器上。描述:通常服务器操作系统使用linux,应用程序使用PHP开发,然后部署在Apache上,数据库使用Mysql,汇集各种免费开源软件以及一台廉价服务器就可以开始系统

  • expandablelistview详解[通俗易懂]

    expandablelistview详解[通俗易懂]我在项目中使用到expandablelistview,然后我就在网上找了很多关于expandablelistview的文章,那么这里,将一些对去进行总结一些,并将自己踩过的坑填上。expandablelistview就是类似QQ分组,点击分类,显示其各个详细的分类信息。下面是一些效果图这样是完成了有父标题,和子标题,实现了分组,接下来看看如何布局的。

  • KeyValuePair和Dictionary详解:「建议收藏」

    KeyValuePair和Dictionary详解:「建议收藏」1、KeyValuePaira、KeyValuePair是一个结构体(struct);b、KeyValuePair只包含一个Key、Value的键值对。2、Dictionarya、Dictionary可以简单的看作是KeyValuePair的集合;b、Dictionary可以包含多个Key、Value的键值对。usingSystem;usingSystem.Collections.Generic;namespaceConsoleTest

  • WPF 第三方控件学习使用——可停靠布局控件(AvalonDock)

    WPF 第三方控件学习使用——可停靠布局控件(AvalonDock)需求近期在做公司上位机产品规划与实验,参考了Blender软件的布局风格,希望能用WPF也做一个类似布局的上位机。于是开始寻找资源,很快就发现了AvalonDock。AvalonDock简介AvalonDock是Xceed公司Wpf.Toolkit中的一款收费产品,其中还包括很多其他控件的收集整理,感兴趣的自行研究。但是万能的Nuget里面有许多免费的版本,并且GitHub…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号