【课程总结】Day8(下):计算机视觉基础入门

前言

数据结构

在人工智能领域,机器可以处理的数据类型如上图,大约可以分为以上类别。其中较为常用的数据类别有:

表格类数据

  • 数据特点:
    • 成行成列:一行一个样本,一列一个特征
    • 特征之间相互独立,互不影响
  • 解决办法:
    • 机器学习算法
    • 深度学习(全连接网络)

时序类数据 sequential data:

  • 数据特点:
    • 一维信号:在一个方向上,不能随便改变顺序
    • 特征之间存在某种前后依赖关系
    • 特征之间不是相互独立
  • 数据举例:
  • 自然语言:“我打你"和"你打我”,词是一样的,但是有先后顺序,表达的意思是不一样的

  • 股票

  • 声音

  • 音乐

  • 解决办法:
    • 循环申请网络
    • RNN
    • transformer

图像类数据 image data

  • 数据特点:

    • 二维信号:在两个方向上,不能随意改变顺序
  • 数据举例:

    • 相机拍摄

    • 红外线成像

    • 雷达成像

    • X光成像

图像数据操作

读取方式

使用opencv读取图片
import cv2
# 读取图像
img = cv2.imread('./beauty.png', 1)print(type(img))
# [H, W, C]
# H: Height 高度
# W: Width 宽度
# C: Channel 通道数
# OpenCV通道排布:BGR模式
# Matplotlib通道排布:RGB模式
print(img.shape)# 显示图像
cv2.imshow('image', mat=img)# 等待键盘输入
cv2.waitKey(delay=3000)
  1. 如果未安装opencv,需要访问pypi.org,搜索opencv-python获取安装命令。
  2. 安装命令一般为:pip install opencv-python
  3. 如果有多个Python环境,需要注意安装时运行的命令行,详情请见pip安装常见问题
使用matplotlib读取图片
from matplotlib import pyplot as plt
import numpy as np# 读取图像
img = plt.imread('beauty.png')print(type(img))
print(img.shape)
print(img.size)# 显示图像
plt.imshow(img)# 显示结果
plt.show()
使用PIL读取图片
from PIL import Image# 读取图像
img = Image.open('beauty.png')# 显示图像
img.show()
三种库的对比
优点缺点适用场景
OpenCV- 专门用于计算机视觉任务
- 速度快
- 支持多种图像格式的读取和保存
- 对于简单的图像显示功能不如 Matplotlib- 实时图像处理、视频处理、计算机视觉任务
Matplotlib- 强大的绘图库
- 支持各种图形绘制
- 方便进行图像的展示、分析和可视化
- 图像处理和操作功能相对较少,不如 OpenCV- 数据可视化、图像展示、简单图像处理
PIL(Pillow)- 提供丰富的图像处理功能
- 支持图像的打开、保存、剪裁、旋转等操作
- 方便进行图像处理和转换
- 对于复杂的计算机视觉任务功能不如 OpenCV- 图像处理、图像编辑、简单图像识别

滤波处理

均值滤波

先运行一段代码,查看图片显示效果

import cv2
import numpy as np# 读取图像
img = cv2.imread('beauty.png')# 不同的 N 值
kernel_sizes = [3, 5, 7, 11, 15]# 处理不同的 N 值情况
for N in kernel_sizes:# 创建均值滤波核kernel = np.ones((N, N)) / N**2img_filtered = cv2.filter2D(src=img, ddepth=-1, kernel=kernel)# 显示图像cv2.imshow(f'Filtered Image N={N}', img_filtered)# 等待键盘输入和关闭窗口
cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果:

可以看到图片从左向右依次变得模糊,这是因为代码中对图像进行了滤波处理。

  • 定义:图像滤波,即在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制,是图像预处理中不可缺少的操作,其处理效果的好坏将直接影响到后续图像处理和分析的有效性和可靠性。

  • 原理:

    以均值滤波为例:

    1、原图与一个给定的模板(例如3×3),进行两个矩阵点乘之后再相加。

    2、然后依次向右移动一列,重复1步骤的计算,直到达到图片的右侧边界之后,再向下一行。

    以上操作即为卷积操作。

