2019-10-29 11:53:59 qq_32061503 阅读数 1279
  • Opencv4图像分割和识别实战课程

    本课程专注于使用opencv4 APIs来解决实际工作中经常遇到的图像分割、识别问题。精心挑选的8个例子涵盖了图片滤镜特效,验证码识别,条形码和二维码定位和识别,试卷答题线检测、瓶盖缺陷识别以及车道线检测等方面。课程中既有原理讲解也有实战代码演示,更重要的是每节课后都布置有作业来提供动手机会,使得学员们通过实操来更好地消化和掌握课堂知识。

    509 人正在学习 去看看 刘山

项目实战——基于计算机视觉的物体位姿定位及机械臂抓取(基本原理)

        首先让各位关注我的朋友们久等了,这个项目是我本科的毕业设计,写到四之后,我就一直忙于各种各样的事情,没有时间继续写了,十分抱歉。最近我终于抽出时间了 ,看了看之前写的,总觉得代码过多而原理过少。而且之前做项目的时候,走了不少弯路,甚至不少错路,这也写进去了。因此,在这里,我打算重开本专题,把我的毕设完完整整的讲明白。

        另外请各位读者朋友注意,这里面很多东西涉及到我的毕设,写作辛苦,请勿滥用,转载请务必注明出处!

项目研究目标

        设计一套基于双目视觉的系统,实现物体位姿自动识别与抓取功能。

项目研究内容

        研究设计以解决以下四点问题:
        1、如何利用两颗摄像头实现双目测距;
        2、标志物的设计及如何实现标志物的识别;
        3、物体位姿的判定方法;
        4、确定机械臂的运动学逆解,并实现抓取。

        好的,现在就让我们开始第一部分的介绍,这也是计算机视觉的核心问题:如何利用两颗摄像头实现双目测距。

双目测距原理

        如图 2.1-1 所示,分别以Ol和Or为坐标原点建立相机坐标系 Ol − ??????和 Or − ??????:


图2.1-1 摄像机位置模型

        其中:Ol为左摄像机光心,Or为右摄像机光心,世界坐标系O − XYZ与坐标 系Ol − ??????重合。P 为三维现实世界中的一点,在左右摄像机上分别成像于点P l和Pr。 假设左右摄像机完全平行(即:左右相机坐标系的 x 轴共线,yOz平面平行),平行间距为B,则从俯视图上看,如图 2.1-2 所示:


图 2.1-2 双目测距原理

        其中,f 为焦距,Z 为待测的深度(距离)信息,不难得出:


plpr=B(xlxr)|p_l p_r |=B-(x_l-x_r)

        根据相似三角形原理有:


plpr/B=(Zf)/Z|p_l p_r |/B=(Z-f)/Z

        因此,待测的深度(距离)信息为:


Z=fB/(xlxr)Z=fB/(x_l-x_r )

        如果要根据上述公式对三维世界中的点进行双目测距,需要确定的参数有:摄像机的焦距(f)、两个摄像机的平行间距(B)、同一个点在两个摄像机平面所成像的像素坐标。
因此,需要计算的信息有:
        1、两个摄像机的内在参数(焦距等参数);
        2、两个摄像机的外部参数(相对位姿等参数);
        3、进行立体匹配,确定同一个点在两个摄像机成像位置。
        但是,上述情况是双目摄像头是在理想情况下的测距计算方法,实际情况下还存在诸多误差因素,主要有:
        1、摄像机在生产的过程中,由于镜片的制造工艺和装配误差,会造成一定程度的畸变,使得成像出现偏差,严重影响后续的图像处理。因此需要进行畸变矫正,以保证成像一致;
        2、两个摄像机在外观上不可能完全平行,在x、y、z三个方向上都会存在差异,如果不经过计算,直接进行对应点的计算,就会存在很大的误差。因此需要确定两个相机的相对位姿信息,予以矫正。
        综上,实现双目测距的具体步骤如图 2.1-3 所示:


图2.1-3 测距步骤

        单目标定:计算摄像机的内部参数,消除相机的畸变;
        双目标定:计算两个摄像机的相对位姿信息,并进行矫正;
        立体匹配:将左右摄像机拍摄图像的对应像素点关联起来;
        计算深度:根据公式确定待测的深度(距离)信息。
        图2.1-4生动地描述了上述过程:


