基于OpenCV的数字图像处理 课件 刘艺琴 项目4-7 获取图像边缘信息 -进行图像标注_第1页
基于OpenCV的数字图像处理 课件 刘艺琴 项目4-7 获取图像边缘信息 -进行图像标注_第2页
基于OpenCV的数字图像处理 课件 刘艺琴 项目4-7 获取图像边缘信息 -进行图像标注_第3页
基于OpenCV的数字图像处理 课件 刘艺琴 项目4-7 获取图像边缘信息 -进行图像标注_第4页
基于OpenCV的数字图像处理 课件 刘艺琴 项目4-7 获取图像边缘信息 -进行图像标注_第5页
已阅读5页,还剩340页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

获取图像边缘信息知识目标技能目标熟练掌握图像形态学操作。包括腐蚀、膨胀、开运算、闭运算、顶帽运算、黑帽运算。掌握使用canny边缘检测进行图像的预处理。素质目标l培养学生逻辑思维。形态学操作,如腐蚀、膨胀、开运算和闭运算等,涉及对图像进行特定的数学变换。学生在学习和应用这些操作时,需要理解每种操作的基本原理、作用以及适用场景,助于培养他们的逻辑思维能力。l培养学生应用技术解决社会问题的能力。将形态学操作与实际应用紧密结合,例如利用形态学操作去除噪声、填补空洞等,学生可以锻炼自己的问题解决能力。项目背景

图像的边缘承载着丰富的结构与形态信息,是理解图像内容的关键。形态学操作与Canny边缘检测技术,可以精准地捕捉这些细微而关键的边缘细节。形态学操作,如同图像处理的魔术师,通过腐蚀与膨胀的巧妙组合,实现开运算与闭运算的精妙转换,从而有效去除噪声,填补空洞,增强图像的边缘特征。顶帽运算与黑帽运算则进一步拓展了形态学的应用范围,为我们提供了更为精细的图像处理手段。

形态学的应用领域非常广泛,可以用于医学图像分析(形态学操作常用于增强血管、肿瘤等生物结构的可视化)、卫星图像处理(形态学用于改善卫星图像的质量,如云层的去除,使用开运算可以消除云层中的小洞,而闭运算可以填补云层的断裂)、材料学科中的微观结构分析(如金属的晶粒结构,通过形态学梯度可以突出晶界)、工业产品中的产品表面检测(形态学操作可以识别和测量产品表面的缺陷,如孔洞、裂纹等)、交通监控中车辆检测和计数、生物特征识别(在指纹识别系统中,形态学操作可以用于增强指纹图像,提取指纹的脊线和谷线)等各个方面。任务引入

作为一位机器视觉工程师,您需要设计一项图像处理流程,精准识别墙面上的插座并勾勒其轮廓。借助OpenCV库对相机捕捉的图像进行预处理,包括运用形态学操作以剔除噪声与干扰,应用Canny边缘检测算法,提取插座的边缘信息,为后续的图像分析与识别奠定坚实基础。任务准备

完成该项任务,需要具备以下知识基础:

形态学操作:主要包括膨胀(Dilation)、腐蚀(Erosion)、开运算(Opening)、闭运算(Closing)、形态学梯度(MorphologicalGradient)、顶帽(Top-hat)、黑帽(Black-hat)、击中或丢失变换(Hit-or-missTransform)

canny边缘检测谢谢!腐蚀腐蚀的概念图4.1腐蚀前后的图像对比腐蚀是最基本的形态学操作之一,腐蚀操作是将结构元素的中心放置在每个像素上,并检查结构元素覆盖的区域是否全部为非零像素。如果不是,则将中心像素设置为零。这会使得图像中的物体边界向内收缩。

腐蚀操作能够将图像的边界点消除,使图像沿着边界向内收缩,也可以将小于指定结构体元素的部分去除。图4.1(a)是腐蚀前的图像,4.1(b)是腐蚀后的图。(a)原始图像

(b)腐蚀后的图像腐蚀的原理图4.3腐蚀原理腐蚀操作中通常使用一个结构元素来逐个扫描被腐蚀的图像,并根据结构元素和被腐蚀的图像关系来确定腐蚀结果。如图4.2所示,图像左上角的深色小方块是遍历图像所使用的结构元素(结构元素也称为核),在腐蚀过程中,要将该结构元逐个像素地遍历整幅图像,并根据结构元与被腐蚀图像的关系来确定腐蚀结果图像中对应结构元中心点位置的像素点的值。规则如下:如果结构元完全处于前景图像中,如4.3(a)图,将结构元中心点所对应的腐蚀结果图像的像素点处理为前景色,即白色。如果结构元没有完全处于前景图像中,如4.3(b)图,将结构元中心点对应的腐蚀结果图像中的像素点处理为背景色,即黑色。(a)结构元完全在前景中

(b)结构元未完全在前景中图4.2结构元腐蚀图像过程腐蚀的原理假如图像image的像素矩阵如图4.4,其中1表示白色前景,0表示黑色背景。有一个结构元k,值如图4.5:0000001110011100111000000图4.4图像img的像素矩阵

111图4.5结构元k腐蚀的过程图4.6图像腐蚀过程腐蚀的结果图4.7腐蚀结果0000000000011100000000000腐蚀函数在opencv中,使用函数cv2.erode()实现腐蚀操作,其语法结构如下:dst=cv2.erode(src,kernel,iterations=None,borderType=None,borderValue=None)

src:输入图像

kernel:定义了腐蚀操作的结构,通常是一个矩形、圆形或者自定义的结构

iterations:可选参数,定义了腐蚀操作的次数,如果未指定,默认为1

borderType:可选参数,定义了边界类型,如果未指定,默认为cv2.BORDER_CONSTANT,取值如表1.1所示。

borderValue:可选参数,定义了边界的颜色,如果边界类型为cv2.BORDER_CONSTANT,则需要指定该值