自定义卷积核

我们定义了一个卷积核如下:

kernel = np.array([[-1,-1,-1],[0,0,0],[1,1,1]])
# 相当于如下3×3的矩阵
# 卷积核的中间行为零,第一行为负数,第二行为正数。
# [-1, -1, -1]
# [0 , 0 , 0 ]
# [1 , 1 , 1 ]

这样可以突出图像中垂直方向像素有突变的情况。运行结果如下:

如果像素相同,经过上面卷积核的运算就会上下像素抵消为0,变成黑色;

如果像素不同,经过上面卷积核的运算就会把差异放大抽取出来,从而凸显出像素的突变。

如果我们把卷积核转置一下:

kernel = np.array([[-1,-1,-1],[0,0,0],[1,1,1]])
kernel = kernel.T
# 相当于如下3×3的矩阵
# [-1, 0 , 1 ]
# [-1, 0 , 1 ]
# [-1, 0 , 1 ]

这样可以突出图像中水平方向像素有突变的情况,运行结果如下:

如果我们把卷积核变为如下方式:

kernel = np.array([[-1,-1,-1],[-1,8,-1],[-1,-1,-1]])
# 相当于如下3×3的矩阵
# [-1, -1, -1 ]
# [-1,  8, -1 ]
# [-1, -1, -1 ]

运行结果如下:

上述图像中会对上下左右的条纹都进行抽取。

以上方法,在传统的图片处理过程中,常常用于获得图片的轮廓。

卷积操作

传统图像处理的卷积操作与神经网络中的卷积操作,大体情况如下:

  • 原理是类似的,都是使用一个核,然后逐行逐列的进行矩阵运算。

  • 传统图像处理中,卷积核是由工程师自己设计的;在神经网络中,这些工作都交给程序实现,不需要人参与。

    我们通过pytorch的Conv2d来实现一个卷积,代码如下:

import torch
import torch.nn as nn
import torchvision.transforms as transforms
from PIL import Image
import matplotlib.pyplot as plt# 读取图像并转换为 PyTorch Tensor
img = Image.open('beauty.png').convert('L')  # 以灰度模式打开图像
transform = transforms.ToTensor()
img_tensor = transform(img).unsqueeze(0)  # 添加 batch 维度# 定义卷积层
conv_layer = nn.Conv2d(in_channels=1, out_channels=1, kernel_size=3, padding=1, bias=False) 
"""in_channels:输入特征图的通道数。out_channels:输出特征图的通道。kernel_size:卷积核的大小,一般是3×3。stride:卷积核每次移动的步长,默认为1。padding:图像填充,可以是一个整数。dilation:膨胀卷积/空洞卷积,卷积核元素之间的间距,控制卷积核的采样间距。groups:分组卷积的组数,默认值为1。当 groups 大于1时,输入和输出的通道数必须可以被 groups 整除bias:是否包含偏置项,默认为True。如果设置为False,则卷积层不包含偏置项。padding_mode:填充方式,一般默认填充为0。由于信息储存在相对大小中,所有填充不影响原始内容的信息。device:是否使用GPU
"""# 执行卷积操作(不进行滤波)
output = conv_layer(img_tensor)# 将输出转换为 PIL 图像
output_img = transforms.ToPILImage()(output.squeeze(0))# 显示原始图像和卷积后图像
plt.figure(figsize=(10, 5))plt.subplot(1, 2, 1)
plt.imshow(img, cmap='gray')
plt.title('Original Image')
plt.axis('off')plt.subplot(1, 2, 2)
plt.imshow(output_img, cmap='gray')
plt.title('Convolved Image')
plt.axis('off')plt.show()

运行结果:

内容小结

  • 人工智能领域处理的数据,总体概括来说有三类数据:表格类、时序类、图像类
  • 图像数据处理的库有三种,opencv、matplotlib、PIL,它们各自有其优缺点和适用场景
  • 图像的卷积原理,使用一个卷积核与原图进行像素点的相乘再相加计算,从而找到图像的轮廓
  • 传统图像处理时需要工程师自己设计卷积核,在神经网络已交给计算机处理

