数字图像处理与深度学习技术应用 课件全套 杨淑莹 第1-13章 图像处理编程基础 - 基于深度学习Faster R-CNN模型的手势识别_第1页
数字图像处理与深度学习技术应用 课件全套 杨淑莹 第1-13章 图像处理编程基础 - 基于深度学习Faster R-CNN模型的手势识别_第2页
数字图像处理与深度学习技术应用 课件全套 杨淑莹 第1-13章 图像处理编程基础 - 基于深度学习Faster R-CNN模型的手势识别_第3页
数字图像处理与深度学习技术应用 课件全套 杨淑莹 第1-13章 图像处理编程基础 - 基于深度学习Faster R-CNN模型的手势识别_第4页
数字图像处理与深度学习技术应用 课件全套 杨淑莹 第1-13章 图像处理编程基础 - 基于深度学习Faster R-CNN模型的手势识别_第5页
已阅读5页,还剩1081页未读 继续免费阅读

下载本文档

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

文档简介

1.1Python开发基础1.2数字图像处理与深度学习技术简介1.3系统界面开发基础1.4图像显示第1章图像处理编程基础1.1Python开发基础Python的安装(1)进入Python的官方下载页面,/downloads/,单击downloads(2)选择需要的Python版本。(3)找到要下载的Python版本,单击安装。(4)测试Python是否安装成功。(5)添加环境变量。PyCharm的安装.PyCharm的安装PyCharm是一种十分简易且有效的Python编辑器。从官网上下载PyCharm的安装包,使用的是PyCharmCommunity版本。找到下载完成的.exe文件,依次单击【Next】按钮、【Install】按钮、【Finish】按钮即可完成安装。PyCharm的初始化2.PyCharm的初始化完成上面的PyCharm软件安装后,需要对PyCharm进行一些初始化配置。在PyCharm中安装常用库方法1.在PyCharm中安装常用库在完成PyCharm的初始化配置后,接下来配置OpenCV及一些常用库。单击左上角的【File】菜单,之后单击【Settings】,打开【Project:pythonProject】栏目,单击【ProjectInterpreter】,双击【pip】,出现OpenCV库函数配置界面。选择【opencv-python】后,单击左下角的【InstallPackage】按钮,在PyCharm中安装常用库方法2.在命令提示符中安装常用库打开命令提示符后,输入“piplist”即可查看Python中安装的常用库。输入“pipinstall下载的模块名”然后单击回车键即可安装。本仿真系统所用模块对应的安装命令为:在PyCharm中安装常用库pipinstalltkinterpipinstallpillowpipinstallopencv-pythonpipinstallnumpypipinstallmatplotlibpipinstallscipypipinstalleasyguipipinstallpywin32pipinstallscikit-image1.2数字图像处理与深度学习技术简介图像处理仿真系统图像处理仿真系统图像处理仿真系统,该仿真系统集成九大模块:图像色彩处理、图像合成、几何变换、灰度变化、平滑处理、边缘锐化处理、形态学处理、分割及测量和变换域处理等内容,包含了各类图像处理算法,涵盖了数字图像处理大部分的基础知识。仿真系统界面含有Windows窗口、提示语、运行按钮、以章命名的菜单项、各章对应算法的子菜单项、子菜单项消息映射响应函数、处理前及处理后的图像显示等要素。数字图像处理系统数字图像处理系统一般数字图像处理系统含有图像处理、图像分析以及图像识别理解三个层次。3.深度学习的基础深度学习引入了端到端学习的概念,即从输入图像到识别类别的三个层次在一个模型框架内完成。1.3系统界面开发基础常用设计图形界面的模块常用设计图形界面的模块Python有多种用于设计用户界面的模块,常用的模块:

Tkinter:使用Tk平台,Python系统自带的标准图形用户界面库;使用Tkinter库创建窗口界面使用Tkinter库创建窗口界面(1)导入Tkinter模块;importtkinter或fromtkinterimport*(2)创建一个顶层容器对象;root=tkinter.Tk()#创建一个窗体对象root.title(‘数字图像处理——python’)#设置窗口标题root.geometry(‘750x490+110+50’)#设置窗口大小(3)在顶层容器对象中,添加其他组件;(4)采取调用pack()方法进行容器的组件布局;(5)进入主事件循环。root.mainloop()#显示窗口(消息循环)创建窗口界面fromtkinterimport*root=Tk()#顶层窗口对象root.title('数字图像处理——python')#设置窗口大小root.geometry('750x490+110+50')root.mainloop()添加文字提示语fromtkinterimport*root=Tk()#顶层窗口对象root.title('数字图像处理——python')#设置窗口大小root.geometry('750x490+110+50')Label(root,text='提示1:!!!谢谢!',font=('楷体',15),width=80,height=2).pack()Label(root,text='提示2:打开摄像头谢谢!',font=('楷体',15),width=80,height=2).pack()root.mainloop()图像在界面中自动显示img_1=Image.open('sucai.jpg')

加载一张图片到内存中photo_1=ImageTk.PhotoImage(img_1)

转换成可显示的图像对象img_label_1=Label(root,image=photo_1).pack(side='left')

借助tkinter中的Label组件将图像显示在界面上#界面右边显示图片img_2=Image.open('sucai.jpg')photo_2=ImageTk.PhotoImage(img_2)img_label_r=Label(root,image=photo_2).pack(side='right')界面自动显示图像fromtkinterimport*fromPILimportImageTkfromPILimportImage,ImageEnhanceroot=Tk()#顶层窗口对象root.title('数字图像处理——python')#设置窗口大小root.geometry('750x490+110+50')Label(root,text='谢谢!',font=('楷体',15),width=80,height=2).pack()Label(root,text='谢谢!',font=('楷体',15),

