Introduction
圖像基本知識
- 在電腦中圖片是由pixel(像素)組成的
- 圖片的特徵值就是像素值(長度x寬度x通道數)
- 黑白圖片又稱為單通道圖片:每一個像素點只有一個值(灰度值),介於0~255之間
- 彩色圖片又稱為三通道圖片:每一個像素點由RGB三個值組成
張量表達圖片數據
圖像數字化
三要素:長度、寬度、通道數
- 一通道:灰度值
- 三通道:RGB
三要素與張量的關係
指定3-D張量:[長度,寬度,通道數(channel)]
- 通道數決定彩色或是黑白圖片
圖像基本操作
機器學習進行分類時,每一個樣本必須保持特徵值數量一致(將所有圖片統一大小,像素值一樣)
目的
- 增加圖片數據的統一性
- 所有圖片轉換成指定大小
- 縮小圖片數據量,防止增加開銷
縮放圖片大小
tf.image.resize_images(images,size)
- resize過後的圖片可能會改變圖片的數據,整數(uint8)—->浮點數(float32)
- 一般圖片都是用uint8類型儲存,float32類型還原不了為一張圖片
- uint8用於存儲:節約空間
- float32用於提高矩陣計算的經度
- 但是計算都是使用float32進行計算
- 一般圖片都是用uint8類型儲存,float32類型還原不了為一張圖片
images
- 4-D形狀(
[batch, height, width, channels]
)張量的圖片數據batch
:幾張圖片
- 3-D形狀(
[height, width, channels]
)張量的圖片數據
- 4-D形狀(
size
:- 1-D int32張量
new_height
,new_width
:圖像的新尺寸,例如[200,200]
- 返回4-D格式 或 3-D格式的圖片
- resize過後的圖片可能會改變圖片的數據,整數(uint8)—->浮點數(float32)
構造圖片文件隊列
與讀取文字文件的文件隊列相同
構造讀取器
- 圖片是一張一張的讀取
tf.WholeFileReader()
- 將文件的全部內容作為值輸出的讀取器
- 常用於圖片讀取
- 返回一個圖像讀取器實例
method
read(file_queue)
:輸出將是一個文件名(key)和該文件的內容(value)- 預設value為一張圖片的內容
圖片解碼
其對應不同的圖片格式擁有不同的解碼器
JPEG
tf.image.decode_jpeg(contents)
- 將JPEG編碼的圖像解碼為uint8類型的張量
contents
:讀取器讀取出來的文件內容- 也就是
read
方法的value
內容
- 也就是
- 返回一個uint8張量
- 3-D形狀(
[height,width,channels]
)
- 3-D形狀(
PNG
tf.image.decode_png(contents)
- 將PNG編碼的圖像解碼為uint8 或 uint16類型的張量
- 返回一個uint8 或 uint16張量類型
- 3-D形狀(
[height,width,channels]
)
- 3-D形狀(
批處理
在進行批處理之前長、寬、通道數全部都必須定義,不能有不確定的值,否則會報錯
- 利用
set_shape
方法固定長、寬、通道數 - batch方法與文件批處理相同
讀取狗的圖片範例
1 | import tensorflow as tf |
Result
1 | [array([[[[255. , 255. , 255. ], |
tips
- 讀取出來的圖片矩陣要儲存,為了節省空間最好使用
uint8
類型進行儲存 - 如要將圖片數據進行計算,為了提高精度需使用
tf.cast()
轉換類型的方法轉換成float32
類型