计算机视觉算法与应用汇总

简介: 计算机视觉算法与应用汇总

计算机视觉概述


计算机视觉,与语音识别、自然语言理解,并称为人工智能的三大主要技术领域,也是AI技术落地产业化最广泛的领域。


计算机视觉主要分为2D视觉和3D视觉两大研究领域,2D视觉的研究内容包括:目标识别、目标跟踪、视频内容理解等;3D视觉的研究内容包括:基于图像的三维重建、目标三维姿态估计等。


当下2D视觉领域几乎被基于学习的方法统治,其中深度学习在2D视觉领域中发挥着重要的角色,许多视觉应用都是基于深度学习算法改进实现,尤其是CNN卷积神经网络,许多的算法模型都是基于CNN进行改进增加网络结构层来实现的。


如下图所示,2D视觉领域中,通过基础技能构建不同结构的神经网络,来实现中间技能层的核心模块,进而结合实际应用,实际的数据集,开发出不同的视觉应用。


9c8894826f8e253f4de9b51e73fd0e6e.png

中间技能层算法汇总


这里不同中间层的实现,更多采用深度学习神经网络算法实现。


图像分类

f0d44b224f1240d8c64242d0f1f9aa51.png


二分类:判断图片是否包含人

常用算法:SVM

多类别分类:比如鸟类识别

常用算法:LetNet、AlexNet、VGGNet系列、GoogLeNet、ResNet系列、Inception系列、DenseNet系列

多标签分类:每个类别包含多种属性的标签,比如对于服饰的分类,服饰是由上衣服颜色、纹理、袖长等标签组合

常用算法:R-CNN&LSTM


数据集


bc65c7bf65cdf75f1baa3a45d7edaf99.jpg


图像分割


图像分割顾名思义,对输入的视觉图像分割成不同的片段,类似于美图秀秀的抠图以简化应用于图像分析。

这里科普一下做图像分析的流程

图像检测:对图像中的目标进行检测,并识别出是人还是动物等类别,并用矩形画出检测区域

分割:识别矩形部分的对象,并理解分割对象。



1f4f147aeae82838a274d8f1f732bca0.png

普通分割:将图像中不同类型不同物体的像素区域分开,例如前景后景分割

常用方法:普通分割在平时的图像处理应用中还是会用到一些,常用方法有,阈值处理分割、k-means聚类、基于直方图、边缘检测、GrabCut算法

语义分割:在普通分割基础上,分类出每一块区域的语义,即在图像中标注每个区域是什么物体


175d48860f57491ea9516f1f474c805e.png


实例分割:在语义分割基础上,由于图像中可能存在多个一种类型的物体,比如一个图像有三只狗,实例分割,对画面中的狗进行编号1,2,3。

e43cfcf99c95a92b0353e0b547d07df6.png


  • 从上面的分割的介绍看实例分割是功能最全的分割方法,因此只枚举对实例分割的常用算法。

常用算法:FCN、DeepLab、Pyramid Scene Parsing Network、Mask R-CNN、U-Net


图像生成与转换


深度学习的另一个主要应用是生成模型(Generative Model),所谓生成模型,就是给定一组随机数,根据随机数来生成服从训练数据分布的数据,在计算机视觉中的一个重要应用就是给定一组图像,构造出一个模型,在这组图像上进行训练,这个模型能够生成类似于给定训练图像中实例的图像。



图像转换,图像到图像的转换被定义为将一个场景的可能表示转换成另一个场景的问题,例如图像结构图映射到RGB图像,或者反过来。该问题与风格迁移有关。


常用算法:变分自编码器(Variational AutoEncoder,VAE)和生成对抗网络(Generative Adversarial Network,GAN)二种。


0363ec6174a6c1c71100e4e80498ba61.png

图像重构(图像修复)


图像重构就是对图像中缺少的像素进行填补,并基于背景的像素信息进行重建的技术。有点像外面店里做老照片修复。

e41d17e405ce15a04c4892788d7b3dce.png


常用算法如下图所示:

8d1927db6d78e949c214bd0a3c2b1ff3.png

目标检测


目标检测也叫做目标提取,基于目标几何和统计特征的图像分割,大白话说,就是基于图像,可以识别出图像中存在的物体和人,并告诉我们这个识别出的是啥子。


传统目标检测技术可以分为三个步骤:首先选择图像中的候选区域,之后提取Haar、HOG等视觉特征,最后基于支持向量机模型、RF模型等常用分类器进行分类。


下图是一张目标检测领域算法发展

4321d3849510c6ef06235735b5f587f2.jpg

随着深度学习技术发展,可以自动学习图像特征

14bdc518431f03a0606cc566313bbe22.png

基于区域提取两阶段:之所以叫两阶段,是因为这几种算法的检测处理过程为两个过程。

1.基于图片提出若干可能包含物体的区域

2.提出这些区域运行时表现好点分类网络,得出每个区域的物体类别

常用算法:R-CNN、SPP-Net、FAST R-CNN、FASTER R-CNN

