图像处理与图像识别笔记(五)图像增强2

上一节中我们讲解了灰度变换的原理以及实现方法,本节我们讲解空域滤波增强,与灰度变换相同,空域滤波增强是一种空域处理的方法,不过空域滤波不是一种对点做处理的方法,而是利用相邻像素间的关系进行增强。空域滤波可以按照增强效果的不同分为平滑锐化两类,又都可分为线性与非线性方法,线性滤波利用空域卷积来实现。接下来我们对平滑与锐化一一进行讲解。

一、图像平滑

图像平滑的目的是抑制和消除噪声,我们首先介绍一种线性平滑方法—邻域平均,平滑算子为

AAA表示已以(i,j)(i,j)(i,j)为中心的邻域点的集合,MMMAAA中像素点的总数,邻域平均的实现代码如下:

import cv2
import numpy as np 
import matplotlib.pyplot as plt 
import pylabimg = cv2.imread('Lena.jpg',1)
kernel = np.ones((5,5),np.float32)/25	#5×5卷积核,邻域平均
res = cv2.filter2D(img,-1,kernel)
cv2.imshow('res',res)
cv2.waitKey(0)

opencv提供cv2.filter2D()函数来对图像进行卷积操作

dst = cv2.filter2D(src, ddepth, kernel[, dst[, anchor[, delta[, borderType]]]])
#dst:输出图像
#src:输入图像
#ddepth:输出图像深度,-1为与原图相同
#kernel:卷积核
#anchor:锚点,默认为(-1, -1),指卷积核的中心点
#delta:输出结果时的附加值,默认为0
#borderType:边界模式,默认为BORDER_DEFAULT

我们采用不同大小的卷积核,依次对源图像进行卷积操作,结果如下,

卷积核半径越大,图像平滑的效果越明显,图像越来越模糊。
除了上述线性平滑方法之外,还有非线性平滑滤波器,包括中值滤波百分比滤波最大值滤波最小值滤波,我们特别讲解一下中值滤波,中值滤波是将选定的奇数像素窗口内的各像素灰度按大小排队,用中间的灰度值代替窗口中原图像中间位置的像素,因此是一种非线性滤波。中值滤波对既保留边缘又要求去噪的任务很有用,尤其对椒盐噪声
我们为Lena添加椒盐噪声,分别对其进行邻域平均与中值滤波,实现代码如下,

import cv2
import numpy as np 
import matplotlib.pyplot as plt 
import random
import pylabdef cvToplt(img):	#经过颜色转换后plt才能输出彩色图像b,g,r = cv2.split(img)  img = cv2.merge([r,g,b])return img  def main():	img = cv2.imread('Lena.jpg',1)x,y,z = img.shapefor i in range(5000):	#添加椒盐噪声row = random.randint(0,x-1)col = random.randint(0,y-1)img[row][col] = 255kernel = np.ones((5,5),np.float32)/25res = cv2.filter2D(img,-1,kernel)	#邻域平均res2=  cv2.medianBlur(img,5)	#中值滤波plt.subplot('131'),plt.imshow(cvToplt(img)),plt.title('Original')plt.subplot('132'),plt.imshow(cvToplt(res)),plt.title('mean')plt.subplot('133'),plt.imshow(cvToplt(res2)),plt.title('median')pylab.show()if __name__ =="__main__":main()

结果如下,

经过对比发现,中值滤波的去噪效果好,且能够较好的保留图像边缘,邻域平均的平滑效果更好但去噪效果相对较差

二、图像锐化

对正常的图像,通过锐化提取边缘、轮廓、线条等信息,供进一步识别。通过加重图像轮廓克服降质,以达到更好的视觉效果。常见的锐化算法包括Roberts算子Sobel算子、Prewitt算子、拉普拉斯算子

(1)基于一阶微分的图像增强—梯度法
我们把图像看成二维离散函数,为了提取图像的边缘,我们需要计算图像的梯度,梯度是方向导数取最大值的方向的向量 ,图像的边缘即为图像梯度较大的地方
梯度用一个二维列向量来定义,

                

对于离散的二维图像,为计算方便,用绝对值代替幅值,用差分代替微分:
(1)(1)1
为了更好的理解,我们考虑一个3×3的图像区域,

zzz代表灰度级,由式(1)(1)1,在点z5z_5z5▽f=∣z6−z5∣+∣z8−z5∣▽f=|z_6-z_5|+|z_8-z_5|f=z6z5+z8z5

