本文目錄:
- 一、二值圖像
- 二、**灰度圖像*
- 三、**索引圖像**
- 四、**真彩色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~1)
for _ 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() #顯示圖像
星空圖
晚安。
今天的分享到此結束。