dst:返回值,腐蚀后的图像腐蚀函数类型说明BORDER_CONSTANT使用常数扩展,‌即用指定的边界值填充边界。‌BORDER_REFLECT‌使用镜像反射的方式扩展边界BORDER_TRANSPARENT‌透明边界,‌即不扩展边界,‌允许边界外的像素保持不变BORDER_DEFAULT‌根据图像的数据类型自动选择合适的边界类型BORDER_ISOLATED‌‌将图像的每个通道视为独立的图像进行处理,‌适用于多通道图像BORDER_WRAP‌‌使用周期性扩展的方式处理边界表4.1borderType取值腐蚀案例-使用像素矩阵演示腐蚀过程importcv2importnumpyasnpimg=np.zeros((5,5),np.uint8)img[1:4,1:4]=1k=np.ones((3,1),np.uint8)erosion=cv2.erode(img,k)print("img=\n",img)print("kernel=\n",k)print("erosion=\n",erosion)【例4.1erode_pixel.py】使用像素演示腐蚀过程。img=[[00000][01110][01110][01110][00000]]k=[[1][1][1]]erosion=[[00000][00000][01110][00000][00000]]结果可见,腐蚀后前景由9个像素点变为3个像素点,前景变小。腐蚀案例-对图片进行腐蚀importcv2importnumpyasnpimg=cv2.imread("image\\erode.jpg",cv2.IMREAD_UNCHANGED)k1=np.ones((5,5),np.uint8)k2=np.ones((12,12),np.uint8)erosion1=cv2.erode(img,k1)erosion2=cv2.erode(img,k2)cv2.imshow("img",img)cv2.imshow("erosion1",erosion1)cv2.imshow("erosion2",erosion2)cv2.waitKey()cv2.destroyAllWindows()【例4.2erode_img.py】使用大小不同的核对图像进行腐蚀,查看腐蚀后的结果。输出结果结果解析图4.8(a)为原图,原图中有白色的噪声点,图4.8(b)是使用5*5的核腐蚀后的结果,此时并未完全腐蚀掉噪声点,图4.8(c)是使用12*2的核腐蚀后的结果,将噪声点完全腐蚀掉,同时前景变小,可见核越大腐蚀的程度越严重,腐蚀后图像的整体轮廓越小。输出结果

(a)

(b)(c)谢谢!膨胀膨胀的概念图4.9二值图像膨胀效果

膨胀是形态学的基本操作之一,与腐蚀过程相反,膨胀操作是通过将结构元素的中心放置在图像的每个像素上,并检查结构元素覆盖的区域像素值是否全部为零,如果是,则将中心点像素设置为0,如果不是,则将中心像素设置为最大值(通常是255)。这会使得图像中的物体边界向外扩展,膨胀操作能够增加图像或数据矩阵中对象的尺寸,如图4.9所示,(a)图为原图,(b)图为膨胀后的图像。(a)原始图像

(b)膨胀后图像膨胀的原理图4.10膨胀原理

图像的膨胀过程是结构元依次遍历整个图像,与腐蚀操作的遍历过程完全相同,膨胀过程中根据结构元与前景的关系不同,做如下操作:

如果结构元中任意一点处于前景图中,如图4.10(a),将膨胀结果图像中对应像素点处理为前景色;

如果结构元完全处于背景色中,如图4.10(b),将结构元对应图像

的像素处理为背景色。(a)结构元中有像素处于前景中

(b)结构元完全处于背景中图4.10膨胀的结果就是白色的前景直径变大。膨胀的原理假如有图像image像素矩阵如图4.11,其中1表示白色前景,0表示黑色背景。有一个结构元k,值如图4.12:0000000000011100000000000图4.11图像image的像素矩阵

111图4.12结构元k图4.13膨胀结果0000001110011100111000000膨胀函数

在opencv中,使用函数cv2.dilate()实现膨胀操作,其语法结构如下:dst=cv2.dilate(src,kernel[,dst[,anchor[,iterations[,borderType[,borderValue]]]]])

src‌:输入图像(必需参数)。类型:单通道灰度图或二值图像

kernel:结构元素(必需参数),通常是一个矩形、圆形或者自定义的结构

dst‌:输出图像(可选参数)anchor‌:结构元素的锚点位置(可选参数)。类型:元组(x,y),默认值为(-1,-1),表示锚点在结构元素的中心。

‌iterations‌:膨胀操作的迭代次数(可选参数)。默认值为1。数值越大,膨胀效果越明显。

‌borderType‌:图像边界处理方式(可选参数)。默认值为cv2.BORDER_CONSTANT,表示用常量值填充边界。

‌borderValue‌:边界填充的常量值(可选参数)。默认值为0(黑色),仅在borderType=cv2.BORDER_CONSTANT时生效。膨胀案例-使用像素矩阵演示膨胀效果importcv2importnumpyasnpimg=np.zeros((5,5),np.uint8)img[2:3,1:4]=1k=np.ones((3,1),np.uint8)dilation=cv2.dilate(img,k)print("img=\n",img)print("k=\n",k)print("dilation\n",dilation)【例4.3dilate_pixel.py】使用像素演示膨胀过程。img=[[00000][00000][01110][00000][00000]]k=[[1][1][1]]dilation=[[00000][01110][01110][01110][00000]]结果解析:膨胀后前景由3个像素点变为9个像素点。膨胀案例-对图像进行膨胀操作importcv2importnumpyasnpimg=cv2.imread("image//dilation.jpg",cv2.IMREAD_UNCHANGED)k1=np.ones((7,7),np.uint8)k2=np.ones((15,15),np.uint8)dilation1=cv2.dilate(img,k1)dilation2=cv2.dilate(img,k2)cv2.imshow("original",img)cv2.imshow("dilation1",dilation1)cv2.imshow("dilation2",dilation2)cv2.waitKey()cv2.destroyAllWindows()【例4.4dilate_image.py】使用大小不同的核对图像dilation.jpg进行膨胀,查看膨胀后的结果。膨胀案例-对图像进行膨胀操作结果解析

图4.14(a)为原始图像,图4.14(b)是结构元大小为7*7的膨胀结果,此时并未完全消除噪声点,图4.14(c)是结构元大小为12*12的膨胀结果,此时所有孔洞均被消除,同时前景轮廓变大。可见,结构元越大,膨胀效果越明显。例4.4输出结果

(a)

(b)(c)谢谢!通用形态学函数通用形态学函数

通用形态学操作主要包括腐蚀‌、‌膨胀‌、‌开运算‌、‌闭运算‌、‌形态学梯度‌、‌礼帽运算(‌Top-Hat)‌和黑帽运算‌等,通过将腐蚀和膨胀操作进行组合,可以实现多种形态学操作。OpenCV提供了通用形态学操作函数cv2.morphologyEx()实现上述的形态学运算,语法结构如下:dst=cv2.morphologyEx(src,op,kernel[,dst[,anchor]])

src:源图像,必须是单通道的灰度图像。

op:形态学操作的类型,如表1.2所示,op可以有多种选项,如表4.2所示。

kernel:形态学操作的核,通常是一个矩形、椭圆或十字形的小矩阵。核的大小可以是正奇数。