接下来我们来看Roberts交叉梯度,z5z_5z5▽f=∣z9−z5∣+∣z8−z6∣▽f=|z_9-z_5|+|z_8-z_6|f=z9z5+z8z6,我们发现计算方法发生了改变,可以理解为各种梯度算子就是不同的梯度计算方法,由于上述的梯度公式本来就是近似的,因此没有绝对的衡量方法,每种梯度算子的功效各不相同,像第一种方式关注的是图像水平方向和垂直方向上的梯度,而Roberts交叉梯度则关注的是斜对角方向上的梯度
Roberts交叉梯度的计算由两个模板组成,第一个模板求得梯度的第一项,第二个模板求得梯度的第二项,然后求和,得到梯度。两个模板称为Roberts交叉梯度算子。

利用Roberts交叉梯度算子对图像进行处理,实现代码如下,

import cv2
import numpy as np 
import matplotlib.pyplot as plt 
import pylabdef main():img = cv2.imread('Lena.jpg',0)plt.imshow(img,'gray')kernel_1 = np.array([[-1,0],[0,1]])  #Roberts算子kernel_2 = np.array([[0,-1],[1,0]])res = cv2.filter2D(img,-1,kernel_1)res2 = cv2.filter2D(img,-1,kernel_2)plt.subplot(131),plt.imshow(res,'gray'),plt.title('1')plt.subplot(132),plt.imshow(res2,'gray'),plt.title('2')plt.subplot(133),plt.imshow(res+res2,'gray'),plt.title('1+2')pylab.show()if __name__ == "__main__":main()

实验结果如下,
在这里插入图片描述

接下来我们学习Sobel梯度算子,Sobel是一种3×3的梯度模板,▽f=∣(z7+2z8+z9)−(z1+2z2+z3)∣+∣(z3+2z6+z9)−(z1+2z4+z7)∣▽f=|(z_7+2z_8+z_9)-(z_1+2z_2+z_3)|+|(z_3+2z_6+z_9)-(z_1+2z_4+z_7)|f=(z7+2z8+z9)(z1+2z2+z3)+(z3+2z6+z9)(z1+2z4+z7)

Sobel关注的是水平方向上与垂直方向上的梯度,这点与Roberts不同,Sobel实现代码如下,

import cv2
import numpy as np 
import matplotlib.pyplot as plt 
import pylabdef main():img = cv2.imread('Lena.jpg',0)kernel_1 = np.array([[-1,-2,-1],[0,0,0],[1,2,1]])	#Sobel算子kernel_2 = np.array([[-1,0,1],[-2,0,2],[-1,0,1]])res = cv2.filter2D(img,-1,kernel_1)res2 = cv2.filter2D(img,-1,kernel_2)plt.subplot(131),plt.imshow(res,'gray'),plt.title('1')plt.subplot(132),plt.imshow(res2,'gray'),plt.title('2')plt.subplot(133),plt.imshow(res+res2,'gray'),plt.title('1+2')pylab.show()if __name__ == "__main__":main()

实验结果如下,
在这里插入图片描述

(2)基于二阶微分的图像增强—拉普拉斯算子
对图像求二阶微分(近似),

xxx方向上,

yyy方向上,

则二阶微分为
▽2f=[f(x+1,y)+f(x−1,y)+f(x,y+1)+f(x,y−1)]−4f(x,y)▽^2f = [f(x+1,y)+f(x-1,y)+f(x,y+1)+f(x,y-1)]-4f(x,y)2f=[f(x+1,y)+f(x1,y)+f(x,y+1)+f(x,y1)]4f(x,y)
拉普拉斯算子模板为

由于拉普拉斯是一种微分算子,它的应用可增强图像中灰度突变的区域,减弱灰度的缓慢变化区域
我们通常的做法是把原图像和拉普拉斯图像叠加在一起,这样既能保护拉式锐化效果,同时又能复原背景信息,具体的做法是:

当然,上述过程也可一步完成,更改拉普拉斯模板即可,如下(注意,此处模板中心只能为正,在以后的应用中,模板中心最好设为正值),

拉普拉斯算子实现代码如下,

