计算机视觉——图像预处理及边缘检测

1.为什么要进行图像预处理?

\qquad当对图像进行边缘、轮廓的检测时,图像噪声会对检测产生不利影响,并且为了帮助模型专注于一般细节并获得更高的准确度,我们需要对图像进行预处理。
\qquad预处理的内容有去除噪声,控制像素值得强度,一般的处理技巧有模糊(Blurring)、阈值(thresholding)、形态转换(morphological transformation)等。

2.模糊

\qquad模糊的主要目的是为了降噪,比如当边缘检测算法应用于高分辨率的图像时,会获得很多我们并不感兴趣的内容,这时候我们需要模糊进行降噪。当对图像进行模糊处理时,需要寻找合适的模糊量,模糊量太少,则有太多噪声;模糊量太多,会丢失我们需要的数据。
\qquadOpenCV中常用四种模糊的技术:平均模糊、高斯模糊、中值模糊和双边滤波模糊。
\qquad这四种模糊技术的原理相同:使用滤波器(内核),对图像进行卷积运算。但是各个模糊技术之间使用的滤波器不同,比如平均模糊,首先计算内核区域下的平均值;然后把平均值替换内核区域的中心值。当内核区域变大时,图像会更模糊。
\qquad为了验证kernel区域越大,图像越模糊。我们设定当kernel的大小为5×\times× 5,11×\times× 11 , 15×\times× 15对图像进行卷积运算,然后比较各个图像的模糊程度。

import cv2
import matplotlib.pyplot as plt#读取图像,并将图像矩阵修改为RGB颜色模式
img = cv2.imread('../animal.jpg')
img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)#标题中文显示设置
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False#绘制四张图,依次为原图,内核大小为5*5,11*11,15*15
#原图
plt.subplot(221)
plt.imshow(img)
plt.title("原图")#内核大小为5*5
plt.subplot(222)
img_blurred = cv2.blur(img,ksize=(5,5))
plt.imshow(img_blurred)
plt.title("kernel 5*5")#内核大小为11*11
plt.subplot(223)
img_blurred = cv2.blur(img,ksize=(11,11))
plt.imshow(img_blurred)
plt.title("kernel 11*11")#内核大小为15*15
plt.subplot(224)
img_blurred = cv2.blur(img,ksize=(15,15))
plt.imshow(img_blurred)
plt.title("kernel 15*15")plt.show()

\qquad运行结果:
kernel\qquad高斯模糊,高斯模糊的kernel值是由高斯函数生成,即内核值服从高斯分布。双边滤波模糊,具有去除噪音,同时保持边缘清晰。把四种模糊技术进行对比。

import cv2
import matplotlib.pyplot as plt#读取图像,并将图像矩阵修改为RGB颜色模式
img = cv2.imread('F:/animal.jpg')
img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)#标题中文显示设置
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False#平均模糊
plt.subplot(221)
img_0 = cv2.blur(img, ksize = (7, 7))
plt.imshow(img_0)
plt.title("平均滤波")#高斯模糊
plt.subplot(222)
img_1 = cv2.GaussianBlur(img, ksize = (7, 7), sigmaX = 0)
plt.imshow(img_1)
plt.title("高斯模糊")#中值模糊
plt.subplot(223)
img_2 = cv2.medianBlur(img, 7)
plt.imshow(img_0)
plt.title("中值模糊")#双边滤波模糊
plt.subplot(224)
img_3 = cv2.bilateralFilter(img, 7, sigmaSpace = 75, sigmaColor =75)
plt.imshow(img_0)
plt.title("双边滤波模糊")plt.show()

\qquad运行结果:
在这里插入图片描述

3.阈值

\qquad阈值处理,就是将图像转换为二进制图像。有五种不同的阈值处理方式:二进制,二进制的逆,阈值为零,阈值到零的倒数和阈值截断。比较五种不同的阈值处理。

import cv2
import matplotlib.pyplot as plt#读取图像,并将图像矩阵修改为RGB颜色模式
img = cv2.imread('F:/animal.jpg')
img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)#标题中文显示设置
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = Falseplt.subplot(231)
plt.imshow(img)
plt.title("原图")plt.subplot(232)
_, thresh_0 = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
plt.imshow(thresh_0)
plt.title("二进制")plt.subplot(233)
_, thresh_1 = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY_INV)
plt.imshow(thresh_1)
plt.title("二进制的逆")plt.subplot(234)
_, thresh_2 = cv2.threshold(img, 127, 255, cv2.THRESH_TOZERO)
plt.imshow(thresh_2)
plt.title("阈值为零")plt.subplot(235)
_, thresh_3 = cv2.threshold(img, 127, 255, cv2.THRESH_TOZERO_INV)
plt.imshow(thresh_3)
plt.title("阈值到零的倒数")plt.subplot(236)
_, thresh_4 = cv2.threshold(img, 127, 255, cv2.THRESH_TRUNC)
plt.imshow(thresh_4)
plt.title("阈值截断")plt.show()