width=80,height=2).pack()img_1=Image.open('sucai.jpg')photo_1=ImageTk.PhotoImage(img_1)img_label_1=Label(root,image=photo_1).pack(side='left')#界面右边显示图片img_2=Image.open('sucai.jpg')photo_2=ImageTk.PhotoImage(img_2)img_label_r=Label(root,image=photo_2).pack(side='right')root.mainloop()图像在界面中自动显示(1)需要导入模块fromtkinterimport*fromPILimportImageTkfromPILimportImage,ImageEnhance(2)使用Image.open()方法加载一张图片到内存中,并用ImageTk.PhotoImage()方法将其转换成可显示的图像对象。img=Image.open("'sucai.jpg")#加载图片photo=ImageTk.PhotoImage(img)#转换成可显示的图像对象```图像在界面中自动显示(3)借助tkinter中的Label组件将图像显示在界面上root=Tk() #创建窗口对象label=Label(root,image=photo) #创建标签对象label.pack() #将标签放置到窗口中root.mainloop() #运行窗口事件循环制作菜单menuBar=Menu(root)

创建菜单条root.configure(menu=menuBar)

把菜单条放置到窗体中fileMenu=Menu(menuBar)

在菜单条中创建菜单menuBar.add_cascade(label="文件",menu=fileMenu)

为菜单添加文字标签fileMenu.add_command(label="打开图像",command=open_image)

在菜单中添加菜单项fileMenu.add_command(label="打开摄像头",command=open_camera)菜单(1)创建菜单条对象:menubar=Menu(窗体容器)(2)把菜单条放置到窗体中:窗体容器.config(menu=menubar)(3)在菜单条中创建菜单:菜单名称=Menu(menubar,tearoff=0)(4)为菜单添加文字标签menubar.add_cascade(label="文字标签",menu=菜单名称)(5)在菜单中添加菜单项菜单名称.add_command(label="菜单项名称",command=功能函数名)fileMenu.add_command(label="打开摄像头",command=open_camera)#在菜单中添加菜单项打开图像文件菜单用户打开图像文件的显示首先通过建立文件菜单,在【打开图像】子菜单项指定消息响应函数open_image()menuBar=Menu(root)root.configure(menu=menuBar)fileMenu=Menu(menuBar)menuBar.add_cascade(label="文件",menu=fileMenu)fileMenu.add_command(label="打开图像",command=open_image)打开摄像头拍摄图像菜单摄像头拍摄图像的显示首先通过文件菜单,在【打开摄像头】子菜单项指定消息响应函数open_camera()menuBar=Menu(root)root.configure(menu=menuBar)fileMenu=Menu(menuBar)menuBar.add_cascade(label="文件",menu=fileMenu)fileMenu.add_command(label="打开摄像头",command=open_camera)选择文件--显示图像defopen_image():globalimg_label_1,photo_3,sFilePathsFilePath=easygui.fileopenbox()img_3=Image.open(sFilePath)x_s=300#definestandardwidthy_s=300#calcheightbasedonstandardwidthout=img_3.resize((x_s,y_s),Image.ANTIALIAS)#resizeimagewithhigh-qualityout.save('save.jpg')sFilePath='save.jpg'photo_3=ImageTk.PhotoImage(out)img_label_1.configure(image=photo_3)configure函数在Python中,configure函数是一个通用的TkinterGUl方法,它允许您动态更改控件的选项和配置。img_1=Image.open('sucai.jpg')photo_1=ImageTk.PhotoImage(img_1)img_label_1=

Label(root,image=photo_1).pack(side='left')改为:img_label_1.configure(image=photo_3)defopen_camera():globalimg_label_1,photo_3,sFilePathcap=cv2.VideoCapture(0)#获取摄像头设备或打开摄像头ifcap.isOpened():#判断摄像头是否已经打开,若打开则进入循环whileTrue:#无无限循环ret,frame=cap.read()#frame获取视频的一帧

cv2.imshow('camera',frame)#显示一张张图片来实现的ifcv2.waitKey(1)&0xff==ord('q'):#如果在循环中按下键盘的q键cv2.imwrite('save.jpg',frame)#将最后一帧写入当前工程文件的目录下,名显示拍摄图像

im=Image.open('save.jpg')x_s=300#definestandardwidthy_s=300#calcheightbasedonstandardwidthout=im.resize((x_s,y_s),Image.ANTIALIAS)

out.save('save.jpg')sFilePath='save.jpg'img_3=Image.open(sFilePath)photo_3=ImageTk.PhotoImage(img_3)img_label_1.configure(image=photo_3)break显示拍摄图像cap.release()#释放资源,即销毁进程cv2.destroyAllWindows()#销毁所有窗口显示拍摄图像变量设置的考虑判断打开的文件来源1.自带文件:

sFilePath='start'2.用户选择和视频文件:sFilePath='save.jpg'3.处理图像的函数:deftuxiangzhuanhuan():globalsFilePathifsFilePath!='start':img=Image.open(sFilePath)else:img=Image.open('sucai.jpg')zhuanhuan_img=img.convert("L")#灰度化zhuanhuan_img.save('result.jpg')变量设置的考虑作者杨淑莹敬上谢谢!第2章彩色图像特效处理灰度图像的像素值是光强,即二维空间变量的函数f(x,y)。彩色图像:把灰度值看成是二维空间变量和光谱变量的函数f(x,y,λ),即多光谱图像计算机显示彩色图像时,采用RGB颜色模型。2.1.1概述颜色:是外界光刺激作用于人的视觉器官而产生的主观感觉。颜色分两大类:非彩色和彩色。非彩色:是指黑色、白色和灰色,也称为无色系列。彩色:是指除了非彩色以外的各种颜色。

三基色原理

两种感光细胞:在人的视觉系统中存在着杆状细胞和锥状细胞。杆状细胞:为暗视器官。锥状细胞:是明视器官,将电磁光谱的可见部分分为三个波段:红、绿、蓝,在照度足够高时起作用,能分别辨颜色。