图2.1-4 处理步骤

        以上即为双目测距的主要原理的,那么下一部分就是单目标定了。

        Hunt Tiger Tonight
        2019-10-29
        联系方式:18398621916@163.com(请勿使用其他联系方式,谢谢!)
        PS:再次请各位读者朋友注意,这里面很多东西涉及到我的毕设,写作辛苦,请勿滥用,转载请务必注明出处!

2018-06-19 11:34:37 qq_34003774 阅读数 8125
  • Opencv4图像分割和识别实战课程

    本课程专注于使用opencv4 APIs来解决实际工作中经常遇到的图像分割、识别问题。精心挑选的8个例子涵盖了图片滤镜特效,验证码识别,条形码和二维码定位和识别,试卷答题线检测、瓶盖缺陷识别以及车道线检测等方面。课程中既有原理讲解也有实战代码演示,更重要的是每节课后都布置有作业来提供动手机会,使得学员们通过实操来更好地消化和掌握课堂知识。

    509 人正在学习 去看看 刘山
当今,由于数字图像处理和计算机视觉技术的迅速发展,越来越多的研究者采用摄像机作为全自主用移动机器人的感知传感器。这主要是因为原来的超声或红外传感器感知信息量有限,鲁棒性差,而视觉系统则可以弥补这些缺点。而现实世界是三维的,而投射于摄像镜头(CCD/CMOS)上的图像则是二维的,视觉处理的最终目的就是要从感知到的二维图像中提取有关的三维世界信息。
简单说来就是对机器人周边的环境进行光学处理,先用摄像头进行图像信息采集,将采集的信息进行压缩,然后将它反馈到一个由神经网络和统计学方法构成的学习子系统,再由学习子系统将采集到的图像信息和机器人的实际位置联系起来,完成机器人的自主导航定位功能。
机器视觉
(1)摄像头标定算法:2D-3D映射求参。
传统摄像机标定主要有 Faugeras 标定法、Tscai 两步法、直接线性变换方法、张正友平面标定法和 Weng迭代法。自标定包括基于 Kruppa 方程自标定法、分层逐步自标定法、基于绝对二次曲面的自标定法和 Pollefeys 的模约束法。视觉标定有马颂德的三正交平移法、李华的平面正交标定法和 Hartley 旋转求内参数标定法。
(2)机器视觉与图像处理:
a.预处理:灰化、降噪、滤波、二值化、边缘检测。。。
b.特征提取:特征空间到参数空间映射。算法有HOUGH、SIFT、SURF。
c.图像分割:RGB-HIS。
d.图像描述识别
(3)定位算法:基于滤波器的定位算法主要有KF、SEIF、PF、EKF、UKF等。
也可以使用单目视觉和里程计融合的方法。以里程计读数作为辅助信息,利用三角法计算特征点在当前机器人坐标系中的坐标位置,这里的三维坐标计算需要在延迟一个时间步的基础上进行。根据特征点在当前摄像头坐标系中的三维坐标以及它在地图中的世界坐标,来估计摄像头在世界坐标系中的位姿。这种降低了传感器成本,消除了里程计的累积误差,使得定位的结果更加精确。此外,相对于立体视觉中摄像机间的标定,这种方法只需对摄像机内参数进行标定,提高了系统的效率。
4.定位算法基本过程:
简单的算法过程,可基于OpenCV进行简单实现。
输入
通过摄像头获取的视频流(主要为灰度图像,stereo VO中图像既可以是彩色的,也可以是灰度的 ),记录摄像头在t和t+1时刻获得的图像为It和It+1,相机的内参,通过相机标定获得,可以通过matlab或者opencv计算为固定量。
输出
计算每一帧相机的位置+姿态
基本过程
1.获得图像It,It+1
2.对获得图像进行畸变处理
3.通过FAST算法对图像It进行特征检测,通过KLT算法跟踪这些特征到图像It+1中,如果跟踪特征有所丢失,特征数小于某个阈值,则重新进行特征检测
4.通过带RANSAC的5点算法来估计两幅图像的本质矩阵
5.通过计算的本质矩阵进行估计R,t
6.对尺度信息进行估计,最终确定旋转矩阵和平移向量
2020-03-13 00:11:23 zhjm07054115 阅读数 136
  • Opencv4图像分割和识别实战课程

    本课程专注于使用opencv4 APIs来解决实际工作中经常遇到的图像分割、识别问题。精心挑选的8个例子涵盖了图片滤镜特效,验证码识别,条形码和二维码定位和识别,试卷答题线检测、瓶盖缺陷识别以及车道线检测等方面。课程中既有原理讲解也有实战代码演示,更重要的是每节课后都布置有作业来提供动手机会,使得学员们通过实操来更好地消化和掌握课堂知识。

    509 人正在学习 去看看 刘山