dst(可选):输出图像,如果未指定,则函数会创建一个新的输出图像。

anchor(可选):核的锚点,默认是核的中心。参数op的取值op的取值说明含义cv2.MORPH_ERODE腐蚀操作腐蚀cv2.MORPH_DILATE膨胀操作膨胀cv2.MORPH_OPEN开运算先腐蚀后膨胀cv2.MORPH_CLOSE闭运算先膨胀后腐蚀cv2.MORPH_GRADIENT形态学梯度膨胀图像减去腐蚀图像cv2.MORPH_TOPHAT顶帽运算原始图像减去膨胀图像cv2.MORPH_BLACKHAT黑帽运算闭运算所得图像减去原始图像cv2.MORPH_HITMISS击中击不中前景背景图像腐蚀运算的交集,仅支持CV_8UC1二进制图像表4.2op类型通用形态学函数实现

通过将函数dst=cv2.morphologyEx(src,op,kernel[,dst[,anchor]])中的参数op设置为不同值,可以实现不同类型的形态学操作。谢谢!开运算开运算概念

开运算‌是先进行腐蚀操作再进行膨胀操作的过程,‌有助于消除小物体、‌平滑物体轮廓、断开细长连接,不改变物体的基本形状和大小。通过将函数cv2.morphologyEx()的参数op设置为cv2.MORPH_OPEN实现。

图4.15中(a)是原始图像,4.15(b)是腐蚀后的图像,4.15(c)是对4.15(b)进行膨胀后的图像。由图可见,开运算先通过腐蚀操作去掉噪声点,再通过膨胀操作将图像膨胀为和原来轮廓大小相等的图像。图4.15图像开运算示意图(a)原始图像

(b)腐蚀后的图像(c)对(b)进行膨胀后的图像开运算案例importcv2importnumpyasnpimg=cv2.imread("image//erode.jpg")k=np.ones((10,10),np.uint8)r=cv2.morphologyEx(img,cv2.MORPH_OPEN,k)cv2.imshow("img",img)cv2.imshow("result1",r)cv2.waitKey()cv2.destroyAllWindows()【例4.5open.py】使用开运算对图像erode.jpg进行去噪。开运算案例

结果解析图4.16(a)是原图,图4.16(b)是经过开运算后的结果,结果可见,开运算可以实现去噪功能,并且不改变图像轮廓大小。图4.16例4.5输出结果

(a)

(b)

动动手

同学们可以尝试对图像openning.bmp进行开运算操作,查看输出效果,并分析原因,同时可以修改核的大小,查看不同的核大小对开运算结果有什么影响?‌谢谢!闭运算闭运算概念

闭运算是先进行膨胀,然后进行腐蚀。闭运算有助于填充小的孔洞和缝隙、连接临近对象、去除小对象等功能,同时保持物体的大致形状。通过将函数cv2.morphologyEx()的参数op设置为cv2.MORPH_CLOSE实现。

图4.17(a)是原始图像,4.17(b)是膨胀后的图像,4.17(c)是对(b)进行腐蚀后的图像。由图可以看出,闭运算先通过膨胀操作封闭孔洞,然后通过腐蚀操作将图像收缩到与原图轮廓大小相同,具有封闭孔洞的功能。图4.17图像闭运算示意图(a)原始图像

(b)膨胀后的图像(c)对(b)进行腐蚀后的图像闭运算案例importcv2importnumpyasnpimg=cv2.imread("image//close.bmp")k=np.ones((5,5),np.uint8)r1=cv2.morphologyEx(img,cv2.MORPH_CLOSE,k)#未设置迭代次数,默认为1r2=cv2.morphologyEx(img,cv2.MORPH_CLOSE,k,iterations=3)#增加迭代次数cv2.imshow("img1",img)cv2.imshow("result1",r1)cv2.imshow("result2",r2)cv2.waitKey()cv2.destroyAllWindows()【例4.6close.py】使用闭运算实现填充小孔洞。闭运算案例结果解析

图4.18(a)是原始图像,图4.18(b)是第一次进行闭运算的结果,小的孔洞被填充,但是大的孔洞并未被填充,图4.18(c)是第二次进行闭运算的结果,第二次闭运算设置iterations=3,表示迭代了3次,大的孔洞也被填充。图4.18例4.6输出结果

(a)

(b)

(c)

动动手同学们可以将结构元减小或者增大,然后查看运行结果。对图像close2.bmp进行闭运算,如果两个图像无法连接,思考如何操作能够将其连接?谢谢!形态学梯度运算形态学梯度运算的概念

形态学梯度运算是膨胀操作和腐蚀操作结果的差值,可以用来突出显示物体的边缘。可以用来进行边缘检测、特征提取、图像分割等。

图4.19(a)为原始图像,4.19(b)为膨胀操作结果,4.19(c)为腐蚀操作结果,4.19(d)为膨胀操作减去腐蚀操作的结果。由图可以看出,膨胀后图像轮廓增大,

腐蚀后图像轮廓减小,将膨胀的图像减去腐蚀的图像后,背景像素值均为0,相减后仍然是0,保持黑色,膨胀图像与腐蚀图像重叠的白色部分相减像素值也变为0,变为黑色,膨胀图像剩余的白色部分保持不变,因此最后得到的图像是保留边缘信息。图4.19形态学运算示例图(a)原始图像(b)膨胀后的图像(c)腐蚀后的图像(d)(b)减去(c)形态学梯度运算案例importcv2importnumpyasnpimg=cv2.imread("image//gradient.jpg",cv2.IMREAD_UNCHANGED)k1=np.ones((5,5),np.uint8)k2=np.ones((10,10),np.uint8)r1=cv2.morphologyEx(img,cv2.MORPH_GRADIENT,k1)r2=cv2.morphologyEx(img,cv2.MORPH_GRADIENT,k2)cv2.imshow("original",img)cv2.imshow("result1",r1)cv2.imshow("result2",r2)cv2.waitKey()cv2.destroyAllWindows()【例4.7gradient.py】使用形态学梯度运算获取图像边缘信息。形态学梯度运算案例结果解析

图4.20(a)是原始图像,图4.20(b)是使用大小为5*5的结构元进行梯度运算的结果,图4.20(c)是使用大小为10*10的结构元进行梯度运算的结果,可见,结构元越大,保留的边缘越粗。图4.20例4.7输出结果

(a)

(b)

(c)