三基色原理

人类视觉系统三类锥状细胞的光谱敏感曲线。

三基色原理

三基色:三种颜色红、绿、蓝组成。1)自然界的任何颜色由三基色按不同比例混合而成;每种颜色都可以分解成三种基本颜色。2)三基色之间是相互独立的,任何一种颜色都不能由其余的两种颜色来组成。色度学基础颜色模型:科学地定量描述和使用颜色。常用:RGB:视频监视器、彩色摄像机。HSI:以彩色处理为目的的应用,如动画中的彩色图形。CMYK:印刷工业。YUV:电视信号传输。彩色空间

用三维空间中的一个点来表示一种颜色。每个点有三个分量,红、绿、蓝亮度值。

RGB模型彩色立方体中三个角对应于三基色红、绿、蓝剩下的三个角对应于三个补色——黄色、青色(蓝绿色)、品红(紫色)

RGB模型颜色名R值G值B值红25500绿02550蓝00255白255255255黑000青0255255紫2550255黄2552550反映了人的视觉系统观察彩色的方式,符合人的视觉感受,让人觉得更加直观一些。适合借助人的视觉系统来感知彩色特性的图像处理算法。在艺术上经常使用HSI模型。HSI颜色模型RGB格式从物理和光学角度描述颜色不同,HSI则是根据视觉的主观感觉对颜色描述人眼不能直接感觉红、绿、蓝三色的比例,只能通过感知颜色的亮度、色度和饱和度来区分物体。HSI颜色模型三个基本属性:色调、饱和度和亮度。颜色模型HIS:基于这三个基本属性。HSI表征彩色信息的两个参数:

色度(hue)和饱和度(saturation)。颜色的三个属性亮度(Intensity):指光波作用于感受器所发生的效应,大小由物体反射系数决定,系数越大,物体亮度愈大,反之愈小。与图像的彩色信息无关。色度(Hue):表明颜色种类,决定颜色本质,由物体反射光线中占优势的波长决定,不同波长产生不同的颜色感觉。饱和度(Saturation):是指颜色的深浅和浓淡程度,饱和度越高,颜色越深。颜色的三个属性色调:由角度表示该彩色最接近什么样的光谱波长。

0°红色,120°绿色,240°蓝色。0°到240°覆盖可见光谱彩色,

240°到300°之间为人眼可见的非光谱色(紫色)。饱和度:色环的圆心到半径的长度。环边界上饱和度值为1,纯颜色。中心饱和度为0,是灰色阴影。HIS色相环HSI模型的三个属性定义了一个三维柱形空间。灰度阴影沿着轴线从底部的黑变到顶部的白,具有最高亮度。最大饱和度的颜色位于圆柱上顶面的圆周上。HSI三维柱形空间对任何3个[0,1]范围内的R、G、B值,其对应HSI模型中的I亮度、S饱和度、H色度分量的计算公式为RGB转换到HSI空间H色度是在[0°,360°]范围内。当S=0时对应的是无色彩的中心点,这时H就没有意义,此时定义H为0。当I=0时,S也没有意义。设S、I的值在[0,1]之间,R、G、B[0,1]之间,HSI转换为RGB的公式为:RGB转换到HSI空间

H[120°,240°]H[240°,360°]H[0°,120°]HSI转换到RGB空间YUV颜色模型:由1个亮度信号Y和两个色差信号U、V组成。它是利用了人眼对亮度信号敏感而对色度信号相对不敏感的特点。电视系统中常用的颜色模型。YUV颜色模型YUV表示电视信号彩色坐标系统;YUV彩色电视信号传输时,将R、G、B变换为亮度信号和色度信号;其中Y信号表示亮度,U、V表示色差信号。YUV颜色模型RGB转换到YUV空间屏幕显示:用RGB表色系统,通过相加来产生其他颜色,加色合成法(AdditiveColorSynthesis)。印刷工业:用CMYK表色系统,通过颜色相减来产生其他颜色的,减色合成法(SubtractiveColorSynthesis)。

CMYK颜色模型

CMY颜色模型:青色(Cyan)、品红色(Magenta)、黄色(Yellow),是红、绿、蓝的补色,称为减色基。是彩色图像印刷行业使用的彩色空间。在处理图像时,一般不用CMYK模式,文件大,占用的磁盘空间和内存大。这种模式一般在印刷时使用。CMYK颜色模型3.RGB与CMYRGB转换到CMY空间Lab颜色由亮度或光亮度分量L和a、b两个色度分量组成。其中a在的正向数值越大表示越红,在负向数值越大则表示越绿;b在的正向数值越大表示越黄,在负向的数值越大表示越蓝。Lab颜色模型Lab颜色与设备无关,无论使用何种设备(如显示器、打印机、计算机或扫描仪)创建或输出图像,这种模型都能生成一致的颜色。Lab颜色模型位图深度:位图中记录每个像素点所占的位数,它决定了彩色图像中可出现的最多颜色数,或者灰度图像中的最大灰度等级数。

位图深度位图颜色数图像深度每个像素颜色值的特点单色21位不是0就是1灰度图像2568位含颜色索引表;R、G、B各分量值相等;像素值是索引表的索引号。伪彩色图像2568位含颜色索引表;R、G、B分量值不全相等;像素值是索引表的索引号24位真彩色1677万24位不包含颜色索引表;像素值由R、G、B分量组成

位图深度位图文件头结构BITMAPFILEHEADER位图信息头结构BITMAPINFOHEADER位图像素数据24位彩色图像BMP文件组成(1)文件带有图像颜色表。

