当前位置: 首页 > news >正文

深度学习:PyTorch卷积神经网络(CNN)之图像入门

本文目录:

  • 一、二值图像
  • 二、**灰度图像*
  • 三、**索引图像**
  • 四、**真彩色RGB图像**
  • **星空图**

前言:这篇文章开始讲解CNN,此前讲解的人工神经网络(ANN)如果有小伙伴还不清楚,一定要多看,多练习,继续一起努力前进吧!

CNN(Convolutional Neural Network,卷积神经网络)是一种专门用于处理网格结构数据(如图像、音频、文本序列)的深度学习模型。它在计算机视觉(CV)和自然语言处理(NLP)中广泛应用,尤其在图像分类、目标检测、语义分割等任务中表现优异。

在介绍CNN之前,我们需要先对图像有一个认识。

简单来说,图像一般分为二值图像、灰度图像、索引图像和真彩色RGB图像。

一、二值图像

二值图像是二维图像,仅由0、1两个值构成,“0”代表黑色,“1”代白色。由于每一像素(矩阵中每一元素)取值仅有0、1两种可能,所以计算机中二值图像的数据类型通常为1个二进制位。二值图像通常用于文字、线条图的扫描识别(OCR)和掩膜图像的存储。

黑白图:
在这里插入图片描述
PyTorch代码实现:

import numpy as np
import matplotlib.pyplot as plt#绘制黑色图像
plt.imshow(np.zeros((100,100)),cmap='gray')
plt.show()

二、*灰度图像

灰度图像也是二维图像,矩阵元素的取值范围通常为[0,255]。因此其数据类型一般为8位无符号整数的(int8),这就是人们经常提到的256灰度图像。**“0”表示纯黑色,“255”表示纯白色,中间的数字从小到大表示由黑到白的过渡色。**二值图像可以看成是灰度图像的一个特例。

灰图:
在这里插入图片描述
PyTorch代码实现:

import random# 创建灰度图像数组(单通道)
# 值范围0-255,dtype=np.uint8
gray_image = np.random.randint(0, 255, (height, width), dtype=np.uint8)# 显示图像
plt.imshow(gray_image, cmap='gray')  # 必须指定cmap='gray'
plt.axis('off')
plt.show()

三、索引图像

索引图像照样是二维图像,但它的文件结构比较复杂,除了存放图像的二维矩阵外,还包括一个称之为颜色索引矩阵MAP的二维数组。MAP的大小由存放图像的矩阵元素值域决定,如矩阵元素值域为[0,255],则MAP矩阵的大小为256Ⅹ3,用MAP=[RGB]表示MAP中每一行的三个元素分别指定该行对应颜色的红、绿、蓝单色值,MAP中每一行对应图像矩阵像素的一个灰度值,如某一像素的灰度值为64,则该像素就与MAP中的第64行建立了映射关系,该像素在屏幕上的实际颜色由第64行的[RGB]组合决定。也就是说,图像在屏幕上显示时,每一像素的颜色由存放在矩阵中该像素的灰度值作为索引通过检索颜色索引矩阵MAP得到。

索引图:
在这里插入图片描述
PyTorch代码实现:

# 设置图像大小和颜色数量
height, width = 256, 256
num_colors = 16# 生成随机索引矩阵
random_indices = np.random.randint(0, num_colors, (height, width))# 使用Matplotlib内置的colormap
plt.imshow(random_indices, cmap='viridis', vmin=0, vmax=num_colors-1)
plt.colorbar(label='Color Index')
plt.axis('off')
plt.show()

四、真彩色RGB图像

RGB图像与索引图像一样都可以用来表示彩色图像。与索引图像一样,它分别用红(R)、绿(G)、蓝(B)三原色的组合来表示每个像素的颜色。但与索引图像不同的是,RGB图像每一个像素的颜色值(由RGB三原色表示)直接存放在图像矩阵中,由于每一像素的颜色需由R、G、B三个分量来表示,**M、N分别表示图像的行列数,三个M x N的二维矩阵分别表示各个像素的R、G、B三个颜色分量。**RGB图像的数据类型一般为8位无符号整形。注意:通道的顺序是 BGR 而不是 RGB。

RGB彩图:

PyTorch代码实现:

plt.imshow(plt.imread(r'D:\深度学习\04_数据集\data\img.jpg'))
plt.show()

最后,分享一段代码,生成一片星空,送给大家:

# 创建全蓝图像
blue_img = np.zeros((200, 200, 3))  # 初始化全黑图像
blue_img[:, :, 2] = 1  #  # RGB通道:蓝色=1.0(Matplotlib取值范围0~1for _ in range(num_points):y = np.random.randint(0, 200)  # 随机行坐标x = np.random.randint(0, 200)  # 随机列坐标blue_img[y, x] = [1, 1, 1]    # 设为白色radius = np.random.randint(0, 2)  # 随机半径0~2像素draw_circle(blue_img, y, x, radius=radius)
plt.imshow(blue_img)  #渲染
plt.axis('off')  # 关闭坐标轴
plt.show()  #显示图像

星空图

星空
晚安。

今天的分享到此结束。

相关文章:

  • 【Leetcode】有效的括号、用栈实现队列、用队列实现栈
  • 成都芯谷金融中心文化科技产业园:构建文化科技产业融合新标杆
  • MySQL 8.x配置MGR高可用+ProxySQL读写分离(二):ProxySQL配置MySQL代理及读写分离
  • 【GoLang】3、基于虚拟头尾节点快速实现双向链表
  • 计算Transformer的Flops
  • 从 0 到 1 打造社区产品:短说社区助力开启社交新篇
  • Java编程中的设计模式:单例模式的深度剖析
  • 深度解析 Caffeine:高性能 Java 缓存库
  • LED-Merging: 无需训练的模型合并框架,兼顾LLM安全和性能!!
  • iOS App 上架步骤解析:适合资源有限团队的上架流程与注意事项
  • 【Verilog】Verilator的TestBench该用C++还是SystemC
  • OpenSSL 混合加密
  • 16.数据聚合
  • C++的前世今生-C++11
  • 进入python虚拟环境的方法
  • hive集群优化和治理常见的问题答案
  • 「ECG信号处理——(18)基于时空特征的心率变异性分析」2025年6月23日
  • 实时反欺诈:基于 Spring Boot 与 Flink 构建信用卡风控系统
  • 2025.06.23【甲基化】methylKit:甲基化测序数据分析安装与详细使用教程
  • 鸿蒙容器组件 Row 全解析:水平布局技术与多端适配指南
  • 高新园区规划建设局网站/nba在线直播免费观看直播
  • 手机网站制作/百度代理推广
  • 绵阳公司网站制作公司/新乡网络推广外包
  • 如何为公司建立网站/武汉seo优化服务
  • 个人作品网站模板/注册教育培训机构需要什么条件
  • 网站搭建行业/关键词分类工具