关于人工智能

人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器。计算机视觉是人工智能的一个分支,它研究如何使人工系统从图像或多维数据中“感知”的科学。

人类技术发展历史

  • 人类历史就是一部技术发展的历史,经历了这么几个阶段:
  • 1万年前人类开始种植粮食,进入农业阶段
  • 十七世纪后期的工业革命,大规模的机器生产代替手工作坊,解放了人类的双手和双脚
  • 20世纪7/80年代开始的信息和人工智能时代, 解放了人类的大脑
  • 人类智能体现在人类对周围环境的感知上,75%都是出于感知
  • 我们想要机器代替人类来感知外部世界

人类视觉

  • 视觉是自然智能不可思议的结晶
  • 猕猴大脑皮层中视觉部分占据大约50%
  • 人类大脑皮层中视觉部分所占最大, 大约55%
  • 人类视觉是由多块神经区域组成的
    • 通过眼睛感受外接物体反射的光线
    • 进一步通过视觉传导纤维到达脑后视觉处理中枢
    • 视觉处理中枢又分为v1~v5等多个区域
  • 人类采用神经网络对视觉信息进行深层次处理

计算机视觉

  • 计算机视觉:让计算机看懂图像和视频
  • 在图像识别中我们会关注以下几个信息,我们也希望计算机可以和我们一样识别
    • 目标是什么
    • 目标位置
    • 目标在做什么
    • 目标之间的关系

计算机视觉/深度学习发展史

  • 起源:20世纪50年代统计模式识别,二维图像分析
  • 诞生:1974年MIT科学家Minsky带其学生David Marr暑期课题进行研究,1981人工智能计算机视觉专辑,Marr视觉计算理论得到迅速发展
  • 发展:
    • 80年代以后

      • 计算能力迅速增长, 视觉计算成本极大降低
      • 以Marr理论为基础的视觉理论广泛研究
      • 视觉技术得到迅速发展,在视频监控、工业分析等领域得到广泛应用
    • 2000年后,特征提取和基于学习的视觉得到迅速发展
    • 2006年,Hinton提出深度学习
    • 2010年,微软使用深度学习再语音方面取得突破发展
    • 2015年后,深度学习在视觉个应用领域取得突破:
      • 2015, 在ImageNet上的识别准确率首次超越人类
      • 2016, Tesla创造了56亿公里自动驾驶路测数据
      • 2017, iPhonX宣布引入Face ID高精度人脸识别技术,随后,华为也在手机实现了该技术
      • 2018, OpenAI 2:1战胜人类DOTA2高手队
      • … 人类可能在很多方面完全无法和计算机匹敌

计算机视觉应用趋势

  • 服务机器人
  • 安防监控
  • 自动驾驶
  • 智能穿戴
  • 无人机快递

第一个视觉系统程序

1 ) C++版本

环境:

  1. win10
  2. Visual Studio 2015或更高版本(社区版免费)
  3. OpenCV 3.x版本
  4. 具体配置方式:https://jingyan.baidu.com/article/dca1fa6f13bd55f1a44052b9.html
#include "opencv2/opencv.hpp"
using namespace cv;int main(void) {char *fn = "D:\\lena.jpg";Mat image = imread(fn);imshow("Hello, world!", image);waitKey(0); // 不加这句话,窗口会闪退
}

2 ) python版本

import cv2img = cv2.imread(r'D:\lena.jpg') # 这里通过r不用进行转义了
cv2.imshow('Hello, world!', img)
cv2.waitKey()
cv2.destroyAllWindows()

视觉系统的构成要素

  1. 照明设备:光源
  2. 成像设备:相机
  3. 处理设备:主机
  4. 算法软件:视觉处理系统

程序扩展

1 )图像改变大小

  • C++函数: void resize(InputArray src, OutputArray dst, Size dsize, double fx=0, double fy=0, int interpolation=INTER_LINEAR)
  • Python函数: dst = cv.resize( src, dsize[, dst[, fx[, fy[, interpolation]]]] )

2 ) 图像平滑

  • 高斯平滑: 会把原始图像模糊化, 可以去除原始图片噪声
  • Opencv中提供一个函数对原始图像做高斯平滑滤波
    • C++: void GaussianBlur( const Mat& src, Mat& dst, Size ksize,double sigmaX, double sigmaY=0,int borderType=BORDER_DEFAULT );

      • 参数1:原始图像
      • 参数2:滤波后的图像
      • 参数3:采用的高斯滤波器模板的大小,通常取值33或55
      • 参数4和5:代表x和y方向高斯函数宽度的信息
    • Python: dst = cv.GaussianBlur(src,ksize,sigmaX[,dst[,sigmaY[,borderType]]])