fred(x,y)=fgreen(x,y)=fblue(x,y)(2)像素值是图像颜色表的索引地址。由8位组成,从0~255.125,153,158,157,127,70,103,120,129,144,144,150,150,147,150,160,133,154,158,100,116,120,97,74,54,74,118,146,148,150,145,157,155,163,95,112,123,101,137,108,81,71,63,81,137,142,146,152,167,69,85,59,65,43,85,34,69,78,104,101,117,132,134,149,54,46,38,44,38,36,44,36,25,48,115,113,114,124,135,152,58,30,44,35,28,69,144,147,57,60,93,106,119,124,131,144,图像颜色表索引号BGR0000…2552552552558位灰度图像(1)颜色表红、绿、蓝颜色分量值不全相等。(2)像素值是图像颜色表的索引地址。颜色索引表颜色名R值G值B值红25500绿02550蓝00255白255255255黑000青0255255紫2550255黄25525508位伪彩色图像(1)每一像素由RGB三个分量组成。(2)每个分量各占8位,取值范围为0~255,每个像素24位。(207,137,130)(220,179,163)(215,169,161)(210,179,172)(210,179,172)(207,154,146)(217,124,121)(215,169,161)(216,179,170)(216,179,170)(207,137,120)(159,51,71)(213,142,135)(216,179,170)(221,184,170)(190,89,89)(204,109,113)(204,115,118)(216,179,170)(220,188,176)(190,77,84)(206,95,97)(217,113,113)(189,85,97)(222,192,179)(150,54,71)(177,65,73)(145,39,65)(150,47,67)(112,20,56)(136,38,65)(112,20,56)(112,20,56)(109,30,65)(112,20,56)(95,19,64)(136,38,65)(91,11,56)(113,25,60)(103,19,59)(81,12,59)(126,62,94)(138,46,71)(103,19,59)(158,65,83)(124,40,70)(145,62,79)(130,46,73)24位真彩色图像位图文件头结构BITMAPFILEHEADER位图信息头结构BITMAPINFOHEADER位图像素数据位图文件头结构BITMAPFILEHEADER位图信息头结构BITMAPINFOHEADER颜色表位图像素数据8位位图文件结构24位位图文件结构图像文件结构typedef

struct

tagBITMAPFILEHEADER{

WORDbfType;//BM,2byteDWORDbfSize;//文件大小,4byte

WORDbfReserved1;//0WORDbfReserved2;//0DWORDbfOffBits;//位图数据的起始位置,}TMAPFILEHEADER;//(14byte)BMP文件结构typedef

struct

tagBITMAPINFOHEADER{DWORDbiSize;//biSize=40byteLONGbiWidth;LONGbiHeight;WORDbiPlanes;//1WORDbiBitCount;//每个像素所需的位数,24DWORDbiCompression;//位图压缩类型,0

DWORDbiSizeImage;//位图的大小,

LONGbiXPelsPerMeter;//0LONGbiYPelsPerMeter;//0DWORDbiClrUsed;//颜色数0

DWORDbiClrImportant;//重要的颜色数0}BITMAPINFOHEADER;图像文件结构(207,137,130)(220,179,163)(215,169,161)(210,179,172)(210,179,172)(207,154,146)(217,124,121)(215,169,161)(216,179,170)(216,179,170)(207,137,120)(159,51,71)(213,142,135)(216,179,170)(221,184,170)(190,89,89)(204,109,113)(204,115,118)(216,179,170)(220,188,176)(190,77,84)(206,95,97)(217,113,113)(189,85,97)(222,192,179)(150,54,71)(177,65,73)(145,39,65)(150,47,67)(112,20,56)(136,38,65)(112,20,56)(112,20,56)(109,30,65)(112,20,56)(95,19,64)(136,38,65)(91,11,56)(113,25,60)(103,19,59)(81,12,59)(126,62,94)(138,46,71)(103,19,59)(158,65,83)(124,40,70)(145,62,79)(130,46,73)24位图像数据第2章彩色图像处理2.2图像的颜色处理(第二讲)2.2.1彩色图像的灰度化处理灰度化处理:是把含有亮度和色彩的彩色图像变换成灰度图像的过程。处理方法:使RGB模型中颜色R、G、B分量值相等,即:R=G=BGray(i,j)=0.11*R(i,j)+0.59*G(i,j)+0.3*B(i,j)1)绿色所占比重最大,用G值为转换后的灰度。2)取三个分量的最大值、最小值、算术平均值等转换后的灰度值越大越白、越亮,越小越黑。

灰度化处理效果图1)取得图像文件的拷贝文件;2)取得图像的数据区指针,得到像素的三个分值;3)将三个值比较,取得最大值;4)将最大值返回给三个分量;5)显示图像。实现步骤2.2.2灰度图像着色处理

人眼对灰度的分辨能力很差,对彩色信号的分辨率很强,将灰度图像转换为彩色图像,人眼可以提取更多的信息量。

由于24位灰度图像的三分量值相等,所以改变对应的三个分量的值,可得伪彩色图像。

通过调整红、绿、蓝的值而得到不同颜色效果的彩色图像。