非常完整的机器视觉研究方向总结,按技术原理、按应用场景进行划分。
转自:http://studyai.com/article/70f86341

PS: 若MarkDown不支持 TOC 和 TOCM 标题预览,可访问上述地址,分类结构更加清晰。

[TOCM]

图像与视频

图像处理

图像分类

单标签分类、多标签分类、细粒度分类

目标检测与分割

检测定位、语义分割、实例分割、全景分割

图像超分辨重建

图像恢复与增强

去雾、去雨、增强

图像问答和描述

图像与视频检索

视频内容分析

视觉目标跟踪

图神经网络GNN

生成对抗 GAN

AutoML & NAS

自动机器学习,神经架构搜索

网络压缩与轻量化

双目多目视觉

多源融合视觉

可见光成像、红外线成像、雷达波成像

医学影像分析

识别、重建、分割、配准

遥感与航空影像分析

工业视觉检测

缺陷检测、共件计数、尺寸测量

智能无人驾驶

车道线检测,交通标志检测、车辆检测、车牌号识别、车辆属性识别,ADAS等

SLAM与机器人

自主定位、导航与即时地图构建

三维点云和3D重建

人体技术相关

人体指纹识别

人体手势识别

人体姿态估计

人体动作检测

人体配装换装

人体服装搭配、穿衣风格定型、人体服装交换等

行人检测与识别

行人检测、行人重识别ReID、步态识别、人群计数

人脸技术相关

人脸美颜

人脸检测

人脸对齐

人脸验证

人脸检索

属性识别

表情识别

活体检测

人脸交换

虹膜识别

主要软件工具

OpenCV

TensorFlow

PyTorch

PIL

SKI-Image

Matlab

主要数据集

下图所示为一部分数据集
file

查看所有数据集信息,可公众号内回复 dataset,

每个数据集都提供了官方下载地址和简单的使用说明。

** 亲亲一扫,随时可查 **

file

2020-01-15 16:51:11 qq_41748260 阅读数 27
  • Opencv4图像分割和识别实战课程

    本课程专注于使用opencv4 APIs来解决实际工作中经常遇到的图像分割、识别问题。精心挑选的8个例子涵盖了图片滤镜特效,验证码识别,条形码和二维码定位和识别,试卷答题线检测、瓶盖缺陷识别以及车道线检测等方面。课程中既有原理讲解也有实战代码演示,更重要的是每节课后都布置有作业来提供动手机会,使得学员们通过实操来更好地消化和掌握课堂知识。

    509 人正在学习 去看看 刘山

完整源码链接:https://github.com/LamyaLi/cvLab

一、人脸检测技术原理

1、原理总说

  • 在检测到人脸并定位面部关键特征点之后,主要的人脸区域就可以被裁剪出来,经过预处理之后,馈入后端的识别算法。识别算法要完成人脸特征的提取,并与库存的已知人脸进行比对,完成最终的分类。

  • 本实验要做的就是人脸识别工作的第一步:人脸检测与框定

  • 主要利用的人脸特征是肤色,高宽比( “三庭五眼 ”规则高度和宽度比例应该在( 0.6, 2)内” ),眼部特征

  • 基于肤色的人脸分割主要分为三大部分:(1)预处理,针对噪声,光照带来的影响进行消除。(2)基于肤色模型的肤色分割。(3)连通域分析,人脸区域定位。