动动手同学们可以对图像gray_fish.jpg进行梯度运算,通过设置不同大小的结构元来比较处理结果。思考:形态学操作是针对灰度或者二值图像进行操作,如果要对彩色图像fish.jpg进行梯度运算,应该如何操作?谢谢!顶帽运算顶帽运算的概念

顶帽运算也叫礼帽运算,是用原始图像减去开运算结果,可用于突出显示图像中的小物体或细节,进行细节增强、小物体检测等。

图4.21(a)为原始图像,4.21(b)为开运算的结果,4.21(c)为原始图像减去开运算的结果。由图可见,开运算去除了原始图像的噪声点,再用原始图像减去开运算后,背景部分像素值仍然是0,保持不变,原图中白色部分减去开运算中白色部分后,白色重叠的位置像素值也变为0,而毛刺部分的像素点保持不变,因此结果只保留了噪声点。图4.21顶帽运算示意图(a)原始图像(b)开运算的结果(c)原图减去开运算顶帽运算案例importcv2importnumpyasnpimg=cv2.imread("image\\erode.jpg")k=np.ones((15,15),np.uint8)result=cv2.morphologyEx(img,cv2.MORPH_TOPHAT,k)cv2.imshow("img",img)cv2.imshow("result",result)cv2.waitKey()cv2.destroyAllWindows()【例4.8tophat.py】使用顶帽运算获取图像噪声信息。1.7顶帽运算结果解析

图4.22(a)是原图,图4.22(b)是顶帽运算的结果,可见,顶帽运算保留了图像的噪声信息。同学们可以调整结构元的大小,比较输出结果有何不同。例4.8输出结果

(a)

(b)

谢谢!黑帽运算黑帽运算的概念

黑帽运算是闭运算结果与原始图像的差,可以用来突出显示比周围区域暗的区域。

图4.23(a)为原始图像,4.23(b)为闭运算的结果,4.23(c)为闭运算图像减去原图的结果。由图可见,闭运算封闭了图像中的孔洞,再用闭运算图像减去原始图像后,背景部分像素值相减仍然是0,保持不变,孔洞部分相减后变为白色,因此结果只保留了孔洞信息。图4.23黑帽运算示意图(a)原始图像(b)闭运算的结果(c)闭运算的图像减去原黑帽运算案例importcv2importnumpyasnpimg=cv2.imread("image\\dilation.jpg")k=np.ones((8,8),np.uint8)result=cv2.morphologyEx(img,cv2.MORPH_BLACKHAT,k)cv2.imshow("img",img)cv2.imshow("result",result)cv2.waitKey()cv2.destroyAllWindows()【例4.9blackhat.py】使用黑帽运算获取图像噪声信息。黑帽运算案例结果解析

图4.24(a)是原图,4.24(b)是黑帽运算的结果,可见,黑帽运算获得了图像的孔洞信息,同学们可以调整结构元大小,查看输出结果有何不同,并思考原因。图4.22例4.8输出结果

(a)

(b)

谢谢!核函数核函数

在上面所进行的形态学操作中,结构元均是自定义生成,OpenCV提供了cv2.getStructuringElement()函数用于构造并返回一个用于形态学处理所使用的结构元素。函数的语法结构为:‌cv2.getStructuringElement(shape,ksize[,anchor])。‌

shape

参数用于指定要创建的结构元素的形状,‌可以是以下几种之一:‌

cv2.MORPH_RECT表示矩形形状。‌

cv2.MORPH_ELLIPSE

表示椭圆形形状。‌

cv2.MORPH_CROSS

表示十字形形状。‌

ksize

参数用于指定结构元素的大小,‌必须是一个奇数,‌如3、‌5、‌7等,‌表示结构元素的宽度和高度。

anchor参数用于指定形态学操作的锚点位置,‌默认为(-1,-1),‌表示位于结构元素的中心。核函数案例-定义不同的核函数importcv2k1=cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))k2=cv2.getStructuringElement(cv2.MORPH_CROSS,(5,5))k3=cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(11,11))print("k1=\n",k1)#输出结构元Kernel1print("k2=\n",k2)#输出结构元Kernel2print("k3=\n",k3)#输出结构元Kernel3【例4.10struct_element.py】使用cv2.getStructuringElement()函数定义不同的结构元。输出结果:1.9核函数结果解析k1的参数为cv2.MORPH_RECT,因此结果是用元素1组成了一个长方形,k2的参数是cv2.MORPH_CROSS,因此结果是用1组成了一个十字形,k3的参数是cv2.MORPH_ELLIPSE,结果是用1组成了一个椭圆形。k1=[[11111][11111][11111][11111][11111]]k2=[[00100][00100][11111][00100][00100]]k3=[[00000100000][00111111100][01111111110][11111111111][11111111111][11111111111][11111111111][11111111111][01111111110][00111111100][00000100000]]核函数案例-使用不同结构元进行膨胀操作importcv2img=cv2.imread("image//rectangle.jpg",cv2.IMREAD_UNCHANGED)k1=cv2.getStructuringElement(cv2.MORPH_RECT,(50,50))k2=cv2.getStructuringElement(cv2.MORPH_CROSS,(50,50))k3=cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(50,50))dst1=cv2.dilate(img,k1)#使用k1对图像进行腐蚀

dst2=cv2.dilate(img,k2)#使用k2对图像进行腐蚀

dst3=cv2.dilate(img,k3)#使用k3对图像进行腐蚀

cv2.imshow("orriginal",img)cv2.imshow("dst1",dst1)cv2.imshow("dst2",dst2)cv2.imshow("dst3",dst3)cv2.waitKey()cv2.destroyAllWindows()【例4.11kernel_dilate.py】使用不同的结构元进行膨胀操作,查看膨胀效果。结果解析

图4.25(a)是原图,图4.25(b)是使用矩形结构元膨胀的结果,图4.25(c)是使用十字形结构元膨胀的结果结果可见,图4.25(d)是使用椭圆形结构元膨胀的结果。可见,结构元为矩形,膨胀后的图像形状也是矩形,结构元为十字形,膨胀后的图像是十字形,结构元为椭圆,膨胀后的图像也是椭圆。核函数案例-使用不同结构元进行膨胀操作(a)

(b)

(c)

(d)

例4.11输出结果谢谢!canny边缘检测canny边缘检测介绍