若输入相等的分量值时,即得到不同亮度的灰度图像。灰度图像着色处理效果图1)从对话框输入这三个分量的系数:m_Red(红)、m_Green(绿)、m_Blue(蓝);2)取得数据区指针,得到像素的三个分值;3)计算灰度值gray=0.3×R+0.59×G+0.11×B4)将对话框输入值m_Red(红)、m_Green(绿)、m_Blue(蓝)分别乘以计算得到的灰度值并除以255;5)再把值返回给蓝、绿、红三个指针变量。实现步骤2.2.3亮度调整人眼对亮度是非常敏感的,在比较两个强弱不同亮度时,有较好的判断力。所以在图像的处理过程中,经常要对亮度和对比度进行调整。亮度调整:指人眼亮度感觉的调整,可以通过对R、G、B颜色的增加或减少相同的增量来显示。亮度调整:给每个分量乘以一个百分比值,这个值由对话框输入。三个颜色指针分别乘以一个百分比后再返回给原来的颜色分量。①当输入值为100时,保持原来亮度;②当输入值小于100时,亮度减少,变暗;③当输入值大于100时,亮度增加。亮度调整效果图1)取得图像文件的拷贝文件;2)从对话框输入任意整数值(0~500);3)取得图像的数据区指针,得到像素的蓝、绿、红的三个分值;4)将这三个值分别乘以对话框输入的百分比;5)检验所得到的每个值是否在(0~255)范围内,若越界则取边界值255;6)再把三个新值返回给蓝、绿、红三个变量。实现步骤2.2.4对比度调整对比度:是颜色分量之间的差值。调整对比度:使图片的颜色之间更符合人们的需求,实现一些效果。低对比度:整幅图偏暗,或整幅图偏亮,颜色都挤在一起,没有拉开。增加对比度:把所感兴趣的颜色范围拉开,亮的越亮,暗的越暗,达到增强对比度的目的。改变对比度就是对每一颜色分量以一致的方式来改变最大值和最小值之间的差值,要对每一个像素RGB分量的值都要进行调整。对比度调整从对话框获得调整参数n(-127,128)之间。1)输入值为0时,保持原对比度;2)输入值小于0时,减少对比度。减少对比度变化的方法是:

对分量的区间缩小,从[0,255]减少到[-n,255+n]。对比度调整3)输入值大于0时,增加图像的对比度。增加对比度变化的方法是:

对分量的区间扩大,把从[n,255-n]增加到[0,255]。对比度调整效果图2.3彩色图像的特效处理彩色图像的特效处理包括:

彩色图像的逆反处理;

彩色图像的暴光处理;

彩色图像的扩散处理。

彩色图像马赛克处理2.3.1彩色图像的逆反处理

图像亮度逆反处理:对每个像素的三个分量值分别求逆反处理,即用255分别减去当前像素的三个分量值,而相减得到三个新值作为图像的值。效果图1)取得图像的数据区指针,得到当前点的三个分值;2)对这三个值分别进行取反;3)再把三个新值返回给蓝、绿、红三个指针变量;4)显示图像。实现步骤2.3.2彩色图像的曝光处理曝光图像:或多或少地损失了在原图像中可以看到的那些明快的颜色和色调。曝光图像算法:逆转数值小于128的R、G、B三分量。曝光处理效果:基于照片技术。例如,三分量值为(60,210,135)的像素,只是红色被逆转,经过转换后为(195,210,135)而对于数值(50,100,70)均小于128,所以都需逆转,得到(205,155,185)。g(i,j)=255-f(i,j)如果f(i,j)<128曝光处理效果图1)取得图像的数据区指针,得到像素三个分值;2)对这三个值分别进行判断,若大于128,则保持不变,否则逆转;3)再把三个新值返回给蓝、绿、红三个指针变量;4)显示图像。实现步骤2.3.3彩色图像的扩散处理扩散处理:不是基于像素的和或差,而是用rand()函数在图像中引入一些随机性,使图像如油画一般。方法:从当前像素周围5×5相邻的像素中随机性的任意选择一个值作为当前像素的值。效果图1)在开辟一个临时缓冲区;2)取得图像的数据区指针,产生行、列的随机数。3)根据随机数得到以当前点为中心的对应的点4)把这点的蓝、绿、红的对应值赋给当前点对应的临时缓冲区中。实现步骤2.3.4彩色图像马赛克处理原理:将图像从形式上划分为很多小块,在每块内的各个像素都取到相同的红、绿、蓝颜色值,从而对某些细节进行模糊化处理,使图像粗糙化。马赛克处理后,图像每一小块矩阵内的所有像素值都取该矩阵内各像素值之和的平均值。1)开辟一个临时缓冲区;2)取得图像的数据区指针,把数据区划分成许多5╳5的矩阵;3)对每个矩阵内的像素的蓝、绿、红三分量进行求总再平均;4)把得到的平均值赋给当前对应的临时缓冲区中5╳5矩阵内的所有像素点。实现步骤第2章彩色图像处理2.4彩色图像的平滑处理2.5彩色图像的锐化处理(第3讲)2.4彩色图像的平滑处理本节介绍两种彩色图像的平滑处理技术:

邻域平均法;

线性平滑滤波。2.4.1邻域平均法每一个像素都由其相邻的n×n个的平均值代替,减少相邻像素间的颜色差别,柔化效果。例如,一般选用3×3的点矩阵,每个像素用其周围的8个像素及其本身像素之和的平均值来代替。注意,边界像素。1)在开辟缓冲区;2)取得图像的数据区指针,得到当前点及周围8个点的三个对应值;3)将三个分量分别求和,再平均;4)把得到像素的三个新分值分别存入对应临时缓冲区中。实现步骤效果图2.5彩色图像的锐化处理

锐化处理方法在第六章介绍,本节主要介绍彩色图像的锐化处理技术,包括:

图像水平增强;

图像垂直增强;

图像双向增强;

梯度锐化;

高通滤波器;

彩色图像的浮雕处理;