import cv2
import numpy as np 
import matplotlib.pyplot as plt 
import pylabdef main():img = cv2.imread('Lena.jpg',0)kernel = np.array([[0,-1,0],[-1,5,-1],[0,-1,0]])	#拉普拉斯算子res = cv2.filter2D(img,-1,kernel)plt.subplot(121),plt.imshow(img,'gray'),plt.title('1')plt.subplot(122),plt.imshow(res,'gray'),plt.title('2')pylab.show()if __name__ == "__main__":main()

实验结果如下,
在这里插入图片描述

总结一下,我们详细讲解了三种算子,Roberts算子、Sobel算子和拉式算子,前两种属于一阶算子,拉式算子属于二阶算子。通常我们在处理图像时,先会用拉式算子突出图像中的小细节,后用梯度法突出图像的边缘

本节我们所讲属于图像增强技术中的空域滤波技术,即利用各种各样的模板(算子)对图像进行处理,后边我们会讲到基于频域的图像处理技术。

未完待续

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/492572.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

欧洲两个研究团队开发出了让截肢者能感觉到并准确抓住物体的仿生手

来源:IEEE电气电子工程师学会摘要:在过去十年中,研究人员在开发能给用户提供触觉和压力感的触觉传感器方面取得了很大进展。如在你旁边正好有一个咖啡杯,那么拿起这个杯子,并注意下在不真正看着它的情况下做这件事有多…

【转】eclipse中egit插件使用

原文网址:http://my.oschina.net/songxinqiang/blog/192567 eclipse和git这个两个工具的使用人数都是相当多的,在eclipse里面也有egit插件来支持eclipse中使用git,但是网上的相关说明都是简单使用,或者没有说明白一些具体的问题&a…

全球AI芯片投资版图公开!机会都在这五大场景

来源:智东西摘要:过去一年,随着人工智能在各个行业的逐步落地,AI芯片的发展路径逐渐明朗。在行业走过野蛮生长,开始加速落地、加速整合的过程中,也有更多的AI芯片公司也开始走出属于自己的差异化路线。我们…

图像处理与图像识别笔记(六)图像增强3

上一章节中我们讲解了空域滤波的图像增强方法,包括图像的平滑和锐化,本文中,我们首先带来频域滤波的图像增强方法,指在频域中对图像进行变换,需要的基础知识是前述过的图像傅里叶变换,请查看学习。 一、频…

初探数位DP-hdu2089

一开始刷dp就遇到了数位dp,以前程序设计艺术上看过一点,基本没懂,于是趁今天遇到题目,想把它搞会,但就目前状态来看仍然是似懂非懂啊,以后还要反复搞 统计区间[l,r]的满足题意的数的个数,可以转…

自动驾驶的疑点重重, 再次印证了科技的「非理性繁荣」

来源:悟空智能科技特斯拉 CEO 马斯克对全自动驾驶的短期实现,有着近乎疯狂的执念。最近,他又在第四季度财报的电话会议上表示,特斯拉汽车在今年年底前能实现全自动驾驶,无需人类干预。马斯克还表示,特斯拉在…

Truncated SVD for faster dection

Truncated SVD方法最先被提出在《Fast R-CNN》论文中,用于降低全连接层的运算量,提升模型的速度。在卷积神经网络的分类任务中,FC层的运算速度远远大于CONV层,而在Fast R-CNN的目标检测任务中,大多数的运算时间发生在F…

CSS学习-网页导航栏