\qquad运行结果:
阈值处理

4.形态转换

\qquad形态转换,通过过滤来处理对象。过滤器的形状可以为矩形(rectangle),椭圆形(ellipse),十字形(cross)。形态转换的技术有:侵蚀,膨胀等。下面以侵蚀形态转换为例,比较三种形状过滤器的效果。

import cv2
import matplotlib.pyplot as plt
import numpy as np#读取图像,并将图像矩阵修改为RGB颜色模式
img = cv2.imread('F:/animal.jpg')
img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)#标题中文显示设置
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False#原图
plt.subplot(221)
plt.imshow(img)
plt.title("原图")#矩形
plt.subplot(222)
kernel_0 = np.ones((9, 9))
img1 = cv2.erode(img, kernel_0, iterations = 3)
plt.imshow(img1)
plt.title("矩形")#椭圆
plt.subplot(223)
kernel_1 = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (9, 9))
img2 = cv2.erode(img,kernel_1,iterations=3)
plt.imshow(img2)
plt.title("椭圆")#十字形
plt.subplot(224)
kernel_2 = cv2.getStructuringElement(cv2.MORPH_CROSS, (9, 9))
img3 = cv2.erode(img,kernel_2,iterations=3)
plt.imshow(img3)
plt.title("十字形")plt.show()

\qquad运行结果:
形态转换

5.边缘检测

\qquad使用cv2.Canny()函数进行边缘检测。

import cv2
import matplotlib.pyplot as plt#读取图像
img = cv2.imread('F:/dog.jpg')
img_color = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#标题中文显示设置
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = Falseplt.subplot(221)
plt.imshow(img_color)
plt.title("原图")plt.subplot(222)
canny1 = cv2.Canny(img_gray, 50, 150)
plt.imshow(canny1,cmap='gray')plt.subplot(223)
canny2 = cv2.Canny(img_gray, 100, 200)
plt.imshow(canny2,cmap='gray')plt.subplot(224)
canny3 = cv2.Canny(img_gray, 150, 250)
plt.imshow(canny3,cmap='gray')plt.show()

\qquad运行结果:
边缘检测

参考链接:Basic Operations on Images
\qquad \qquadMorphology
\qquad \qquadDrawing Functions in OpenCV

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

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

相关文章

【操作系统复习】进程的状态与转换

进程的状态与转换一、进程的状态二、进程的转换一、进程的状态 进程是程序的一次执行过程。在这个执行过从中,有时进程正在被CPU处理,有时又需要等待CPU服务,可见 ,进程的状态是会有各种变化。为了方便对各个进程的管理&#xff…

图灵奖得主杨立昆人工智能十问:AI会统治人类吗?

来源:《科学之路》作者:杨立昆 即便是最先进的人工智能系统也存在局限性,它们还不如一只猫聪明。人工智能常常被认为是一项将要颠覆世界的技术,从这一概念诞生至今的65年中,无数电影与小说塑造了各种经典的人工智能角…

【操作系统复习】进程控制

进程控制一、原语1.1 进程控制相关的原语1.1.1 进程的创建1.1.2 进程的终止1.1.3 进程的阻塞和唤醒1.1.4 进程的切换💁 ​进程控制的主要功能是对系统中的所有进程实施有效的管理,它具有创建新进程、撤销已有进程、实现进程状态转换等功能。一、原语 用…

DeepMind 的新强化学习系统是迈向通用 AI 的一步吗?

来源:数据实战派作者:Ben Dickson这篇文章是我们对 AI 研究论文评论的一部分,这是一系列探索人工智能最新发现的文章。对于已经精通围棋、星际争霸 2 和其他游戏的深度强化学习模型来说,人工智能系统的主要挑战之一是它们无法将其…

第十届蓝桥杯 等差数列(Python)