3 ) 图像颜色空间转换和阈值化

  • void cvtColor(InputArray src, OutputArray dst, int code,int dstCn=0);
  • void threshold(InputArray src, OutputArray dst, double thresh, double maxval, int type);

4 ) 全部代码参考

C++版本:

#include "opencv2/opencv.hpp"
using namespace cv;int main() {char * fn = "D:\\lena.jpg";Mat image = imread(fn);Mat imageGauss, image1, image2, gray, gray1, hsv, hsvChannels[3];// 对图像做高斯平滑处理并显示GaussianBlur(image, imageGauss, size(5, 5), 0);imshow("source image", image);imshow("Gaussian filtered image", imageGauss);waitKey();// 对图像使用resize和pyrDown缩小一半再一半, 显示图像resize(image, image1, Size(image.cols/2, image.rows/2)); // image1的大小就是原始图像image宽和高的一半pyrDown(image1, image2); // 另一个opencv的函数可以把image1图像缩小1半, 变为image2的图像(原始图像的1/4)// 彩色转灰度并作阈值化显示// cvtColor函数把原始图像转换为另外一种颜色空间的图像// threshold函数把原始图像通过指定的阈值转换成目标的黑白图像,大于阈值则白,小于则黑cvtColor(image, gray, COLOR_BGR2GRAY); // 将原始图像image转化为灰度图像, COLOR_BGR2GRAY 表示BGR三通道的图像向灰度图像的转换threshold(gray, gray1, 120, oxff, THRESH_BINARY); // 通过threshold完成了从gray到二值化图像gray1的转换,大于阈值120的所有的像素值都设置为16进制的ff白色imshow("gray", gray); // 显示灰度图像imshow("threshold image", gray1); // 显示二值化图像waitKey();
}

python版本

import cv2 as cv
filename = r'D:\lena.jpg'
img = cv.imread(filename)imgGauss = cv.GaussianBlur(img, (5,5), 0) # 高斯模糊 使用了5*5大小的卷积模板
image1 = cv.resize(img, (int(img.shape[1]/2), int(img.shape[0]/2)))
image2 = cv.pyrDown(image1) # 颜色转化
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY) # opencv缺省的彩色图像颜色排列是BGR模式与RGB模式略有区别
_, gray1 = cv.threshold(gray, 120, 0xff, cv.THRESH_BINARY) # 阈值化cv.imshow("source image", img)
cv.imshow("Gaussian filtered image", imgGauss)
cv.imshow("half size", image1)
cv.imshow("quarter size", image2)
cv.imshow("gray", gray)
cv.imshow("threshold image", gray1)cv.waitKey()
cv.destroyAllWindows()

视觉计算理论架构

  • 目的:通过视觉系统,重建三维物体的形状和位置
  • 理论的三个层次:
    • 初始略图(2维):过零点(zero-crossing)、短线段、端点等基元特征
    • 2.5维:对物体形状的一些粗略描述
    • 3维:对物体的三维描述
  • 计算机视觉的早期图像表示模型是Part-based, 这样就可以通过part这种组合式的方法表示物体。但很多自然场景的物体没有这么强的结构。
  • 80年代,特征检测和机器学习也开始组合应用,但对物体结构有严格限制(指定对象类型)。只能在少数场合取得比较好的效果。
  • 2000-2012年,局部特征描述得到迅速发展,如:SIFT/HOG
  • 特征描述具有通用性,结合SVM等机器学习方法, 但效果有限。
  • 2012年后,深度学习方法兴起。特征->自动提取;层数->很深
  • eg.MS的ResNet 152层

计算机视觉参考书

-《数字图像处理 基础篇》2002
-《数字图像处理(第三版)》2017
-《OpenCV2计算机视觉编程手册》2013
-《计算机视觉-算法与应用》2012
-《机器视觉》2017
-《计算机视觉教程(第2版)》