Canny边缘检测是一种经典的边缘检测算法,‌由JohnF.Canny在1986年提出,‌被广泛应用于计算机视觉和图像处理领域。‌它是一种多阶段的边缘检测算法,‌旨在有效地检测图像中的边缘并抑制噪声。‌Canny边缘检测算法的主要步骤包括噪声抑制、‌计算梯度幅值和方向、‌非极大值抑制、‌双阈值处理和边缘连接。‌这些步骤共同作用,‌可以得到清晰准确的边缘信息,‌并且对噪声具有一定的鲁棒性。canny边缘检测过程0102030405噪声抑制canny边缘检测一般包括以下几个步骤:非极大值抑制边缘链接梯度计算双阈值处理canny边缘检测过程Canny边缘检测算法通过计算图像的梯度来确定边缘的位置。‌然而,图像中往往存在噪声,‌这些噪声也会对梯度的计算产生影响,‌从而导致检测到的边缘不准确。‌为了解决这个问题,‌Canny边缘检测算法在处理图像之前会先进行滤波处理,‌主要是通过应用高斯滤波或均值滤波等方法来平滑图像,‌减少图像中的随机噪声。‌这样做可以有效地降低噪声对边缘检测结果的干扰,‌提高边缘检测的准确性和可靠性。‌

高斯滤波是一种常用的滤波方法,‌它通过生成一个滤波器对图像进行滤波操作。‌这个过程可以平滑图像,‌减少噪声,‌同时保持边缘的清晰度,为后续的边缘检测步骤提供一个较好的基础。(1)噪声抑制

canny边缘检测过程(1)噪声抑制

图4.26为高斯滤波的一次卷积,计算像素点20的高斯滤波后的值,公式为:(99*1+104*2+92*1+107*2+20*8+112*2+99*1+100*2+102*1)/(1+2+1+2+8+2+1+2+1)=70图4.26高斯滤波过程

通过滤波器对周围像素点进行加权平均,获得最终滤波结果,一般越靠近中心位置的点,权重越大,滤波器不是固定的,可以调整大小和权重。但是要注意,滤波器的核越大,对噪声的敏感度越底,一般用5×5的核就能够满足大多数需求。canny边缘检测过程Canny边缘检测算法通过计算图像中像素点的梯度幅值和方向来检测边缘。

梯度幅值(‌GradientMagnitude)‌:‌表示边缘强度,‌即边缘的粗细或明显程度。‌在Canny边缘检测中,‌梯度幅值是通过计算图像中每个像素点在x和y方向上的梯度得到的。‌这些梯度值是通过应用Sobel等算子计算得出的,‌这些算子能够捕捉到图像中水平、‌垂直以及对角线方向的边缘变化。‌

梯度方向(‌GradientDirection)‌:‌表示边缘的方向,‌即边缘是如何在图像中延伸的。‌Canny算法使用arctan函数来计算每个像素点的梯度方向,‌这个方向信息对于后续的非极大值抑制步骤非常重要,‌因为它可以帮助确定哪些边缘是真实的,‌哪些可能是噪声或不必要的。通常取值为水平(左、右)、垂直(上、下)、对角线(右上、左上、左下、右下)8个不同的方向。(2)计算梯度幅值和方向图4.27梯度示例5↑7↓9↑3↑6↑8↑3↑5↓7↑9↑5→7↑6↑2↗5↑8←1↑5↑2↑4↑6↑7↑2↑7←canny边缘检测过程

在获得梯度幅度和方向后,‌遍历图像中的每个像素点,‌判断当前像素点是否是周围像素点中具有相同梯度方向的最大值。‌如果是,‌则保留该点作为边缘上的点;‌否则,‌认为该点为非边缘点并抑制。‌这一步骤通过细化边缘,‌确保边缘的连续性和准确性。处理过程为:

如果该点是正/负梯度方向上的局部最大值,则保留该点。

如果不是,则抑制该点,将该点值归零。(3)‌非极大值抑制canny边缘检测过程图4.28非极大值抑制图示

图4.28为非极大值抑制示例,图4.28(a)中梯度方向为x轴方向,图中可见,A点和C的在X方向的梯度为0,而B点的左右像素值差不为0,因此B点在X方向的梯度值最大,保留该点。图4.28(b)的梯度方向为y轴方向,由图可见,A和C两点在y轴方向的梯度值也是0,B点在y方向的梯度值不为0,因此保留B点,其余的点A和C均被抑制,即归零。

针对图4.28的梯度示例,根据上述规则进行抑制后,仅保留深色背景部分的值,其余像素点均抑制,如图4.29所示。图4.29非极大值抑制示例(a)

(b)canny边缘检测过程

为了区分图像中的像素点是否是边缘,‌将梯度幅值图像中的像素点分为强边缘、‌弱边缘和非边缘三类。强边缘为真正的边缘,非边缘点进行抑制,虚边缘需要根据情况进一步处理。为了确定哪些边缘是真正的边缘,需要设定两个阈值minVal和maxVal。处理规则如下:

当像素点梯度高于maxVal时,认为该点是强边缘,保留该点。

当像素点的梯度幅值小于低阈值,认为该点是非边缘,抑制该点。

当像素点的梯度幅值处于高阈值和低阈值之间。则认为该点是虚边缘,如果虚边缘与强边缘有连接,则认为是边缘,否则进行抑制,认为不是边缘。‌‌最后,‌通过连接强边缘像素点和与之相邻的弱边缘像素点,‌得到完整的边缘图像。

图4.30是双阈值处理的示意图,A像素值大于maxVal,因此确定为强边缘,保留;D像素值小于minVal,是非边缘,抑制;B和C两点的值位于maxVal和minVal之间,为虚边缘,需做进一步处理,B与强边缘A有连接,因此保留,C与强边缘没有连接,因此抑制。‌(4)双阈值处理图4.30双阈值处理示意图谢谢!canny边缘测的实现canny边缘测函数opencv提供了函数cv2.Canny()实现Canny边缘检测,语法格式如下;edges=cv2.Canny(image,threshold1,threshold2[[,apertureSize[,L2gradient]]])

image是输入图像,‌通常是灰度图像。‌

threshold1和threshold2

是两个阈值参数,‌用于边缘检测。‌threshold1通常设置为较低的值,‌而threshold2设置为较高的值。‌这两个阈值用于判断像素点的梯度强度是否属于边缘。‌

edges

是输出边缘图像,‌与输入图像大小和类型相同。‌

apertureSize是Sobel算子的大小,‌必须是奇数,‌如3、‌5、‌7等,‌默认值为3。‌这个参数影响Sobel算子对图像的处理程度,‌从而影响边缘检测的效果。‌

L2gradient