彩色图像的霓红处理。2.5.1图像水平增强增强图像水平方向也是一种高通滤波。h[1][3]=(1)取得图像文件的拷贝文件;(2)开辟缓冲区;(3)取得图像的数据区指针,得到当前点及左右邻点的三个分量值。(4)再把这3个点的三分量分别与对应的矩阵计算;(5)新值存入缓冲区。实现步骤效果图2.5.2图像垂直增强增强图像垂直方向也是一种高通滤波。:h[3][1]=(1)取得图像文件的拷贝文件;(2)开辟缓冲区;(3)取得图像的数据区指针,得到当前点及上下邻点的三个分量值。(4)再把这3个点的三分量分别与对应的矩阵计算;(5)新值存入缓冲区中。实现步骤效果图2.5.3图像双向增强增强图像水平方向也是一种高通滤波。h[3][3]=(1)取得图像文件的拷贝文件;(2)开辟缓冲区;(3)取得图像的数据区指针,得到当前点及周围8邻点的三个分量值。(4)再把这8个点的三分量分别与对应的矩阵计算;(5)新值存入缓冲区中。实现步骤效果图效果图2.5.4梯度锐化与柔化处理相反,突出图像的变化,模糊图像变得更加清晰。采用的算法:将要处理的像素与它左对角线的像素之间的差,乘上一个锐化度数,然后再加上原先的像素值。Red=R+(R-r)/4;Blue=B+(B-b)/4;Green=G+(G-g)/4;R、G、B为当前原像素f(i,j)的三个分量值;r、g、b为前一个相邻像素f(i-1,j-1)的三个分量值。注意:要检验结果的有效性。(1)取得图像文件的拷贝文件;(2)开辟缓冲区;(3)取得图像数据区指针,得到当前像素点及同行左上邻点对应的三个分量。(4)对原点与左上邻点的分量值分别进行差运算,并加上原点的值;(5)新值存入缓冲区中。实现步骤效果图2.5.5高通滤波器

高通滤波是对图像的低频分量进行抑制,从而让图像的高频分量通过的滤波器。基本高通

中等高通

过量高通效果图基本高通

过量高通2.5.6彩色图像的浮雕处理浮雕效果:将变化部分突出,相同颜色部分则被淡化,使图像出现纵深感,从而达到浮雕效果。算法:当前像素取值为与前一个像素的差值。颜色变化区才会出现色彩,颜色平淡区因差值几乎为零,变成黑色,加上一个常量增加亮度。G(i,j)=f(i,j)-f(i-1,j)+常量常量通常取值为128,即Red=R-r+128;Blue=B-b+128;Green=G-g+128;浮雕处理(1)取得图像文件的拷贝文件;(2)开辟缓冲区;(3)取得图像的数据区指针,得到当前像素点及同行左邻点对应的分量值。(4)对原点与左邻点的分量值分别进行差运算,并加上一个常量;(5)新值存入缓冲区中。实现步骤效果图2.5.7彩色图像的霓红处理先计算原图像当前像素f(i,j)的分量与其相邻像素f(i+1,j)及f(i,j+1)的梯度,即差的平方之和的平方根,然后将梯度值作为处理后像素的三个分量。r1、g1、b1分别为原图像像素f(i,j)分量值。r2、g2、b2分别为原图像同行相邻像素f(i+1,j)的分量值。r3、g3、b3分别为原图像同列相邻像素f(i,j+1)的分量值。(1)取得图像文件的拷贝文件;(2)开辟缓冲区;(3)取得图像的数据区指针,得到当前像素点及同行右邻点和同列下邻点对应的三个分量值。(4)对两个邻点的分量值分别与原点进行梯度运算,即差的平方之和的平方根;(5)新值存入缓冲区中。实现步骤效果图作者杨淑莹敬上谢谢!作者杨淑莹敬上谢谢!第3章图像的合成处理目录3.1图像的代数运算3.1.1图像加运算3.1.2图像减运算3.2图像逻辑运算3.1图像的代数运算理论基础代数运算是指对两幅输入图像进行点对点的加、减、乘、除计算而得到输出图像的运算。加运算C(x,y)=A(x,y)+B(x,y)减运算C(x,y)=A(x,y)-B(x,y)乘运算C(x,y)=A(x,y)×B(x,y)除运算C(x,y)=A(x,y)÷B(x,y)3.1.1图像加运算理论基础把针对同一目标物在相同条件下,做M次重复摄取的图像相加,取平均值作为输出图像,输出的平均图像(x,y)中随机噪声的含量,比单幅图像s(x,y)的随机噪声含量削弱S(x,y)=G(x,y)+F(x,y)(3-5)G(x,y)是非相关的、具有零均值的随机噪声函数说明retval=cv2.resize(src,dsize,fx=None,fy=None,interpolation=None)该函数用于将原始图像调整为指定大小。retval:输出指定大小图像;src:原始图像;dsize:输出图像的尺寸(元组方式),注意desize的参数顺序是,第一个参数指定输出图像的宽度(列数),第二个参数指定输出图像的高度(行数);fx:沿水平轴缩放的比例因子;fy:沿垂直轴缩放的比例因子;interpolation:插值方式效果展示图像通常用由采样点的值所组成的矩阵来表示。每一个采样单元叫作一个像素(pixel),3.1.2图像减运算函数说明理论基础图像相减可用于去除一幅图像中所不需要的图案,也可以用于检测同一场景的两幅图像之间的变化。当两幅图像进行减运算时,相同位置的背景点因为灰度值相同,结果变成了黑点函数说明result=cv2.subtract(a,b)该函数由OpenCV提供用于实现图像减法运算。result:表示计算的结果;a、b:表示需要进行减法计算的两个像素值。当使用cv2.subtract()函数进行图像减运算时。规则如下:效果展示3.2图像逻辑运算理论基础按位逻辑运算是一种对图像进行像素级别的逻辑操作的方法。基本运算法则如下:(1)与运算的法则是当两个值都是1时两个数与的结果等于1,其他全为0。(2)或运算的法则是当两个值都是0时两个数或的结果等于0,其他全为1。(3)异或运算的法则是当运算的两个数取值不同时,结果为1;相同则为0。(4)非运算的法则是当数值为0时,结果为1;当数值为1时,结果为0。位与运算函数说明在OpenCV中的cv2.bitwise_and()函数用于进行位与运算,其一般格式为:retval=cv2.bitwise_and(src1,src2[,mask])retval:表示与输入值具有相同大小的输出值;src1:表示第一个输入值;src2:表示第二个输入值;mask:表示可选操作掩码。效果展示效果展示通过位与运算提取掩膜图像中感兴趣的区域,按位逻辑运算可以用于图像分割,提取感兴趣的目标。位或运算函数说明OpenCV中的cv2.bitwise_or()函数用于进行位或运算,其一般格式为:retval=cv2.bitwise_or(src1,src2[,mask])retval:表示与输入值具有相同大小的输出值;src1:表示第一个输入值;src2:表示第二个输入值;mask:表示可选操作掩码。效果展示两个图像进行位或操作,将不同的图像部分进行组合,可以实现图像的混合、叠加和融合效果。这在图像处理、特效制作和图像合成中常用于创建创意效果和特殊效果。位非运算函数说明OpenCV中的cv2.bitwise_not()函数用于按位非运算,其一般格式为:retval=cv2.bitwise_not(src[,mask])retval:表示与输入值具有相同大小的输出值;src:表示输入值;mask:表示可选操作掩码。效果展示位非运算实际上是对图像二值化后进行反色变换的结果。位异或运算函数说明(1)OpenCV中的cv2.bitwise_xor()函数用于位异或运算,其一般格式为:retval=cv2.bitwise_xor(src1,src2[,mask])retval:表示与输入值具有相同大小的输出值;src1:表示第一个输入值;src2:表示第二个输入值;mask:表示可选操作掩码。效果展示使用位异或运算,可以检测出两个图像之间的差异和变化。相同之处为0,即为黑色,不同之处为白色。作者杨淑莹敬上谢谢!第4章图像几何变换杨淑莹本章目录4.1仿射变换4.1.1平移

