传统的计算机视觉框架:
SimpleCV
BoofCV
Dlib
JavaCV
深度学习计算机视觉框架
Caffe
Tensorflow
Pytorch
Paddlepaddle
Keras
深度视觉计算机视觉框架
OpenVINO
TensorRT
onnxruntime
Deepface
YOLO/DarkNet
mmdetection
Paddle-detection/seg/ocr
当前业界主流框架应用
计算机视觉方向:Halkon/VisionPro/Mil/OpenCV
深度学习方向: tensorflow/pytorch/paddlepaddle + openvino/tensorRT/onnxruntime
opencv应用
import cv2 as cv 导入opencv支持
import numpy as np 导入Numpy支持
imread函数 读取图像
imshow函数 显示图像
加载图像的通道顺序
计算机图像理解
图像理解
灰度图像 - 单通道
彩色图像 - 三通道
图像色彩空间转换
图像色彩空间
RGB色彩空间,设备独立
HSV色彩空间,对计算机友好,区分各种色彩
YCrC吧, Y分量表示信息, CrCb可以被压缩
RGB是计算机显示器的标准支持色彩系统,RGB的取值范围0~255
HSV取值范围H: 0~180, SV:0~255
图像色彩转换
从一个色彩空间转换到另外一个色彩空间
信息传递与损失
过程可逆与不可逆
图像对象的创建与赋值
图像对象属性
图像宽高 image.shape
图像深度 image
图像数据类型 image.dtype
图像通道 image.shape
如何加载不同通道的图像
OpenCV-Python支持的数据类型
np.uint8
np.float32
np.int32
np.int64
图像像素
理解像素
像素实际大小:dpi x inches = 像素总数
术语dpi: 每英寸的点数目, 96dpi - 针对打印
术语ppi: 每英寸的像素数目 - 针对图像分辨率
灰度图像排序(单通道)
彩色图像排序(三通道)
像素访问与遍历
像素便利本质就是numpy数组访问
假设变量image
获取图像维度信息: image.shape
图像访问像素: image【row, col】
图像赋值像素: image【row, col】 = (b,g,r)
像素读写:
读写像素(彩色图像):
b ,g , r = image [ row, col ]
image[row, col] = ( 255-b, 255-g, 255-r )
读写像素(灰度图像):
pv = image【row,col】
image【row, col】 = 255 - pv
像素算术操作
加法
img1【row, col】 + img2[ row, col ] = dst[row, col ]
Mask参数
创建窗口函数
调整图像亮度
RGB值表示亮度
RGB(0,0,0)黑色 RGB(255,255,255)白色
通道分离与合并
RGB/HSV彩色通道分离为单独通道
争对不同通道使用不同阈值提取mask
提取其中一个通道的信息
像素值统计-均值
均值 - 单通道为例
图像均值(5+3+4+9+6+7+8+2+3)/ 9 = 5.222
图像应用mask之后的均值 (3+6+2)/3 = 3.6666
像素值统计-方差
方差用来衡量数据的离散程度,方差越大,数据的离散程度越高。
说明数据的分布越分散,像素值之间的差异性更大,图像的对比度可能会更加明显。方差较大的图像可能包含更多的细节和变化。
计算文本区域大小
函数计算文本区域大小函数
getTextSize (
text, #表示文本信息
fontFace, #表示字体类型
fontScale, #表示字体大小
thickness #表示线宽
)
python中的随机数函数
Numpy中的随机函数
randiom.randint(low,high=None,size=None,dtype=int)
Low表低值, high表示高值, size表示维度, dtype表示类型
np.random.randint(256)
np.random.randint(0,256) 表示生成0~255个随机数,类型是int
随机噪声图
cv.randn(dst, mean, stddev) 生成目标图像dst、噪声均值mean、噪声方差stddev
数据转换
Imread读入默认是uint8, 转换为float32,通过imshow显示之前, 必须归一化到【0~1】之间。
图像几何变换
cv.warpAffine(src, M, dsizel dstl, flags[borderModel, borderValue]])-> dst
src表示输入图像,M表示2x3变换矩阵,dsize表示目标图像dst的大小,支持平移变换、放缩变换、旋转变换。
变换矩阵
放缩矩阵
旋转矩阵
获取旋转
旋转矩阵获取cv..getRotationMatric2D
Center表示旋转中心,angle表示度数,大于零表示逆时针旋转,scale表示放缩尺度大小
视频标准与格式
图像直方图
直方图均衡化
作用:提升对比度、灰度图像支持
作为一种图像增强技术,其目的是通过重新分布图像的像素值,使得图像的直方图更均匀,从而增强图像的对比度,使图像更加清晰和易于分析。这可以有效地增强图像的细节和纹理,改善图像的视觉效果。
例如在医学图像处理中用于增强影像质量和凸显病变部位,还可以用于改善监控摄像头拍摄的图像质量,提高图像的清晰度和对比度。此外,直方图均衡化也常用于数字图书馆、印刷和出版领域的图像处理,以及在计算机视觉、模式识别和机器学习等领域中作为图像预处理的一项重要技木。
图像卷积
卷积核也可以称为权重
均值卷积的核心思想是通过取周围像素的平均值来替代当前像素的值,从而减轻图像的噪声和细节,使得图像变得更加平滑。均值卷积通常用于图像降噪、模糊化处理以及图像特征提取等方面。
卷积核跟锚定位置
锚定位置在想处理中是指用于确定某个特定位置的参考点或标记点。在目标检测任务中,算法通常会先在图像中生成一些候选框(bounding boxes),然后通过将这些候选框与真实目标框进行比较,来确定目标的位置。
在目标跟踪任务中,锚定位置可以用于跟踪目标在视频序列中的运动轨迹。通过在每一帧图像中锚定位置,算法可以准确地跟踪目标地位置变化,实现目标的连续跟踪。也可适用于图像配准
卷积的边缘填充
在进行卷积操作时,通常会涉及到边缘填充问题。边缘填充是指在及逆行卷积操作时,为了保持输出特征图大小与输入特征图大小一致,需要在输入特征图的边缘进行填充操作。
- 零填充(Zero Padding):在边缘填充位置填充值为0的像素。
- 恒定填充(Constant Padding):在边缘填充位置填充固定的常数值。
- 复制填充(Replication Padding):在边缘填充位置复制邻近像素的值进行填充。
卷积模糊函数
高斯模糊
均值模糊与高斯模糊
高斯模糊,图像中间的权重系数最大
像素重映射
把像素点P(x,y)重新银蛇到一个新的位置
像素重映射 (Pixel Remapping)是指将图像中的像素值根据一定的规则重新映射或转换的过程。在图像处理中,像素重映射常用于图像增强、颜色校正、对比度调整。
- 灰度级映射:将图像的灰度级从一个范围映射到另一个范围,用于增加图像的对比度和亮度。
- 伽马校正:通过非线性的伽马函数将输入图像的像素值转换,常用于调整图像的亮度和对比度。
- 颜色空间转换:将图像从一种颜色空间转换到另一种颜色空间,如RGB到HSV、RGB到Lab等。
- 直方图均衡化:通过调整图像的直方图来增加图像的对比度和视觉效果。
通过像素重映射,可以改变图像的外观、增强图像特征、调整图像质量等,从而使图像更符合人眼的感知。
图像二值化
0与1
全局二值化
全局二值化是图像处理中一种常用的阈值分割方法,其基本思想是将图像转换为二值图像,即将图像中的像素值根据一个全局阈值进行划分为黑色和白色两种像素值。这种方法适用于图像中的目标和背景的对比度比较大的情况。
全局二值化有以下几个方面:
1、将彩色的图像转换为灰度图像
2、选择一个合适的全局阈值,通常可以使用一些自适应的方法(如大津法)
3、将灰度图像中像素值大于阈值的像素设置为白色,像素值小于等于阈值的设置为黑色
适用于一些简单的图像分割任务。然而,对于一些复杂图像中目标和背景对比度较小的情况,全局二值化可能无法很好地分割目标。在这种情况下,可以考虑使用局部二值化或其他图像分割方法来处理。
自适应二值化
自适应二值化(Adaptive Thresholding)是一种图像处理技术,与全局二值化相比,它能够根据每个像素的局部特性选取不同的阈值,从而更好地分割图像中的目标物体。自适应二值化可以在处理光照不均匀、背景复杂、目标区域尺寸变化等情况下取得更好的效果。
在自适应二值化中,通常将图像分割成多个区域,每个区域内的像素根据其局部特性选取不同的阈值进行二值化。常见的自适应二值化方法包括:
- 局部均值法:计算每个像素周围邻域的平均灰度值,以此作为阈值进行二值化。
- 局部加权平均法:对每个像素周围邻域内的像素进行加权求和,再根据加权和确定阈值进行二值化。
- 局部高斯加权法:使用高斯滤波器对图像进行平滑处理,然后通过计算平滑后的图像的局部均值作为阈值进行二值化。
接下来讲解实现步骤:
-
将彩色图像转换为灰度图像:通过将RGB通道的值进行加权平均来实现,得到每个像素的灰度值。
-
将图像分割成多个局部区域:将图像分割成多个大小相等或不等的局部区域,每个区域内的像素将根据其局部特性选取不同的阈值进行二值化。通常可以使用滑动窗口的方式或其他分割方法来实现这一步骤。
-
计算每个局部区域的阈值:对于每个局部区域,可以采用不同的方法来计算阈值。常见的方法包括局部均值法、局部加权平均法和局部高斯加权法。具体选择哪种方法可以根据实际情况和需求进行调整。
-
对每个局部区域进行二值化:根据计算得到的阈值,对每个局部区域内的像素进行二值化处理。将像素灰度值大于局部阈值的像素设置为白色,小于等于局部阈值的像素设置为黑色,得到局部二值化的结果。
-
合并局部二值化的结果:将所有局部区域的二值化结果合并起来,得到最终的自适应二值化图像。