是一个布尔值,‌默认为False,表示使用L1范数(直接将两个方向导数的绝对值相加),如果设置为True,‌表示使用更精确的L2范数来计算图像梯度幅值。canny边缘测的案例importcv2img=cv2.imread("image//peony2.jpg",cv2.IMREAD_GRAYSCALE)r1=cv2.Canny(img,128,200)r2=cv2.Canny(img,32,128)cv2.imshow("original",img)cv2.imshow("result1",r1)cv2.imshow("result2",r2)cv2.waitKey()cv2.destroyAllWindows()【例4.12Canny.py】使用不同的阈值函数cv2.Canny()获取peony.jpg的图像边缘。canny边缘测的实现结果解析

图4.31(a)是原始图像,图4.31(b)是将阈值设置为(128,200)时获取的边缘信息,图4.31(c)是将阈值设置为(32,128)时的边缘信息,可见,阈值越低,保留的边缘信息越多,同学们可以调整阈值比较输出结果。例4.12输出结果

(a)

(b)

(c)

动动手

修改例4.12中的阈值,观察输出结果,思考阈值大小对保留细节多少的影响,阈值越大保留的细节越多还是阈值越小保留的细节越多?谢谢!任务实施任务实施

某机器视觉工程师,需要设计一个图像处理流程,识别墙体上的插座并获取轮廓,该流程首先使用OpenCV库对相机捕获的图像进行预处理,包括形态学操作以去除噪声和干扰,然后应用Canny边缘检测算法提取标志的边缘,以便于后续的图像分析和识别。分析步骤(1)读取相机捕获的产品图像,图片保存在image/switch.jpg。(2)将图像转换为灰度图,并进行适当的滤波处理以减少噪声。(3)应用形态学操作(腐蚀和膨胀)以去除图像中的小噪声点和不必要的细节。(4)使用Canny边缘检测算法提取产品标志的边缘。(5)显示并保存处理后的图像,特别是边缘检测结果,以便于后续分析。项目代码importcv2importnumpyasnp#步骤1:读取产品图像

product_image=cv2.imread('image//switch.jpg')#替换为你的产品图像路径ifproduct_imageisNone:print("Error:图像无法加载。")exit()#步骤2:转换为灰度图product_image=cv2.resize(product_image,(252,252))gray_image=cv2.cvtColor(product_image,cv2.COLOR_BGR2GRAY)#步骤3:滤波处理(这里使用高斯滤波)blurred_image=cv2.GaussianBlur(gray_image,(5,5),0)#步骤4:形态学操作

kernel=np.ones((3,3),np.uint8)#先腐蚀后膨胀(开运算)以去除小噪声

opened_image=cv2.morphologyEx(blurred_image,cv2.MORPH_OPEN,kernel)【项目四】任务实施。2.项目代码#可选:如果图像中有较大的孔洞需要填充,可以使用闭运算

closed_image=cv2.morphologyEx(opened_image,cv2.MORPH_CLOSE,kernel)#步骤5:Canny边缘检测canny_edges=cv2.Canny(opened_image,50,150)cv2.imshow('OriginalProductImage',product_image)#显示原始图像

cv2.imshow('ProcessedImage',opened_image)#显示处理后的图像cv2.imshow('CannyEdgesofProductLabel',canny_edges)#显示边缘检测结果cv2.imwrite('image//canny_edges.jpg',canny_edges)#保存边缘检测结果

cv2.waitKey()cv2.destroyAllWindows()运行结果结果解析例4.8输出结果

(a)

(b)

(C)

谢谢!任务拓展1.图像分割‌图像分割‌是将图像分成若干个特定的、具有独特性质的区域,并提出感兴趣目标的技术和过程。它是计算机视觉领域中的一项重要基础技术,是图像理解中的重要一环。图像分割的主要目的是将图像中的像素分类,使得同一类别的像素属于同一个区域,不同类别的像素属于不同的区域,从而实现图像中特定目标的提取和分析。这个过程不仅涉及到图像处理,还是从图像处理到图像分析的关键步骤。1.1图像分割的方法

图像分割的方法多种多样,主要包括基于阈值的分割方法、基于区域的分割方法、基于边缘的分割方法以及基于特定理论的分割方法等。从数学角度来看,图像分割是将数字图像划分成互不相交的区域的过程,也是一个标记过程,即把属于同一区域的像素赋予相同的编号。1.1图像分割的方法‌通过检测图像中的边缘,将边缘附近的像素划分为不同的区域。边缘检测技术通常可以按照处理的技术分为串行边缘检测和并行边缘检测,利用相邻区域的像素值不连续的性质,采用一阶或二阶导数来检测边缘点。这种方法适用于目标与背景及不同目标之间的边缘明显的情况。‌基于边缘的分割方法‌是通过设置一个或多个阈值,将图像中的像素分为前景和背景。这种方法适用于目标和背景占据不同灰度级范围的图像,可以通过选择图像灰度直方图中灰度分布的谷底作为阈值,对图像进行分割。阈值分割法可以分为全局阈值分割法和局部阈值分割法,前者基于整幅图像的像素统计信息,后者则基于邻域内像素的统计信息为每个像素计算阈值。‌基于阈值的分割方法‌从一个或多个种子点开始,逐步扩展生长,将具有相似特征的像素归为同一区域。这种方法通过区域生长算法实现,从种子点开始,根据设定的相似性准则将相邻像素合并到相同的区域中,直到没有可以合并的像素为止。‌基于区域的分割方法‌则涉及更复杂的理论和技术,如基于深度学习的方法,这些方法利用神经网络等机器学习技术来学习和识别图像中的特征,从而实现更精确的图像分割。‌基于特定理论的分割方法这些方法各有特点,适用于不同类型和复杂度的图像分割任务。选择合适的方法取决于具体的应用场景和图像特性‌。1.2图像分割的类型图像分割的类型主要包括语义分割和实例分割。在语义分割中,同一类型的所有对象都使用一个类标签进行标记;而在实例分割中,相似的对象使用各自独立的标签进行标记。这两种类型的分割在应用中有不同的需求,语义分割关注的是对图像中每个像素进行分类,而实例分割则进一步区分属于相同类别的不同实例。图像分割的应用领域非常广泛,包括自动驾驶、医疗影像诊断、图像美化、三维重建等。例如,在自动驾驶中,汽车需要安装必要的感知系统以了解它们的环境,这样自动驾驶汽车才能够安全地驶入现有的道路;在医疗影像诊断中,机器在分析能力上比放射科医生更强,可以大大减少诊断所需时间。这两种类型的分割在计算机视觉任务中扮演着至关重要的角色,为后续的目标识别、场景理解等高级视觉任务提供了基础‌。2.目标检测