2、基于肤色高斯模型实现人脸区域分割提取的原理

  • 通过比较RGB,HSV,Ycbcr空间,发现Ycbcr和HSV空间在进行人脸肤色分割方面由于肤色范围紧密(如图),不易受光照其他物体干扰(基于肤色模型的,如果背景中有与人脸颜色类似的物体,且距离较近很容易产生干扰,影响人脸区域定位的准确性,这也是这一算法不能解决的问题)。但是RGB与HSV空间的转换相比RGB到Ycbcr空间转换来说较为复杂些,所以我们采用Ycbcr空间进行人脸肤色的建模与分割。

在这里插入图片描述

  • 肤色分布符合高斯分布(如图)

    在这里插入图片描述

    我们可以根据肤色的均值和方差建立肤色的高斯模型。 其中Cb,Cr的均值和协方差如下:

    Mean = [117.4316 148.5599]
    C = [97.0946 24.4700,24.4700 141.9966]

在这里插入图片描述

给定一个图像的一个像素点x,可以计算它是人皮肤的概率p(x),概率小于0.22,的点取灰度值0,否则取255,

得到一幅二值图像,其中白色的区域是人皮肤。

3、根据人脸特征筛选

  • 人脸区域定位,使用连通区域分析,获取二值图像最小外接矩形,即为人脸区域。 采用的是八邻域连通。
  • 高宽比( “三庭五眼 ”规则高度和宽度比例应该在( 0.6, 2)内” )不符合要求的去掉
  • 符合要求的区域也可能是胳膊,服饰之类的。我们在这个区域内找眼睛。在肤色的二值图像里,眼珠位置一般是黑色,所以我们将这个区域图像取反,再进行连通区域分析,按眼睛与脸的外接矩形尺寸比例筛选得到眼睛。如果在这个区域里能找到一个以上眼睛,判定这个区域是脸
  • 将脸区域框起来

二、人脸识别程序流程

根据以上原理分析,在适宜步骤处加上去噪,形态学处理,效果更好。总流程图如下:

在这里插入图片描述

三、实现步骤

1、利用肤色高斯模型完成人脸区域提取

流程图:

在这里插入图片描述

  • 转成ycrcb色彩空间,
img_ycrcb = cv2.cvtColor(img, cv2.COLOR_BGR2YCR_CB)

在这里插入图片描述

  • 高斯滤波去噪
y,cr,cb=cv2.split(img_ycrcb)
cr_gaussian=cv2.GaussianBlur(cr,(5,5),0)
cb_gaussian=cv2.GaussianBlur(cb,(5,5),0)
  • 阈值划分形成二值图像

    见原理分析中,利用肤色高斯模型,为简化计算,不需要每次都计算概率,取了一个,cr与cb的范围,能到达一样的效果

skin=np.zeros_like(cr)
for i in range(img.shape[0]):
    for j in range(img.shape[1]):
        if y[i][j]<70:
            skin[i][j] = 0
        elif cr_gaussian[i][j]>133 and cr_gaussian[i][j]<173 and cb_gaussian[i][j]>77 and cb_gaussian[i][j]<127:
            skin[i][j]=255
        else:
            skin[i][j]=0

2、人脸区域形态学处理

用开操作处理上步得到的,二值图像,可以强调眼部等细节,去掉一些噪声

kernel = cv2.getStructuringElement(cv2.MORPH_CROSS,(5,5))  
skin_opening = cv2.morphologyEx(skin, cv2.MORPH_OPEN, kernel)

在这里插入图片描述在这里插入图片描述

3、人脸区域的筛选和标定

  • 将连通区域标定,
skin_labeled= measure.label(skin_opening,connectivity = 2)##八邻域
dst=color.label2rgb(skin_labeled)

在这里插入图片描述

  • 先利用人脸高宽比筛选,淘汰掉特别小的框和高度比不符合“三庭五眼”的
