图像基础算法学习笔记
目录
概要
参考书籍:《机器视觉与人工智能应用开发技术》 廖建尚,钟君柳 出版时间:2024-02-01
- 图像采集
- 图像标注:绘制直线、矩阵、圆形、椭圆和多边形
- 图像灰度转换:灰度化、二值化等图像转换方法
- 图像几何变换:图像旋转、图像镜像、图像缩放、图像透视等方法
- 图像边缘检测:Sobel算子、Scharr算子、Laplacian算子、Canny算子等边缘检测算子
- 形态学转换:图像腐蚀、膨胀、开运算、闭运算等形态学转换方法
- 图像轮廓提取:提取轮廓的凸包、外接矩形、最小外接矩形、最小外接圆等方法
- 直方图均衡:绘制直方图、均衡化直方图、自适应均衡化直方图等方法
- 模板匹配:模板匹配方法
- 霍夫变换:直线检测、圆检测等方法
- 图像矫正:图像矫正方法
- 图像添加文字和水印:图像添加文字和水印的方法
- 图像去噪:方框滤波、均值滤波、高斯滤波、高斯双边滤波、中值滤波等消除噪声方法
一、图像采集
图像的基本概念
- 图像是由一个个点组成的,每一个点即一个像素。像素是图像的基本单元,每个像素都由明确数值来表示当前坐标点的颜色或灰度。
- 在数字设备中,图像是由像素组成的二维或三维矩阵,常见的图片格式包括:JPEG、PNG、BMP等。
- 视频则是由多张图片组成的序列,由于人眼存在视觉暂留效应,当图像以每秒超过24帧的速率显示时,静态画面会呈现出平滑连续变化的效果,这样的连续画面即为视频。常见的视频格式包括AVI、MP4、MOV等。
- 图像分辨率,是指每英寸长度内有多少个像素,一张1920x1080的图像,1920是指该图像额宽度方向上有1920个像素,1080是指该图像的高度方向上有1080个像素。
OpenCV视频处理接口:VideoCapture;
图像处理接口:imread、imshow、imwrite
二、图像标注
画直线(cv2.line):根据给出的起点和终点绘制两点之间的线条
画矩形(cv2.rectangle):根据矩形的左上角位置坐标和右下角位置坐标绘制矩形
画圆形(cv2.circle):根据给定的圆心和半径绘制圆
画椭圆(cv2.ellipse)
四、图像几何变换
图像旋转(cv2.warpAffine):以图像的中心为原点旋转一定的角度,即将图像上的所有像素都旋转一个相同的角度。图像经过旋转之后,其位置会发生变化,旋转后既可以把转出显示区域的图像截去,也可以扩大显示区域的图像范围以显示图像的全部内容。
图像镜像(cv2.flip):是一种与人们日常生活密切相关的变换,图像镜像是指原始图像相对于某一参照面旋转180°的图像。镜像变换又称为对称变换,分为水平镜像、垂直镜像、对角镜像等。镜像变换后,图像的宽和高不变。
水平镜像:以图像的垂直中轴线为中心,将图像分为左右两部分后进行对称变换。
垂直镜像:以图像的水平中轴线为中心,将图像分为上下两部分后进行对称变换。
对角镜像:将图像以水平中轴线和垂直中轴线的交点为中心进行对称交换,相当于将图像先后进行水平镜像和垂直镜像。
图像缩放(cv2.resize):将指定的图像在x方向和y方向按相同的比例进行缩放,从而获得一幅新的图片,称为全比例缩放。
如果x方向和y方向的缩放比例不同,则图像的比例缩放会改变原始图像像素间的相对位置,产生几何畸变。
在图像缩放过程中,涉及图像数据的删除与增加。若比例缩放所产生的图像中的像素在原始图像中没有相对应的像素时,特别在图像放大时,则需要考虑如何在放大后的空隙中加入新的图像颜色数据,增加颜色数据的方法主要根据周围相邻像素的颜色值进行插值计算。主要有3种插值方法:最近邻插值法、双线性插值方法、三次内插法。
- 最近邻插值法:新增加像素的灰度等于距它最近的像素的灰度。
- 双线性插值方法:新增加像素的灰度由其周围4个像素的灰度决定。
- 三次内插法:新增加的像素不仅考虑直接邻近点对它的影响,还需要考虑周围16个邻近灰度对它的影响。
五、图像边缘检测
边缘检测是图像处理和计算机视觉中的基本应用,边缘检测的目的是标识数字图像中亮度变化明显的点。
图像属性的显著变化通常反应了属性的重要事件和变化,通过图像边缘检测可以大幅地减少数据量,并剔除不想关的信息,保留了图像重要的结构属性。
经典的图像边缘检测算子有:Sobel算子、Scharr算子、Laplacian算子、Canny算子。
Sobel算子
一种离散的微分算子,该算子结合了高斯平滑和微分求导运算,利用局部差分寻找边缘,计算结果是梯度的一个近似值。Sobel算子利用周围邻域8个像素来估计中心像素的梯度,但Sobel算子认为靠近中心的像素应该给予更高的权重。Sobel算子的边缘检测卷积核如下图:
Scharrt算子
Scharr算子与Sobel算子的运算方式类似,分别计算x方向或y方向的图像差分。可以说,Scharr算子是Sobel算子的改进。Scharr算子运算准确度更高、效果更好。Scharr算子的边缘检测卷积核如下图:
Laplacian算子
Laplacian算子是图像邻域内像素灰度差分计算的基础,是一种通过二阶微分推导图像邻域增强算法。
Laplacian算子的基本思想是当邻域的中心像素灰度低于它所在邻域内的其他像素的平均灰度时,此中心像素的灰度应该进一步降低;当高于时进一步提高中心像素的灰度,从而实现锐化处理。二阶微分卷积核如下图:
Canny边缘检测
Canny边缘检测是当今最流行的边缘检测方法之一,非常强大和灵活,该方法主要过程如下:
- 降噪。原始图像的像素通常会导致噪声边缘,因此在计算边缘之前减少噪声很重要。在Canny边缘检测中,高斯模糊过滤器用于从本质上去除或最小化可能导致不良边缘的不必要细节。
- 计算图像的强度梯度。图像平滑(模糊)后,先使用Sobel算子进行水平和垂直过滤,再使用这些过滤操作的结果来计算每个像素的强度梯度。
- 抑制假边。在降低噪声和计算强度梯度后,使用一种称为边缘非最大抑制的技术来过滤掉不必要的像素(实际上可能并不构成边缘),因此要在正负梯度方向上将每个像素与其相邻的像素进行比较。如果当前像素的梯度大于其相邻像素,则保持不变;否则将当前的梯度设置为零。
- 滞后阈值。在Canny边缘检测的最后中,对梯度与两个阈值进行比较。
六、形态学转换
常用的形态学转换有四种:腐蚀、膨胀、开运算、闭运算。
腐蚀(cv2.erode):一种消除边界点,使边界向内部收缩的过程。腐蚀的目的是把目标区域范围“变小”,可以用来消除小且无意义的物体。
膨胀(cv2.dilate):膨胀和腐蚀是一对相反的操作,将与物体接触的所有背景点合并到该物体中,使物体边界向外部扩张。
开运算(cv2.morphologyEx):先腐蚀后膨胀的过程称为开运算,用来消除小物体、在纤细点处分离物体,可以在不明显改变物体表面积的情况下平滑物体的边界。一般会使对象的轮廓变得光滑、断开狭窄的间隙和消除细的突出物。
闭运算(cv2.morphologyEx):先膨胀后腐蚀的过程称为闭运算,用来填充物体内的细小空洞、连接邻近物体,可以在不明显改变物体表面积的情况下平滑物体的边界。
原文地址:https://blog.csdn.net/jerry201108/article/details/143802805
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!