参考资料

计算机视觉基础-图像滤波

均值滤波图 均值滤波3×3

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/26610.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

kotlin 中的数字

以下均来自官方文档: 一、整数类型 1、kotlin中内置的整数类型,有四种不同大小的类型: 类型存储大小(比特数)最小值最大值Byte8-128127Short16-3276832767Int32-2,147,483,648 (-231)2,147,483,647 (231 - 1)Long64…

现货黄金交易多少克一手?国内外情况大不同

如果大家想参与国际市场上的现货黄金交易,就应该从它交易细则的入手,先彻底认识这个品种,因为它是来自欧美市场的投资方式,所以无论是从合约的计的单位,计价的货币,交易的具体时间,以及买卖过程…

【Python/Pytorch - 网络模型】-- 手把手搭建3D VGG感知损失模型

文章目录 文章目录 00 写在前面01 基于Pytorch版本的3D VGG代码02 论文下载 00 写在前面 感知损失:对于提升图片的肉眼可见细节,效果十分明显;对于一些指标如(SSIM、PSNR)这些,效果不明显。 在01中&…

springboot集成swagger、knife4j

1. 集成swagger2 1.1 引入依赖 <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 --><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</vers…

【Three.js】知识梳理十九:线性雾(Fog)、指数雾(FogExp2)和范围雾(RangeFog)

雾是3D图形中创建深度和氛围的重要工具。Three.js提供了多种类型的雾&#xff1a;线性雾&#xff08;THREE.Fog&#xff09;&#xff0c;指数雾&#xff08;THREE.FogExp2&#xff09;和范围雾&#xff08;RangeFog&#xff09;。本文将探讨这三种类型的雾&#xff0c;通过代码…

【大数据】Spark使用大全:下载安装、RDD操作、JAVA编程、SQL

目录 前言 1.下载安装 2.RDD操作 3.JAVA编程示例 4.Spark SQL 前言 本文是作者大数据系列中的一文&#xff0c;专栏地址&#xff1a; https://blog.csdn.net/joker_zjn/category_12631789.html?spm1001.2014.3001.5482 该系列会成体系的聊一聊整个大数据的技术栈&…

stable-diffusion 3 体验部署流程(ComfyUI)

环境准备 下载及简介 git clone https://huggingface.co/stabilityai/stable-diffusion-3-medium SD3 checkpoints&#xff1a; sd3_medium_incl_clips.safetensors (5.5GB)sd3_medium_incl_clips_t5xxlfp8.safetensors (10.1GB)sd3_medium.safetensors (4.3GB) 前两个可以…

SAP OB52 财务账期月结月底月初开关

公告&#xff1a;周一至周五每日一更&#xff0c;周六日存稿&#xff0c;请您点“关注”和“在看”&#xff0c;后续推送的时候不至于看不到每日更新内容&#xff0c;感谢。 这是一条刮刮乐&#xff0c;按住全部选中&#xff1a;点关注的人最帅最美&#xff0c;欢迎&#xff1…

vuInhub靶场实战系列--Kioptrix Level #4

免责声明 本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关。 目录 免责声明前言一、环境配置1.1 靶场信息1.2 靶场配置 二、信息收集2.1 主机发现2.1.1 netdiscover2.1.2 arp-scan主机扫描 2.2 端口扫描2.3 指纹识别2.4 目…

nodejs——原型链污染

一、引用类型皆为对象 原型和原型链都是来源于对象而服务于对象的概念&#xff0c;所以我们要先明确一点&#xff1a; JavaScript中一切引用类型都是对象&#xff0c;对象就是属性的集合。 Array类型、Function类型、Object类型、Date类型、RegExp类型等都是引用类型。 也就…

Vue22-v-model收集表单数据