基于回归单阶段:表示没有中间区域检测的过程,直接从图片进行预测分类。

常用算法:YOLO系列、SSD


目标跟踪


目标跟踪实现分为生成式基于相关滤波的传统opencv实现与判别式深度学习实现二种


生成式:在当前帧对目标区域建模,下一帧寻找与模型最相似的区域就是预测位置,比较著名的有卡尔曼滤波,粒子滤波,mean-shift等。

f15c04e13ae30db4f61ff86200ec615e.png

这里详细介绍一下帧差分法,备注:帧差分法是检测物体是否发生运动行为的方法。


  1. 提取二帧连续图像
  2. 灰度化
  3. 高斯滤波(可选)
  4. cv2.absdiff求二帧图像差异部分
  5. 阈值处理
  6. 腐蚀膨胀
  7. 找出边框cv2.findContours
  8. 获取边框坐标,画出矩阵


判别式:当前帧以目标区域为正样本,背景区域为负样本,机器学习训练分类器,下一帧用训练好的分类器找最优区域。


2018年的VOT,基于全卷积孪生网络(SiamNet)的方法大崛起,凭借超越DCF方法的准确度和端到端训练的优势,成为目标追踪新的研究方向。


下图是GitHub上发布的2018VOT系统分支结构,包含了所有的目标跟踪算法。

风格迁移


它主要是通过神经网络,将一幅艺术风格画(style image)和一张普通的照片(content image)巧妙地融合,形成一张非常有意思的图片。


大白话说,图像往往由风格与内容组成,比如我们常常说画家的画风是怎么样的,毕加索的画风、动漫的画风。

风格迁移就是保留一张图片的内容(物体,人物),用另一张图片的色彩画图风格去填充


54ecae8ea5b8449f5746a2ca736b6b6d.png


风格迁移原理:

首先我们需要获取一张内容图片和一张风格图片;然后定义二个度量,一个度量值为内容度量值,另一个度量为风格度量值,其中内容度量值衡量二个图片之间的内容差异程度,风格度量衡量图片之间风格差异程度,最后建立神经网络模型,对内容图片中的内容和风格图片的风格进行提取,以内容图片为基准将其输入建立的模型中,不断调整内容度量值和风格度量值,让它们趋近于最小,最后输出的图片就是内容和风格融合的图片。


风格迁移大致可以分成四个步骤(图片的内容与风格提取是基于CNN算法,一般认为图像在CNN网络中,卷积层较低的层描述了图像的具体视觉特征(即纹理和颜色等),较高层特征是较为抽象的图像内容描述):


内容损失

内容损失选择通常是CNN卷积层高层的特征,比较两幅图像的内容相似性。

风格损失

风格损失选择通常是CNN卷积层低层的特征,比较两幅图的风格相似性

总损失

内容+风格的相似度评价

训练

计算总损失的模型,可以选择VGG系列模型


超分辨率


超分辨率是从给定的低分辨率(LR)图像恢复高分辨率(HR)图像的过程。

常用算法:SRCNN


人体姿态估计


体姿态骨架以图形格式表示人的活动。

本质上,它是一组坐标,将坐标组合起来就可以描述人的姿态。骨架中的每个坐标都称为关键点(或关节)。两个关键点之间的有效连接称为肢体。请注意,并非所有关键点组合起来都会产生有效的配对(肢体)。

690fed99760a865a2d86f0a6b4071d36.png

单人姿态估计


无须深度学习,可以使用opecv&mediapipe包实现

代码如下:


import cv2
import mediapipe as mp
import time
mpDraw = mp.solutions.drawing_utils
mpPose = mp.solutions.pose
pose = mpPose.Pose()
cap = cv2.VideoCapture('PoseVideos/3.mp4')
pTime = 0
while True:
    success, img = cap.read()
    imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    results = pose.process(imgRGB)
    # print(results.pose_landmarks)
    if results.pose_landmarks:
        mpDraw.draw_landmarks(img, results.pose_landmarks, mpPose.POSE_CONNECTIONS)
        for id, lm in enumerate(results.pose_landmarks.landmark):
            h, w, c = img.shape
            print(id, lm)
            cx, cy = int(lm.x * w), int(lm.y * h)
            cv2.circle(img, (cx, cy), 5, (255, 0, 0), cv2.FILLED)
    cTime = time.time()
    fps = 1 / (cTime - pTime)
    pTime = cTime
    cv2.putText(img, str(int(fps)), (70, 50), cv2.FONT_HERSHEY_PLAIN, 3,
                (255, 0, 0), 3)
    cv2.imshow("Image", img)
    cv2.waitKey(1)


代码也可以做图像姿态估计,只需要修改获取视频图像的那段代码即可

多人姿态估计

自上而下的方法

自顶向下的算法先从图像中检测出所有人,随后利用单人姿态估计的方法对所有人进行姿态估计。自顶向下算法的缺点是算法运行效率随着人数增加而降低,且部分被遮挡的人无法被检测,精度不高。

如下图中的上半示意图所示。

自下而上的方法:。