AI笔记: 计算机视觉概述相关推荐

  1. AI笔记: 计算机视觉之SIFT特征检测: 尺度空间、二维高斯函数、高斯金字塔

    SIFT概述 SIFT的全称是Scale Invariant Feature Transform(尺度不变特征变换),是由加拿大教授David G.Lowe在1999年发表于计算机视觉国际会议,200 ...

  2. AI笔记: 计算机视觉之图像分割:局部阈值法分割、分水岭算法、基于边缘轮廓的分割

    图像分割方法的分类和发展 1 )分类 2 )发展 图像分割是计算机视觉中非常重要的研究子领域 从计算机视觉和图像处理最开始发展的时候,图像分割方法就一直是探索的方法之一 经过长时间的发展,图像分割已经 ...

  3. AI笔记: 计算机视觉之照明模型和颜色模型

    照明模型 光通量 人能够看到周围的世界有2个部分构成:外在光源.光源物体表面的情况 光通量是指人眼所能感觉到的辐射功率,它等于单位时间内某一波段的辐射能力和该波段的相对视见率的乘积 以符号表示,单位是 ...

  4. 【2017cs231n】课程笔记01:计算机视觉概述及历史背景

    [2017cs231n]课程笔记01:计算机视觉概述及历史背景 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.c ...

  5. 【2017cs231n】笔记-第1讲:计算机视觉概述及历史背景

    课时1 计算机视觉概述 什么是计算机视觉? 计算机视觉:针对视觉数据的研究. 在我们的世界中,就在过去的短短几年,视觉数据量爆炸式的增长到夸张的地步,这一点很大程度上得益于世界上许许多多的视觉传感器, ...

  6. 2017CS231n李飞飞深度视觉识别笔记(一)——计算机视觉概述和历史背景

    第一章 计算机视觉概述和历史背景 课时1 计算机视觉概述 计算机视觉:针对视觉数据的研究. 关键是如何用算法来开发可以利用和理解的数据,视觉数据存在的问题是它们很难理解,有时把视觉数据称为" ...

  7. 京东AI研究院计算机视觉实验室招聘研究型实习生

    京东 京东 AI 研究院计算机视觉实验室致力于计算机视觉与多媒体领域研究的前沿创新.由丰富的京东场景和庞大的京东用户的核心商业需求驱动,专注关于图像.视频的智能分析.目前我们已经在人脸.人体.文字识别 ...

  8. 2020上半年收集到的优质AI文章 – 计算机视觉

    2020上半年收集到的优质AI文章 – 计算机视觉 计算机视觉应该怎样入门? 一文看懂计算机视觉-CV(基本原理+2大挑战+8大任务+4个应用) 在2020年,你觉得计算机视觉有哪些值得研究的领域? ...

  9. 2020上半年收集到的优质AI文章 – 人工智能概述

    2020上半年收集到的优质AI文章 – 人工智能概述 图灵奖得主.AAAI候任主席展望"AI未来10年" 洞察|一图看懂AI新基建如何落地 AI产品经理入门手册(上) AI产品经理 ...

最新文章

  1. PostgreSQL 8.2.5 安装为 Windows 服务 (Service)
  2. yml语法规则 (5.spring boot配置文件注入@ConfigurationProperties)、配置文件处理器...
  3. 集成运放组成的电压比较器
  4. [USACO1.2]双重回文数 Dual Palindromes
  5. python 单行读取文件_python – 在使用for循环读取文件时跳过一行
  6. mysql innodb myisam 混合,MySQL MyIsam/InnoDB混合在一起的事务
  7. java 预处理语句_预处理语句PreparedStatement到底咋用啊
  8. java虚拟机_Oracle独家:Java虚拟机学习指南
  9. spark环境搭建java_Spark MLlib 环境搭建超详细教程
  10. Windows环境配置Apache+Mysql+PHP
  11. 求“厉害”数 (10 分)
  12. Pycharm详细安装教程+PyCharm中配置Anaconda
  13. 数据库类型约束自增长
  14. java代码使用Get请求或者Post请求获取网络内容
  15. html显示时间,并且实时刷新(详细代码)
  16. 一文读懂什么是硬件开发、智能硬件、硬件系统?
  17. unity WebGL射线检测
  18. 计算机运行加减乘除哪个最慢,计算机算加减乘除的时间对比
  19. “内存不能为read/written”是什么原理?
  20. 纯HTML5+CSS3仿B站播放页

热门文章

  1. 物理界炸了!21℃实现室温超导,Nature凌晨刊发撤稿团队新研究,赌城现场被人群挤爆...
  2. 关于恢复出厂后出错的原因分析及解决与预防的方法
  3. chrome 提高下载速度
  4. 连接redis服务器提示:Redis Client On Error: Error: connect ECONNREFUSED 127.0.0.1:6379 Config right?
  5. 启动、关闭ubuntu Linux防火墙
  6. Apache Pulsar在智联招聘的实践 -- 从消息队列到基于Apache Pulsar的事件中心
  7. Microsoft.Office.Interop.PowerPoint 根据模板导出PowerPoint
  8. 欧司朗灯具换上灯珠后立刻烧坏+如何选用卤素灯珠
  9. 配置Apache实现url转发
  10. cin.getline和getline区别