一、效果图 二、代码 2-1、HTML代码 2-2、vue代码 1、v-model单选框的收集信息 v-model&#xff1a;默认收集的就是元素中的value值。 单选框添加默认值&#xff1a; 2、v-model多选框的收集信息 ①、多个选择的多选 注意&#xff1a; 此处的hobby要是数组&#xff01;&…

【深度学习基础】激活函数:Tanh、Sigmoid 和 Softmax

激活函数是深度学习模型中不可或缺的一部分&#xff0c;它们赋予神经网络强大的非线性变换能力&#xff0c;使其能够拟合复杂的函数关系。在这篇博文中&#xff0c;我们将探讨三种常见的激活函数&#xff1a;Tanh、Sigmoid 和 Softmax&#xff0c;并提供一些记忆它们的技巧。 1…

C++基础知识(八:STL标准库 deque )

deque在C的STL(Standard Template Library)中是一个非常强大的容器&#xff0c;它的全称是“Double-Ended Queue”&#xff0c;即双端队列。deque结合了数组和链表的优点&#xff0c;提供了在两端进行高效插入和删除操作的能力&#xff0c;同时保持了随机访问的特性。 双端队列…

#慧眼识模每日PK[话题]##用五种语言说爸爸我爱你[话题]#

#慧眼识模每日PK #用五种语言说爸爸我爱你 你觉得哪个模型回答得更好&#xff1f;欢迎留言 A.蓝 B.紫 更多问题&#xff0c;扫码体验吧&#xff5e; by 国家&#xff08;杭州&#xff09;新型交换中心

养猫发现猫毛过敏?宠物空气净化器真的能拯救猫毛过敏吗?

广东省 猫咪是许多人梦寐以求的伴侣&#xff0c;但对于轻度猫毛过敏和鼻炎患者来说&#xff0c;养猫似乎是个遥不可及的梦想。我常在社交媒体上羡慕地观看朋友们的吸猫日常&#xff0c;却因过敏无法亲自养猫。这种遗憾驱使我寻找解决方案&#xff0c;从研究低过敏猫种到尝试空气…

2024/06/13--代码随想录算法3/17|01背包问题 二维、01背包问题 一维、416. 分割等和子集

01背包问题 二维 卡码网链接 动态规划5步曲 确定dp数组&#xff08;dp table&#xff09;以及下标的含义&#xff1a;dp[i][j] &#xff1a;从下标为[0,i-1]个物品中任取&#xff0c;放进容量为j的背包&#xff0c;价值总和最大为多少。确定递推公式&#xff0c; 有两个方向可…

算法专题总结链接地址

刷力扣的时候会遇到一些总结类型的题解&#xff0c;在此记录&#xff0c;方便自己以后找 前缀和 前缀和https://leetcode.cn/problems/unique-substrings-in-wraparound-string/solutions/432752/xi-fa-dai-ni-xue-suan-fa-yi-ci-gao-ding-qian-zhui-/ 单调栈 单调栈https:…

Javaweb04-Servlet技术2(HttpServletResponse, HttpServletRequest)

Servlet技术基础 HttpServletResponse对象 HttpServletResponce对象是继承ServletResponse接口&#xff0c;专门用于封装Http请求 HttpServletResponce有关响应行的方法 方法说明功能描述void setStatus(int stauts)用于设置HTTP响应消息的状态码&#xff0c;并生成响应状态…

第17章通信系统架构设计理论与实践

常见的5种常用的网络架构和构建网络的相关技术&#xff0c;以及网络构建的分析和设计方法。 17.1通信系统概述 通信技术和网络技术的发展&#xff0c;通信网络发生很大变化&#xff0c;入网的形式变化&#xff0c;传输的速率的提高、接入网络的方式多样化、网络结构的更为复杂…

~$开头的临时文件是什么?可以删除吗?

&#xff08;2023.12.4&#xff09; 在进行Word文档编辑的时候&#xff0c;都会产生一个以~$开头的临时文件&#xff0c;它会自动备份文档编辑内容&#xff0c;若是正常关闭程序&#xff0c;这个文档就会自动消失&#xff1b;而在非正常情况下关闭word文档&#xff0c;如断电&…