目标检测‌是计算机视觉领域中的一项重要任务,它从给定的图像或视频中检测出目标物体,并确定其位置和大小,同时进行分类或识别。目标检测不仅要求识别出图像中的目标物体,还需要准确地定位它们在图像中的位置,这比单纯的图像分类任务难度更高,精度要求也更高。目标检测的主要目的是从图像中提取有用的信息,为后续的图像处理和分析提供可靠的依据。它广泛应用于多个领域,如安全监控、智能交通、医学影像等,提高了相关领域的准确性和效率。2.目标检测目标检测任务可以细分为以下四个子任务将图像中的每个像素分配给一个特定的类别或对象,可以是实例分割,也可以是语义分割。‌分割(Segmentation)‌:同时进行分类和定位,精确地确定对象的边界框,涉及到调整边界框的位置和大小,以更准确地包围目标对象。‌检测(Detection)‌:定位的目标是确定图像中对象的位置。通常使用边界框(boundingbox)来标记对象的位置,边界框通常包含对象的左上角和右下角的坐标。‌定位(Location)‌:确定图像中包含的目标类别,例如,识别图像中的对象是狗、猫还是车。‌分类(Classification)‌:02040103这些子任务的组合使得目标检测成为一个复杂的计算机视觉问题,在实际应用中,目标检测算法需要能够处理各种挑战,如光照变化、遮挡、尺度变化等,以确保准确性和鲁棒性。谢谢!手势识别知识目标技能目标构建和应用图像金字塔:熟练使用OpenCV的pyrDown和pyrUp函数构建高斯金字塔和拉普拉斯金字塔,进行图像的多层次降采样与上采样。选择合适的阈值分割方式实现阈值分割:运用Otsu方法及其他阈值处理技术,对批量图像进行自动化的二值化处理,优化图像分割效果。轮廓特征提取与分析:通过OpenCV函数提取图像轮廓的各类几何特征,并进行可视化展示,增强对图像结构的理解。掌握查找以及绘制凸包和凸缺陷的技能。素质目标

问题解决能力:在面对复杂图像处理任务时,能够分析问题、选择合适的方法与工具,设计合理的解决方案。

自主学习与持续进步:培养自主学习新技术、新方法的能力,保持对图像处理领域最新发展的关注与学习,持续提升专业素养。项目背景手势识别的应用场景已渗透至多个领域,其核心价值在于提供直观、自然的交互方式,当前,手势识别已经广泛应用于各个领域。消费与商业领域:可用于无接触购物无接触购物‌:消费者可通过手势切换商品展示页面,提升线下零售体验‌;‌智能试衣与咨询‌:结合生成式AI,实现虚拟试衣、美妆试色等个性化服务,优化消费决策流程‌智能设备与家居控制‌领域:可用于‌家电与灯光操控‌:通过手势调节灯光亮度、开关窗帘或控制空调温度,适用于智能家居场景,‌可穿戴设备交互‌:智能手环/手表支持手势接听电话、切换音乐等操作,提升移动设备使用便捷性‌。交通与车载系统‌:可用于识别交警指挥手势或行人动作,辅助自动驾驶系统优化路况响应‌医疗与公共安全‌领域:可用于‌无接触操作,手势控制设备可降低交叉感染风险,例如手术室设备操控或病房环境调节‌娱乐与虚拟交互‌领域:玩家通过手势直接操作游戏角色动作,增强沉浸感,替代传统手柄输入。‌任务引入作为一名计算机视觉工程师,您负责设计和开发用于人机交互系统的先进手势识别程序。您的任务是利用图像处理技术,如阈值处理、轮廓检测、凸包和凸缺陷分析,创建一个能够准确识别“石头、剪刀、布”等手势的程序。任务准备要完成该项工作,需要具备以下知识基础:图像金字塔阈值处理图像轮廓谢谢!图像下采样图像金字塔

图像金字塔是一种多尺度图像表示方法,通过逐层降采样和上采样,将图像表示为多个不同分辨率的层次。这种方法不仅可以减少图像处理的计算复杂度,还能在不同的尺度上捕捉图像的全局结构与局部细节。在实际应用中,图像金字塔被广泛用于对象检测、图像融合、图像压缩等任务中。图像金字塔主要分为高斯金字塔和拉普拉斯金字塔两种类型。图像下采样概念

下采样是图像金字塔构建的核心步骤之一,主要用于逐层减少图像的分辨率。下采样在保持图像的主要结构和内容的前提下,通过模糊处理和降尺度操作来降低图像分辨率。这种方法在多尺度分析和对象检测中尤为重要,因为在低分辨率的情况下可以减少数据量并加快计算速度。OpenCV的cv2.pyrDown()函数能够对图像进行下采样处理,生成一个分辨率为原图像四分之一的新图像。在内部实现中,该函数会先对图像进行高斯模糊,减少噪声对降采样的影响,从而保留主要的图像特征。下采样的图像尺寸大致是原图的一半,但其像素数量减少到原来的四分之一。此函数在多层次目标检测、背景提取、图像融合等场景下广泛应用。通过对图像不断下采样,可以形成一个逐层分辨率降低的高斯金字塔。下采样函数OpenCV提供了cv2.pyrDown()函数用于对图像进行降采样,通常将图像的宽度和高度尺寸均缩小为原来的一半。降采样可以减少图像的细节和分辨率,常用于构建图像金字塔。cv2.pyrDown()函数的语法格式如下;dst=cv2.pyrDown(src[,dstsize[,borderType]])

src:输入图像,必须为8位或浮点型的单通道或多通道图像。

dstsize:可选参数,用于设置输出图像的大小,默认情况下输出图像宽度和高度为输入图像的一半。

borderType:边界模式,默认值为cv2.BORDER_DEFAULT。此参数定义边界像素的填充方式,常见选项包括:

(1)cv2.BORDER_CONSTANT:添加常数值的边框。

(2)cv2.BORDER_REPLICATE:复制边界值。

(3)cv2.BORDER_REFLECT:镜像边界值。

dst返回降采样后的图像,其尺寸是原图的1/2。图像下采样函数案例importcv2img=cv2.imread("image//fish.jpg")#读取原始图像down1=cv2.pyrDown(img)#第一次下采样,将图像尺寸缩小为原图的1/4down2=cv2.pyrDown(down1)#第二次下采样,将图像尺寸缩小为第一次下采样的1/4#显示下采样后的各级图像cv2.imshow("img",img)#显示第一次下采样结果cv2.imshow("DownsampledImage2",down1)#显示第二次下采样结果cv2.imshow("DownsampledImage3",down2)#显示第三次下采样结果cv2.waitKey(0)#等待用户按键cv2.destroyAllWindows()#关闭所有窗口【例5.1pyrdown.py】下采样示例。