用ul制作网页导航栏 <!DOCTYPE html> <html><head><style>ul {list-style-type: none;margin: 0;padding: 0;width: 800px;overflow: hidden;}li {float: left;}a {display: block;width: 120px;font-weight: bold;color: #FFFFFF;border-right: 1px s…

自动驾驶技术如何升级?这份技能图谱为你指路

来源&#xff1a;AI前线自动驾驶技术在过去的一年里发展十分迅速&#xff0c;无论控制系统的升级还是高清地图的泛用&#xff0c;无不在推动自动驾驶的落地。再加上开源框架的进一步成熟&#xff0c;V2X 的落地实践&#xff0c;传感器融合更强等多重因素的影响下&#xff0c;自…

Gradient Descent

梯度下降是我们在训练神经网络时用于训练参数的方法&#xff0c;本文总结了目前常用的几种梯度下降算法&#xff0c;包括原理、公式推导、解决的问题&#xff0c;主要要SGD、Momentum、NAG、AdaGrad、AdaDelta、RMSProp、Adam&#xff0c;先贴上手写的笔记&#xff0c;有时间再…

互联网+检验检测智能化成发展趋势

来源&#xff1a;传感器技术摘要&#xff1a;随着工业自动化技术的迅猛发展&#xff0c;智能检测技术被广泛地应用在工业自动化、化工、军事、航天、通讯、医疗、电子等行业&#xff0c;是自动化科学技术的一个格外重要的分支科学。众所周知&#xff0c;智能检测技术是在仪器仪…

5G、物联网和AI结合的究极形态是什么?一文看尽智能连接在5大领域的12个典型案例!...

来源&#xff1a;IoT Analytics编译&#xff1a;物联网智库摘要&#xff1a;智能连接&#xff08;Intelligent connectivity&#xff09;是一种全新的概念——未来&#xff0c;5G、AI和物联网的融合能够成为加速科技发展的催化剂&#xff0c;并催生出新的颠覆式的数字化服务。基…

10天学安卓-第二天

10天学安卓-第二天 原文:10天学安卓-第二天继续我们的学习。 相信我&#xff0c;第一天的工作是最为重要的&#xff0c;通过这些工作&#xff0c;我们把开发安卓所必须的环境、基础条件都配置好了&#xff0c;相信肯定遇到了很多问题&#xff0c;不过&#xff0c;根据我的经验&…

德国费斯托又双叒叕更新,象鼻子机械臂+超逼真仿生手,比人手都强大

来源&#xff1a;机器人大讲堂编辑&#xff1a;海蛟摘要&#xff1a;在机器人领域&#xff0c;小编最佩服两家公司&#xff0c;一家是波士顿动力&#xff0c;另一家就是费斯托。费斯托这家源自德国的公司以平均每年更新2-3款仿生机器人的速度&#xff0c;扩充着它们的仿生机器人…

微软全球执行副总裁沈向洋:你给自己的定位是什么,你就会得到什么

来源&#xff1a;AI 科技评论摘要&#xff1a;沈向洋&#xff0c;美国国家工程院院士、微软全球执行副总裁、ACM/IEEE Fellow。多年来&#xff0c;沈向洋专注于计算机视觉和计算机图形学的研究&#xff0c;并领导和开发了 Bing 搜索。目前&#xff0c;他是微软公司级别最高的中…

用互联网大脑模型分析5G重点影响的6个科技产业

作者&#xff1a;刘锋 计算机博士&#xff0c;《互联网进化论》作者5G是指第五代移动电话行动近信标准&#xff0c;也称第五代移动通信技术&#xff0c;是4G之后的延伸&#xff0c;其峰值理论传输速度可达每秒数十Gb。对比4G的主要提高如下&#xff1a;5G的速度将达到4G的100倍…

Gartner:2019年十大数据与分析技术趋势

来源&#xff1a;网络大数据近日&#xff0c;全球领先的信息技术研究和顾问公司Gartner指出&#xff0c;增强型分析(augmented analytics)、持续型智能(continuous intelligence)与可解释型人工智能(explainable AI)是数据与分析(data and analytics)技术领域内的主要趋势之一&…

Gearman + Nodejs + MySQL UDF异步实现 MySQL 到 Redis 的数据同步

目录 1, 环境2, Redis简介3, Gearman简介4, MySQL - Redis配合使用方案4, 软件安装5, MySQL UDF Trigger同步数据到Gearman6, 参考资料1, 环境 CentOS, MySQL, Redis, Nodejs 2, Redis简介 Redis是一个开源的K-V内存数据库&#xff0c;它的key可以是string/set/hash/list/...&…

5G风起,四大IoT迎风爆发!智能家居与电表高速增长

来源&#xff1a;智东西摘要&#xff1a;深度剖析智能家居、智能城市、车联网、网联无人机四大领域新机遇。2018年&#xff0c;我国物联网&#xff08;IoT&#xff09;连接数从2017年的15.4亿飙升至30.63亿&#xff0c;几近增长了100%&#xff0c;增速喜人。而在这组数据背后&a…

机器学习基石笔记5——为什么机器可以学习(1)

转载请注明出处&#xff1a;http://www.cnblogs.com/ymingjingr/p/4271742.html 目录 机器学习基石笔记1——在何时可以使用机器学习(1) 机器学习基石笔记2——在何时可以使用机器学习(2) 机器学习基石笔记3——在何时可以使用机器学习(3)(修改版) 机器学习基石笔记4——在何时…