题目: 思路: 1、给数组排序,求出两两之间的差值即公差,如果差值为0,直接返回n,否则进入第二步; 2、给差值数组排序,求出两两之间的最大公因数即公差 代码: def gcd(…

汪卫华院士:无序中找有序 复杂中寻规律

来源:中国科学报原文出处:《中国科学报》 (2021-10-11 第4版 综合)作者:汪卫华(作者系中国科学院院士、松山湖材料实验室主任)冰河时代为什么会周期性重复出现?是否有关于混沌和湍流系统更一般的数学描述&a…

霍金 | 哥德尔和物理学的终结

来源:爱思想转自:人机与认知实验室 作者:史蒂芬霍金 英国剑桥大学著名物理学家,现代最伟大的物理学家之一译者:凌高【感谢陈禹老师:"冯诺依曼说过,没有明确的概念,量得分析是毫…

BUAA_OO_第二单元作业总结

程序设计策略 第一次作业 第一次作业实现的是FAFS式傻瓜调度电梯,由于是第一次接触多线程,难度不是很大。在我的设计里,我借鉴了生产者消费者模式,设计了一个输入线程和一个电梯线程,控制器的设计使用了单例模式&#…

蓝桥杯 回文日期

模拟 n int(input())def check(x):m int(x[:2])d int(x[2:4])x int(x)if 1<m<12:if m 2:if (x%40 and x%100!0) or x%4000:if d<29:return Trueelse:return Falseelse: if d<28:return Trueelse:return Falseif m in [1,3,5,7,8,10,12]:if d<31:return Tr…

因果推断研究获2021诺贝尔经济学奖

来源&#xff1a;集智俱乐部 北京时间2021 年 10 月 11 日 17 时许&#xff0c;2021 年诺贝尔经济学奖&#xff0c;授予了三位经济学家——David Card因为对“对劳动经济学的实证研究贡献”而获得一半奖金&#xff0c;Joshua D. Angrist和Guido W. Imbens因“对因果关系分析的方…

【计算机网络复习】1.1.1 概念、组成、功能和分类

概念、组成、功能和分类二、功能三、组成四、分类计算机网络&#xff1a;是一个将分散的、具有独立功能的计算机系统&#xff0c;通过通信设备与线路连接起来&#xff0c;由功能完善的软件实现资源共享和信息传递的系统。 计算机网络是互连的、自治的计算机集合。 互连 — 互…

因果表征学习最新综述:连接因果科学和机器学习的桥梁

来源&#xff1a;集智俱乐部作者&#xff1a;蔡心宇审校&#xff1a;龚鹤扬、陆超超编辑&#xff1a;邓一雪论文题目&#xff1a;Towards Causal Representation Learning论文地址&#xff1a;https://arxiv.org/abs/2102.11107这篇名为Towards Causal Representation Learning…

这种记忆技术在弯曲时更好?

A new kind of flexible phase change memory is tested while bent around a 4-millimeter-diameter rod. A.I. KHAN AND A. DAUS来源&#xff1a;IEEE电气电子工程师新的相变存储器需要更少的能量&#xff0c;部分原因是它是建立在塑料上的&#xff1f;要想让粘贴式显示器、…

接口与内部类

1.什么是接口(B) 接口是一种引用数据类型&#xff0c;用interface声明&#xff1b;当出现interface便可判断为接口。 形式&#xff1a;【修饰符】 interface 接口名称(public interface Pepar{ }) 接口可声明属性&#xff0c;且属性都默认为static final 1 public interface Pa…

深度学习为何泛化的那么好?秘密或许隐藏在内核机中

来源&#xff1a;AI科技评论编译&#xff1a;杏花编辑 &#xff1a;青暮在机器学习领域&#xff0c;人工神经网络逐年扩大规模&#xff0c;并取得了巨大成功&#xff0c;但同时它也制造了一个概念性难题。当一个名为 AlexNet网络在2012年赢得年度图像识别比赛时&#xff0c;大约…

【计算机网络复习】1.1.4 时延、时延带宽积、RRT和利用率

时延、时延带宽积、RRT和利用率一、时延二、时延带宽积三、往返时延RTT一、时延 传输时延&#xff08;发送时延&#xff09;&#xff1a;数据从结点发送到链路上的时间 传输时延 数据长度/网络带宽&#xff0c;由网络带宽、数据长度决定 传播时延&#xff1a;信号从链路的一端…

华为汪涛:无线网络未来十年十大趋势

来源&#xff1a;通信产业网2021全球移动宽带论坛&#xff08;Global MBB Forum&#xff09;期间&#xff0c;华为常务董事、ICT基础设施业务管理委员会主任汪涛发表了题为“走向智能世界2030&#xff0c;无线网络未来十年十大趋势”的主题演讲。华为常务董事、ICT基础设施业务…

【计算机网络复习】1.2.1 分层结构、协议、接口、服务

分层结构、协议、接口、服务一、 分层结构一、 分层结构 分层的基本原则 1、各层之间相互独立&#xff0c;每层只实现一种相对独立的功能。 2、每层之间界面自然清晰&#xff0c;易于理解&#xff0c;相互交流尽可能少。 3、结构上可分隔开。每层都采用最合适的技术来实现。…

22000字深入研究消费电子光学传感器行业

来源&#xff1a;华创证券、驭势资本研究所消费电子是传感器最重要的应用市场&#xff0c;据研究机构的调研数据显示&#xff0c;占传感器50%左右份额。本文主要基于3D光学传感器产业研究&#xff0c;同时涉及TOF飞行时间传感器、红外传感器等应用于消费电子设备上的光学传感器…