【课程总结】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,一经查实,立即删除!

相关文章

RSS 解析:全球内容分发的利器及使用技巧

使用 RSS 可以将最新的网络内容从一个网站分发到全球数千个其他网站。 RSS 允许快速浏览新闻和更新。 RSS 文档示例 <?xml version"1.0" encoding"UTF-8" ?> <rss version"2.0"><channel><item></item><it…

kotlin 中的数字

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

rsync常用命令

从远程服务器复制文件到本地 语法&#xff1a; rsync [options] userremote_host:/path/to/remote/source /path/to/local/destination示例&#xff1a; rsync -avz -e ssh userremote_host:/path/to/remote/source/ /path/to/local/destination/从本地复制文件到远程服务器…

Qt | QTextStream 类(文本流)

01、字符编码 1、怎样将字符转换为二进制形式进行存储,存在一个编码的问题,通常都需进行两次编码, 2、字符集:字符的第一次编码是将字符编码为与一个数值(如一个 10 进制整数)相对应,比如把字符 A 编码为 10 进制的 65,B 编码为 66 等。把每一个字符都编码为与一个数值…

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

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

AMS(ActivityManagerService)源码解析2,Android应用是如何被启动的

一个Android应用是如何被启动的 前言总结1. 启动Application1.1 拉起一个新的进程1.2 启动Application1.3 AMS阶段1.4 创建Instrumentation和Application 2. 启动Activity2.1 回到AMS&#xff0c;启动第一个Activity 参考资料 前言 基于源码API 28&#xff0c;30以后的版本启动…

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

文章目录 文章目录 00 写在前面01 基于Pytorch版本的3D VGG代码02 论文下载 00 写在前面 感知损失&#xff1a;对于提升图片的肉眼可见细节&#xff0c;效果十分明显&#xff1b;对于一些指标如&#xff08;SSIM、PSNR&#xff09;这些&#xff0c;效果不明显。 在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;通过代码…

MATLAB神经网络---序列输入层sequenceInputLayer

序列输入层sequenceInputLayer 描述一&#xff1a; sequenceinputlayer是Matlab深度学习工具箱中的一个层&#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) 前两个可以…

文本相似度的三种算法

​为了实现基于嵌入向量相似度来查找输入文本与给定列表中最相似的元素&#xff0c;你可以使用预训练的文本嵌入模型&#xff08;例如&#xff0c;sentence-transformers&#xff09;&#xff0c;并计算输入文本与列表元素之间的余弦相似度。如果想避免依赖外部库或模型&#x…

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

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

roles安装wordpress

debug模块 1.如何查看ansible-playbook执行过程中产生的具体信息 vim test3.yaml --- - hosts: allremote_user: roottasks:- name: lsshell: ls /rootregister: var_stdout # register:将var_stdout注册为变量- name: debugdebug:var: var_stdout # 查看所有的输出信息#var…

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

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

开源大模型GLM-4,超越Gemini、Qwen-VL-Max!附推理代码

简介 GLM-4-9B 是智谱AI推出的最新一代预训练模型GLM-4 系列中的开源版本。在语义、数学、推理、代码和知识等多方面的数据集测评中, GLM-4-9B及其人类偏好坐标的版本GLM-4-9B-Chat表现出超越Llama-3-8B的卓越性能。 除了能进行多轮对话,GLM-4-9B-Chat还提供了网页浏览、代码…

nodejs——原型链污染

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

Unity创建简单的Http服务器/客户端测试

服务器部分&#xff1a; using System; using System.Collections; using System.Collections.Generic; using System.Net; using System.Threading.Tasks; using UnityEngine;/// <summary> /// 服务器部分 /// </summary> public class Sever_Yang : MonoBehavi…

Vue22-v-model收集表单数据

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