4.1.2

缩放

4.1.2旋转4.2重映射4.2.1复制

4.2.2绕x轴翻转

4.2.3绕y轴翻转4.2.4绕x轴与y轴翻转4.3投影变换4.3.1原理简介4.3.2Python实现4.4极坐标变换4.4.1原理简介

4.4.2Python实现4.5思考与练习设变换矩阵T为则上述变换可以用公式表示为基础知识介绍--图像几何变换旋转变换基础知识介绍--常用的几何变换平移变换

放缩变换将2×3阶变换矩阵T进一步扩充为3×3方阵这样一来,平移变换可以用如下形式表示:基础知识介绍--平移变换矩阵平移变换的表示法变换后的点集矩阵=变换矩阵T×变换前的点集矩阵平移变换注意:平移后的景物与原图像相同,但“画布”一定是扩大了。否则就会丢失信息。比例缩放变换图像的缩小一般分为按比例缩小和不按比例缩小两种。不按比例缩小一定会带来几何畸变。

缩小后,信息量小,所以画布可相应缩小。放大将原图像的一个像素添到新图像的一个k1*k2的子块中去。比例缩放变换水平镜像垂直镜像应用旋转变换图像旋转之后,会出现许多的空白点,对这些空白点必须进行填充处理,否则画面效果不好,称这种操作为插值处理。最简单的方法是行插值或是列插值:1)插值的方法是:空点的像素值等于前一点的像素值。2)同样的操作重复到所有行。旋转变换对给定的图像连续施行若干次如前所述的平移、镜像、比例、旋转等基本变换F1,F2,…,FN后,所完成的变换。复合变换的矩阵等于基本变换的矩阵按顺序依次相乘得到的组合矩阵,又叫级联变换。

T=TNTN-1…T1。若干次基本变换仍可用3×3阶表示。复合变换复合平移复合比例复合旋转基础知识介绍---图像的平移图像中所有的点都按照指定的平移量水平、垂直移动。设初始坐标为(x0,y0)的点经过平移(tx.ty)后,则点(x0,y0)坐标变为(x1,y1)。

tx

坐标原点(x0,y0)

ty

(x0,y0)和(x1,y1)的关系:

x1=x0+tx

y1=y0+ty基础知识介绍--图像平移变换

图像的镜像变换水平镜像:垂直中轴线为中心,将图像分为左右两部分;垂直镜像:水平中轴线为中心,将图像分为上下两部分。

镜像变换后图的高和宽都不变。x1=Width-x0y1=y0图像水平镜像变换x1=x0

y1=Height-y0图像垂直镜像变换效果对比图

图像的转置将图像像素的x坐标和y坐标互换。将改变图像的高度和宽度,转置后图像的高度和宽度将互换。

x1=y0

y1=x0图像转置效果对比图图像的旋转必须指明图像绕着什么旋转。一般图像的旋转是以图像的中心为原点,旋转一定的角度。旋转后,一般会改变图像的大小。

旋转后:

x1=x0cos(θ)+y0sin(θ)y1=-x0sin(θ)+y0cos(θ)图像旋转

效果对比图

x1=x0*kx

y1=y0*ky

假设图像X轴方向缩放比率是kx,Y轴方向缩放比率是ky。图像的缩放

kx>1且ky>1时,原图像被放大,面积增加。

由于放大图像时产生了新的像素,可通过插值算法来近似处理。

当kx=ky=2时,图像放大2倍,原图中的某一个像素,对应新图的4个像素。

●●●●

图像放大

表3.11234234056776633

表3.21122334411223344223344002233440055667777556677776666333366663333图像放大当kx<1且ky<1时,原图像被缩小。当kx=ky=0.5时,被缩小一半。原图中4个像素对应新图中的一个像素。此时缩小后的图像中的(0,0)像素对应于原图中的(0,0)、(0,1)、(1,0)、(1,1)像素。●●

●●●图像缩小效果对比图仿射变换是指通过一系列几何变换来实现平移、缩放、旋转等操作。OpenCV中为仿射变换提供的仿射函数为cv2.warpAffine(),可以通过一个映射矩阵M来实现这种变换。由变换矩阵M与原始图像矩阵相乘得到仿射变换函数cv2.warpAffine()的一般格式为:4.1

