当前位置: 首页 > 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()  #显示图像

星空图

星空
晚安。

今天的分享到此结束。

http://www.lqws.cn/news/492283.html

相关文章:

  • 文件输入输出
  • LNMP一键自动化部署
  • RISC-V 指令集拓展类别
  • Redis反序列化失败问题
  • NW896NX769美光固态芯片NX790NX793
  • Lamp和友点CMS一键部署脚本(Rocky linux)
  • Flink维表应用:从思考到实践的全面解析
  • Linux切换中文输入法
  • 使用.detach()代替requires=False避免计算图错误
  • GPIO-LED驱动
  • STM32学习笔记
  • 深入浅出Node.js后端开发
  • 可信计算的基石:TPM技术深度解析与应用实践
  • 2025.06.23【甲基化】methylKit:甲基化测序数据分析安装与详细使用教程
  • 常用终端命令(Linux/macOS/bash 通用)分类速查表
  • Docker 永久换源步骤
  • C++之二叉搜索树及其实现
  • 嘉讯科技:医院电子病历系统的关键性作用
  • 【Java开发日记】我们详细讲解一下 Java 中 new 一个对象的流程
  • 智慧水利新引擎,数字孪生流域解决方案
  • 领域驱动设计(DDD)【7】之数据库设计
  • 基于 Spark 实现 COS 海量数据处理
  • AntDesign栅格系统全解析:Row与Col实战指南
  • Java封装过程中的getter/setter究竟有什么用?
  • 爬虫003----requests库
  • ABP VNext + Apache Kafka Streams:构建高吞吐、生产级实时流处理服务
  • 自回归(AR)与掩码(MLM)的核心区别:续写还是补全?
  • 采集MFC软件的数据方法记录
  • 【Java面试】你是怎么控制缓存的更新?
  • Linux系统能ping通ip但无法ping通域名的解决方法