for region in measure.regionprops(skin_labeled):

    min_row, min_col, max_row, max_col=region.bbox

    if (max_row - min_row)/img.shape[1]>1/15 and (max_col - min_col)/img.shape[0]>0.05:
        height_width_ratio = (max_row - min_row) / (max_col - min_col)
        if height_width_ratio>0.6 and height_width_ratio<2.0:
            if iseyes(skin_opening,min_row, min_col, max_row, max_col):
            #print(height_width_ratio)
                count_face = count_face+1
                img = cv2.rectangle(img, (min_col, min_row), (max_col, max_row), (0, 255, 0), 2)
  • 再将筛选后的区域,按同样的原理(连通区域标记处理),确定是否有眼睛特征,进一步筛选,符合条件的打框标定
def iseyes(img_two, minr, minc, maxr, maxc):
    ##如果区域内有两个以上的空框是眼睛
    part = np.zeros(((maxr - minr), (maxc - minc)))

    for i in range(minr, maxr):
        for j in range(minc, maxc):
            if img_two[i, j] == 0:
                part[i - minr, j - minc] = 255
            else:
                part[i - minr, j - minc] = 0

    part_labeled, num = measure.label(part, return_num=True, connectivity=1)  ##八邻域

    global img
    img_copy=img.copy()
    count=0
    for region2 in measure.regionprops(part_labeled):
        min_row2, min_col2, max_row2, max_col2 = region2.bbox
        w=max_col2-min_col2
        h=max_row2-min_row2
        total_w=maxc-minc
        total_h=maxr-minr
        w_ratio=w/total_w
        h_ratio=h/total_h
        if w_ratio<1/3 and h_ratio<0.2 and w_ratio>0.05 and h_ratio>1/30 and w>=h:
            count=count+1
            img_copy = cv2.rectangle(img_copy, (min_col2 + minc, min_row2 + minr), (max_col2 + minc, max_row2 + minr),(0, 255, 0), 2)
    print(count)
    if count>=1:
        img=img_copy
        return True
    return False

四、结果展示

在这里插入图片描述

在这里插入图片描述在这里插入图片描述

当一张图片脸数量很多时,效果可能不太好,因为,筛选过程中,为去除杂质,将尺寸与图像尺寸比例较小的框去掉了,如图

在这里插入图片描述

2020-03-16 17:31:35 LG1259156776 阅读数 53
  • Opencv4图像分割和识别实战课程

    本课程专注于使用opencv4 APIs来解决实际工作中经常遇到的图像分割、识别问题。精心挑选的8个例子涵盖了图片滤镜特效,验证码识别,条形码和二维码定位和识别,试卷答题线检测、瓶盖缺陷识别以及车道线检测等方面。课程中既有原理讲解也有实战代码演示,更重要的是每节课后都布置有作业来提供动手机会,使得学员们通过实操来更好地消化和掌握课堂知识。

    509 人正在学习 去看看 刘山

[计算机视觉] Canny算子边缘检测

##1. Canny边缘检测基本原理

(1)图象边缘检测必须满足两个条件:一能有效地抑制噪声;二必须尽量精确确定边缘的位置。
(2)根据对信噪比与定位乘积进行测度,得到最优化逼近算子。这就是Canny边缘检测算子。
(3)类似与Marr(LoG)边缘检测方法,也属于先平滑后求导数的方法。
##2. Canny边缘检测算法:

step1:用高斯滤波器平滑图象;
step2:用一阶偏导的有限差分来计算梯度的幅值和方向;
step3:对梯度幅值进行非极大值抑制;
step4:用双阈值算法检测和连接边缘。
边缘feature,是属于local feature,即图像的局部特征,边缘的特点是什么呢?上面一篇文章中已经讲述过,但还得提一下,就是出现在梯度大的地方,因为像素的局部性说明的是像素通常倾向于与其近邻像素值相近,而不想近的地方大至属于边缘或者噪声等。所以可以用梯度对这种边缘信息进行提取,但是务必要有效的抑制噪声。通常边缘检测可通过先平滑,后求梯度或导数,也可以先通过导数,然后再进行平滑。从算子的角度分析,两种操作作用先后是没有区别的。

详细内容:https://pengyizhang.github.io/2020/03/16/canny/

视觉测量资料

阅读数 149

没有更多推荐了,返回首页