图像下采样案例

图5.1最大的图片为原图,中间的图像为第一次降采样后的图像,最小的图像为第二次降采样的结果,可见,每次降采样将图像的宽度和高度均变为原来的一半,图像大小变为原来的四分之一。例5.1输出结果谢谢!图像上采样图像上采样概念

上采样是图像金字塔中从低分辨率图像恢复到较高分辨率的一种操作,用于图像复原、重构等任务。OpenCV的cv2.pyrUp()函数可以将图像进行上采样,从而生成一个比原始输入分辨率更高的图像。上采样在增大图像分辨率的同时会插值新像素值,以确保图像在放大后尽量保持细节完整。该操作通常是通过在现有像素之间添加新像素,然后应用高斯模糊来平滑像素间的过渡。需要注意的是,cv2.pyrUp()并不能恢复图像中的细节,而是适合在图像融合、拉普拉斯金字塔重构等任务中保持图像的连续性和一致性。上采样生成的图像会保留输入图像的基本结构,同时放大图像中可见的特征。图像上采样函数OpenCV提供的cv2.pyrUp()函数用于对图像进行上采样,通常将图像宽度和高度尺寸放大到原来的两倍。上采样的操作对图像细节信息进行插值,适合用于金字塔图像的逆向重建。语法格式如下:dst=cv2.pyrDown(src[,dstsize[,borderType]])

src:输入图像,必须为8位或浮点型的单通道或多通道图像。

dstsize:可选参数,用于设置输出图像的大小,默认情况下输出图像宽度和高度为输入图像的两倍。

borderType:边界模式,默认值为cv2.BORDER_DEFAULT。此参数定义边界像素的填充方式,常见选项包括:

(1)cv2.BORDER_CONSTANT:添加常数值的边框。

(2)cv2.BORDER_REPLICATE:复制边界值。

(3)cv2.BORDER_REFLECT:镜像边界值。

dst返回上采样后的图像,其尺寸是原图的2倍。图像上采样案例importcv2img=cv2.imread("image/fish-small.jpg")up1=cv2.pyrUp(img)#第一次上采样,将图像尺寸放大为原图的4倍up2=cv2.pyrUp(up1)#第二次上采样,将图像尺寸放大为第一次上采样的4倍#显示上采样后的各级图像cv2.imshow("img",img)#显示第一次上采样的结果cv2.imshow("up1",up1)#显示第二次上采样的结果cv2.imshow("up2",up2)#显示第三次上采样的结果cv2.waitKey(0)#等待用户按键cv2.destroyAllWindows()#关闭所有窗口【例5.2pyrup.py】上采样示例。1.3上采样函数

图5.2中最小的图像为原图,中间的图像为第一次上采样的结果,右侧的图像为第二次上采样的结果,由图可见,每次上采样图像的宽度和高度均扩大为原来的两倍,图像变为原来的四倍,并且图像效果也越来越模糊。例5.2输出结果谢谢!采样的可逆性研究采样的可逆性研究内容

采样的可逆性是指在图像金字塔处理过程中,图像在降采样后再进行上采样,能否近似地还原到原图像的细节。例5.3展示图像进行下采样后再上采样,比较与原图是否相同。采样的可逆性研究案例importcv2importnumpyasnpimage=cv2.imread('image//fish.jpg')#读取原图image=cv2.resize(image,(240,240))down_image=cv2.pyrDown(image)#下采样up_image=cv2.pyrUp(down_image)#上采样difference=abs(image-up_image)#计算差值cv2.imshow('OriginalImage',image)#显示原图cv2.imshow('DownsampledImage',down_image)#显示下采样的图像cv2.imshow('UpsampledImage',up_image)#显示上采样的图像cv2.imshow('Difference',difference)#显示原图和下采样后又上采样的图像差值cv2.waitKey(0)cv2.destroyAllWindows()【例5.3down_up.jpg】先对图像进行下采样,然后进行上采样,最后将原图减去上采样的结果,查看与原图是否有差别。采样的可逆性研究案例

图5.3(a)是原图,图5.3(b)是下采样的图像,图像大小变为原来的1/4,5.3(c)是对5.3(b)上采样的结果,图像大小和原图一样,图5.3(d)是原图减去下采样又上采样的结果,由图可见,上采样后图像和原图大小虽然一样,但是像素值有区别,说明下采样后又上采样的图像和原图有区别。图5.3例5.3 输出结果(a)

(b)

(c)

(d)谢谢!拉普拉斯金字塔拉普拉斯金字塔概念0201

拉普拉斯金字塔在图像压缩和图像融合任务中也显示出其独特的优势。在图像压缩中,通过仅传输高斯金字塔的低频信息和拉普拉斯金字塔的高频信息,可以在保持图像质量的同时显著减少数据量。而在图像融合过程中,拉普拉斯金字塔能够确保融合后的图像保留源图像的细节特征,使得融合结果更加自然和准确。这些应用不仅展示了拉普拉斯金字塔在图像处理中的广泛适用性,也体现了其在提高图像处理效率和质量方面的重要价值。图5.4展示了拉普拉斯金字塔的构建过程,图中G0为原图,G1为第一次下采样图像,G2为第二次下采样的图,L0为拉普拉斯金字塔第0层,L1为拉普拉斯金字塔第1层,L2为拉普拉斯金字塔第2层。拉普拉斯金字塔的优势

拉普拉斯金字塔是图像处理中一个关键的概念,它作为高斯金字塔的扩展,专门用于捕捉图像的高频信息,即图像的边缘和细节。通过从高斯金字塔的相邻层中减去上采样后的图像,拉普拉斯金字塔能够精确地提取出这些关键的视觉特征。这些特征对于图像的视觉感知至关重要,使得拉普拉斯金字塔在图像重建领域中发挥着不可或缺的作用。它不仅可以帮助恢复图像在压缩或其他处理过程中丢失的细节,还能显著提高重建图像的质量。拉普拉斯金字塔的概念拉普拉斯金字塔原理

图5.4拉普拉斯金字塔构建过程由图5.4可以看出,拉普拉斯金字塔构建过程如下:G1=cv2.pyrDown(G0)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论