仿射变换4.1.1平移在已知变换矩阵M,cv2.warpAffine()完成图像的平移操作。【例4-1】使用仿射变换函数cv2.warpAffine()实现图像的平移。importcv2ascvimportnumpyasnpimage=cv.imread("F:/picture/panda.png")#读入panda图像h,w=image.shape[:2]#获取图像大小信息M=np.float32([[1,0,120],[0,1,-120]])#构建转换矩阵imageMove=cv.warpAffine(image,M,(w,h))#进行仿射变换——平移cv.imshow("image",image)#显示原始图像cv.imshow("imageMove",imageMove)#显示变换后的图像cv.waitKey()cv.destroyAllWindows()4.1.2缩放将原始图像缩小为一半时,转换矩阵M可以为:【例4-2】使用仿射变换函数cv2.warpAffine()实现图像的缩放。importcv2ascvimportnumpyasnpimage=cv.imread("F:/picture/panda.png")#读入panda图像h,w=image.shape[:2]#获取图像大小信息M=np.float32([[0.5,0,0],[0,0.5,0]])#构建转换矩阵imageMove=cv.warpAffine(image,M,(w,h))#进行仿射变换——缩放cv.imshow("image",image)#显示原始图像cv.imshow("imageMove",imageMove)#显示变换后的图像cv.waitKey()cv.destroyAllWindows()4.1.3旋转旋转操作时,cv2.getRotationMatrix2D()得到仿射变换函数cv2.warpAffine()的转换矩阵。ret=cv2.getRotationMatrix2D(center,angle,scale)·center是旋转的中心点。·angle表示旋转角度,正数为顺时针旋转,负数为逆时针旋转。·scale表示变换尺度。【例4-3】使用仿射变换函数cv2.warpAffine()实现图像的旋转。

importcv2ascvimage=cv.imread("F:/picture/panda.png")#读入panda图像h,w=image.shape[:2]#获取图像大小信息#得到转换矩阵M,效果是以图像的宽高的1/3为中心点顺时针旋转40°,缩小为原来的0.4M=cv.getRotationMatrix2D((w/3,h/3),40,0.4)imageMove=cv.warpAffine(image,M,(w,h))#进行仿射变换——旋转cv.imshow("image",image)#显示原始图像cv.imshow("imageMove",imageMove)#显示变换后的图像cv.waitKey()cv.destroyAllWindows()在仿射变换的过程中,物体的转换都是在二维空间中完成的,但是如果物体在三维空间中发生了转换,这种转换一般叫投影变换。4.3投影变换4.3.1原理简介因为投影变换是在三维空间内进行的,对其进行修正十分困难。如果物体是平面的,通过二维投影变换对此物体三维变换进行模型化,这就是专用的二维投影变换,可由如下公式描述:cv2.getPerspectiveTransform(src,dst)来计算投影变换矩阵,·dst表示目标图像。·src表示原始图像。注意这里需要输入4组对应的坐标变换,src和dst分别是4×2的二维矩阵,其中每一行代表一个坐标,而且数据类型必须是32位浮点型,否则会报错。4.3.2Python实现类似于仿射变换,OpenCV提供了cv2.warpPerspective()函数来实现投影变换功能。cv2.warpPerspective(src,M,dsize[,dst[,flags[,borderMode[,borderValue]]]])·src表示原始的图像。·M表示投影变换矩阵。·dsize表示投影后图像的大小。·flags表示插值方式。·borderMode表示边界模式。·borderValue表示边界值。其使用方法与仿射变换相似,只是输入的变换矩阵变为3行3列的投影变换矩阵。

【例4-12】编写程序,实现投影变换的图像操作。

importcv2ascvimportnumpyasnpimage=cv.imread("F:/picture/panda.jpg")h,w=image.shape[:2]#读取图像的高和宽#原图像的4个需要变换的像素点src=np.array([[0,0],[w-1,0],[0,h-1],[w-1,h-1]],np.float32)#投影变换的4个像素点dst=np.array([[80,80],[w/2,50],[80,h-80],[w-40,h-40]],np.float32)M=cv.getPerspectiveTransform(src,dst)#计算出投影变换矩阵#进行投影变换image1=cv.warpPerspective(image,M,(w,h),borderValue=125)#显示图像cv.imshow("image",image)cv.imshow("image1",image1)cv.waitKey()cv.destroyAllWindows()因为投影变换矩阵是由4组对应的坐标决定的,所以通过投影变换可以将一幅图“放在”任何不规则的四边形中,而仿射变换却保持了线的平行性。图4-12作者杨淑莹敬上谢谢!第5章图像灰度变换

杨淑莹主要内容概述二值化和阈值处理灰度线性与分段线性变换灰度非线性变换直方图5.1.1图像增强对比度增强——电子显微镜下的花粉5.1.1图像增强去除噪声——电路板X光图像5.1.1图像增强突出细节——骨骼X光图像5.1.1图像增强图象不清晰、不突出是多种因素造成的:采集中未突出所需部分,有干扰(噪音、散斑、运动模糊等等)。目标是比原图像更适合于特定的应用,便于识别,人工或后继处理。不同的问题适合采用不同的方法,评价结果好坏没有统一的标准。图像增强:不考虑降质原因,关心有用信息,抑制次要部分,去干扰,增强对比度。不一定要去逼近原图像。复原技术:针对降质原因,设法补偿降质因素,尽可能逼近原始图像,恢复原图。二者有重叠部分:增强带有恢复性质,突出有用信息上,且是局部性恢复。图像增强空间域图像增强频率域灰度变换空域滤波直接灰度变换直方图修正法图像的代数运算直方图均衡化直方图规定化图像平滑图像锐化高通滤波低通滤波带通、带阻滤波灰度变换图像获取中,经常出现以下情况(1)成像时光照不足,使得整幅图像偏暗(2)成像时光照过强,使得整幅图像偏亮(3)照射源或光敏器件本身动态范围太小,使得整幅图像的有用信息集中在灰度中间级。图像灰度变换按一定变换关系,逐点改变原图像中每一个像素灰度值的方法。是图像增强处理技术中一种非常基础、直

温馨提示

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

评论

0/150

提交评论