自底向上的算法,先检测出所有人的骨点,再将骨点进行连接形成图,最后通过图优化的方法剔除错误的连接,实现多人姿态估计。自底向上算法的优点是运行时间不随人数增加而线性增加,更有利于实时多人姿态估计。

如下图中的下半示意图所示。





目录
打赏
0
0
0
0
31
分享
相关文章
基于 C++ 语言的迪杰斯特拉算法在局域网计算机管理中的应用剖析
在局域网计算机管理中,迪杰斯特拉算法用于优化网络路径、分配资源和定位故障节点,确保高效稳定的网络环境。该算法通过计算最短路径,提升数据传输速率与稳定性,实现负载均衡并快速排除故障。C++代码示例展示了其在网络模拟中的应用,为企业信息化建设提供有力支持。
54 15
监控局域网其他电脑:Go 语言迪杰斯特拉算法的高效应用
在信息化时代,监控局域网成为网络管理与安全防护的关键需求。本文探讨了迪杰斯特拉(Dijkstra)算法在监控局域网中的应用,通过计算最短路径优化数据传输和故障检测。文中提供了使用Go语言实现的代码例程,展示了如何高效地进行网络监控,确保局域网的稳定运行和数据安全。迪杰斯特拉算法能减少传输延迟和带宽消耗,及时发现并处理网络故障,适用于复杂网络环境下的管理和维护。
MapReduce在实现PageRank算法中的应用
总结来说,在实现PageRank算法时使用MapReduce能够有效地进行大规模并行计算,并且具有良好的容错性和可扩展性。
120 76
|
11天前
|
基于 PHP 语言的滑动窗口频率统计算法在公司局域网监控电脑日志分析中的应用研究
在当代企业网络架构中,公司局域网监控电脑系统需实时处理海量终端设备产生的连接日志。每台设备平均每分钟生成 3 至 5 条网络请求记录,这对监控系统的数据处理能力提出了极高要求。传统关系型数据库在应对这种高频写入场景时,性能往往难以令人满意。故而,引入特定的内存数据结构与优化算法成为必然选择。
21 3
从第十批算法备案通过名单中分析算法的属地占比、行业及应用情况
2025年3月12日,国家网信办公布第十批深度合成算法通过名单,共395款。主要分布在广东、北京、上海、浙江等地,占比超80%,涵盖智能对话、图像生成、文本生成等多行业。典型应用包括医疗、教育、金融等领域,如觅健医疗内容生成算法、匠邦AI智能生成合成算法等。服务角色以面向用户为主,技术趋势为多模态融合与垂直领域专业化。
JavaScript 中通过Array.sort() 实现多字段排序、排序稳定性、随机排序洗牌算法、优化排序性能,JS中排序算法的使用详解(附实际应用代码)
Array.sort() 是一个功能强大的方法,通过自定义的比较函数,可以处理各种复杂的排序逻辑。无论是简单的数字排序,还是多字段、嵌套对象、分组排序等高级应用,Array.sort() 都能胜任。同时,通过性能优化技巧(如映射排序)和结合其他数组方法(如 reduce),Array.sort() 可以用来实现高效的数据处理逻辑。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
通过Milvus内置Sparse-BM25算法进行全文检索并将混合检索应用于RAG系统
阿里云向量检索服务Milvus 2.5版本在全文检索、关键词匹配以及混合检索(Hybrid Search)方面实现了显著的增强,在多模态检索、RAG等多场景中检索结果能够兼顾召回率与精确性。本文将详细介绍如何利用 Milvus 2.5 版本实现这些功能,并阐述其在RAG 应用的 Retrieve 阶段的最佳实践。
通过Milvus内置Sparse-BM25算法进行全文检索并将混合检索应用于RAG系统
企业监控软件中 Go 语言哈希表算法的应用研究与分析
在数字化时代,企业监控软件对企业的稳定运营至关重要。哈希表(散列表)作为高效的数据结构,广泛应用于企业监控中,如设备状态管理、数据分类和缓存机制。Go 语言中的 map 实现了哈希表,能快速处理海量监控数据,确保实时准确反映设备状态,提升系统性能,助力企业实现智能化管理。
39 3
从第九批深度合成备案通过公示名单分析算法备案属地、行业及应用领域占比
2024年12月20日,中央网信办公布第九批深度合成算法名单。分析显示,教育、智能对话、医疗健康和图像生成为核心应用领域。文本生成占比最高(57.56%),涵盖智能客服、法律咨询等;图像/视频生成次之(27.32%),应用于广告设计、影视制作等。北京、广东、浙江等地技术集中度高,多模态融合成未来重点。垂直行业如医疗、教育、金融加速引入AI,提升效率与用户体验。
|
2月前
|
探讨组合加密算法在IM中的应用
本文深入分析了即时通信(IM)系统中所面临的各种安全问题,综合利用对称加密算法(DES算法)、公开密钥算法(RSA算法)和Hash算法(MD5)的优点,探讨组合加密算法在即时通信中的应用。
29 0

热门文章

最新文章