National Central University
Uedu Main Site
Explore Uedu
Student Console
Register as Member/Login
Research Informed Consent Center
Survey Center
Educational Big Data Challenge
Claim or create a course
Try an AI Scenario Task
Support & Messages
Uptime Data

UeduGPTs

--

Jupyters

3

Local AI

--

Uedu Code

--

中央大學 AQI 80 24°C PM2.5 21
AI Reply Desktop Notifications

Show a desktop notification when the AI TA finishes replying

Chat Message Notifications

Notify me when classmates post messages in the forum

Sound notification

Play an alert sound whenever there is a new notification

Unit 07

影像與聲音的數位化與壓縮

解析度、色彩深度、取樣與量化、壓縮
Interaction 25 minute(s)

Learning Objectives

  • 用像素、解析度與色彩深度描述一張數位影像,算出未壓縮的大小
  • 說明聲音數位化的兩個步驟:取樣與量化,以及取樣率要超過訊號頻率兩倍的原因
  • 算出一段未壓縮聲音每秒的資料量
  • 用連續長度編碼(RLE)理解壓縮,分辨無失真壓縮與失真壓縮

照片和聲音怎麼變成位元

手機拍的一張照片,檔案大約幾 MB;傳到通訊軟體之後,對方收到的檔案小了很多,放大看還有一點模糊。 一首歌從串流平台播放,傳過來的資料量也比 CD 上的原始音訊小很多。

前兩課講了數字與文字怎麼變成位元。這一課處理真實世界裡連續的東西:

  1. 一張影像怎麼切成像素、每個像素的顏色怎麼存?檔案為什麼這麼大?
  2. 聲音是連續的波,怎麼變成一串數字?每秒要存多少資料?
  3. 壓縮為什麼能讓檔案變小?為什麼有些壓縮會讓畫質變差,有些不會?

把連續的訊號變成有限個數字的過程,叫做數位化(digitization)。它都包含兩件事:在哪些地方量(切成像素、每秒量幾次)與每次量到的值用幾個位元記。

像素、解析度與色彩深度

數位影像(點陣圖)把畫面切成一格一格的像素(pixel),每格只記一種顏色:

名詞 意思 例子
解析度 寬和高各有幾個像素 1920 × 1080 共約 207 萬個像素
色彩通道 螢幕用紅(R)、綠(G)、藍(B)三種光混出顏色,每個像素存三個數字 純紅是 (255, 0, 0),白色是 (255, 255, 255)
色彩深度 每個通道用幾個位元 常見每通道 8 位元,可以表示 0~255,三個通道合計 24 位元

每個像素 24 位元時,可以表示 2²⁴ = 16,777,216 種顏色,俗稱「全彩」。

未壓縮的大小 = 寬 × 高 × 每個像素的位元數 ÷ 8(換成位元組):

1920 × 1080 × 24 ÷ 8 = 6,220,800 位元組,約 6.2 MB

解析度越高、色彩深度越大,畫面越細緻,檔案也越大。另一種影像是向量圖(例如 SVG),存的是「從這裡畫一條線到那裡」的指令,放大不會出現格子,適合圖示與文字。

互動練習:解析度與色彩深度

左邊的圖由程式即時算出:天空、太陽、房子與山丘。上方選解析度(N×N 個像素)、拉桿調整每個顏色通道的位元數,右邊會算出可以表示的顏色、這張圖實際用到的顏色與未壓縮大小。依任務先把解析度降到 8×8,再回答兩個問題(色彩深度 1 位元時有幾種顏色、位元數減半時大小怎麼變),最後在 2,048 位元組以內找一個你覺得最清楚的組合。

取樣與量化

聲音是空氣壓力隨時間連續的變化,麥克風把它變成連續變化的電壓(類比訊號)。數位化分兩步:

步驟 做什麼 決定什麼
取樣(sampling) 每隔固定時間量一次電壓;每秒量幾次叫取樣率,單位 Hz 能記錄多高的頻率
量化(quantization) 量到的值四捨五入到最接近的一階,用固定位元數存;位元數 n 可以分成 2ⁿ 階 細微的大小變化記得多精細,誤差會變成雜音

取樣率要夠高:要記錄一個頻率的聲音,取樣率必須超過它的兩倍,否則取到的點會連成另一個頻率,甚至完全看不出原來的波(奈奎斯特取樣定理)。 人耳大約聽得到 20 Hz 到 20,000 Hz 的聲音,所以音樂 CD 的規格選了每秒取樣 44,100 次、每個取樣 16 位元、左右兩個聲道(1980 年 Sony 與 Philips 制定的 CD 規格)。

未壓縮的資料量 = 取樣率 × 量化位元數 × 聲道數(每秒的位元數):

44100 × 16 × 2 = 1,411,200 位元/秒 = 176,400 位元組/秒
一分鐘:176,400 × 60 = 10,584,000 位元組,約 10.6 MB

電話與語音通話只需要聽得清楚人聲,用的取樣率低很多,資料量也小很多。

互動練習:取樣率與量化位元

灰色曲線是一個每秒振動 1000 次(1000 Hz)的聲波的前 4 毫秒;紅點是取樣的位置與量化後的值,藍色階梯是數位化後留下來的樣子。依任務先把取樣率調成 1000 Hz,看紅點變成什麼並回答原因(接著試試 2000 Hz 與 4000 Hz 的差別);再把量化位元調成 2 數數看有幾層;最後設成 CD 的規格,看每秒與每分鐘的資料量。

想一想:算算資料量

1.

一張 100 × 100 像素、每個像素 24 位元的圖片,未壓縮時是幾個位元組?

2.

一段錄音的取樣率是 8000 Hz,它最多能正確記錄多高頻率的聲音?

3.

量化位元數從 8 位元增加到 16 位元,每個取樣點能表示的「階數」變成原來的幾倍?

第 1 次作答

壓縮:無失真與失真

未壓縮的影像與聲音很大,壓縮利用資料裡的重複與規律讓它變小。分兩大類:

類型 解壓縮後 例子 適合
無失真壓縮(lossless) 和原本一模一樣 ZIP、PNG、FLAC 文件、程式、試算表、需要精確的圖
失真壓縮(lossy) 和原本不完全相同,丟掉人眼人耳不容易察覺的細節 JPEG、MP3、AAC、常見的影片格式 照片、音樂、影片

最簡單的無失真壓縮是連續長度編碼(Run-Length Encoding,RLE):把連續相同的值記成「長度+值」。

原始:WWWWWWBBBWWWWB(14 個值)
RLE:6W 3B 4W 1B(4 段,8 個值)

RLE 對大片同色的圖(圖示、掃描的文件)很有效;但如果顏色一直換,每段都只有 1 個,反而比原本還大。實際的格式會組合好幾種方法,例如 PNG 先預測每個像素和旁邊像素的差,再用類似 ZIP 的方法壓縮。

失真壓縮的檔案小很多,但每次重新編碼都會再丟掉一些細節:同一張 JPEG 反覆編輯、存檔,畫質會越來越差。影片是每秒很多張畫面加上聲音,相鄰畫面通常只有一小部分在動,所以影片格式大多只存「和前一張不一樣的地方」。

一步一步做 RLE 壓縮與解壓縮

i 指著目前這一段的開頭,j 往右走,直到顏色改變;j - i 就是這一段的長度。看上方格子裡兩個指標怎麼移動,以及 runs 一段一段增加。最後照著(長度, 值)展開,檢查和原本是否相同。

互動練習:用 RLE 壓縮黑白圖

下面是一張 16 × 8 的黑白圖,每個像素原本用 1 個位元組存,共 128 個位元組;右邊是由左到右、由上到下做 RLE 的結果。點格子可以切換黑白,也可以套用範例圖。依任務先比較「橫條紋」與「直條紋」並回答原因,再找另一張壓縮後也變大的圖,最後回答 RLE 會不會失真(右邊有「解壓縮檢查」)。

想一想:壓縮

1.

下面的程式會印出什麼?

s = 'AAAABBBCCD'
out = ''
i = 0
while i < len(s):
    j = i
    while j < len(s) and s[j] == s[i]:
        j += 1
    out += str(j - i) + s[i]
    i = j
print(out)
2.

要把一份期末報告的程式碼與試算表打包寄給老師,解壓縮後必須一字不差,應該用哪一種壓縮?

3.

同一張 JPEG 照片反覆「開啟、編輯、存檔」很多次,畫質會怎樣?

第 1 次作答

重點整理

  • 數位化包含兩件事:在哪些地方量(像素、取樣)與每次的值用幾個位元記(色彩深度、量化位元)。
  • 影像:未壓縮大小 = 寬 × 高 × 每像素位元數 ÷ 8;每通道 8 位元、三個通道的全彩有 2²⁴ 種顏色。
  • 聲音:取樣率要超過訊號頻率的兩倍;量化位元 n 可分成 2ⁿ 階;每秒資料量 = 取樣率 × 量化位元 × 聲道數,CD 是 44,100 × 16 × 2 位元。
  • 壓縮利用資料的重複與規律:無失真壓縮(RLE、ZIP、PNG)可以完全還原,失真壓縮(JPEG、MP3)丟掉不易察覺的細節換取更小的檔案。
  • RLE 適合大片相同的資料,顏色一直變化時反而會變大。

下一課:資料的表示告一段落。接下來看電腦怎麼「計算」:從最基本的 AND、OR、NOT 邏輯閘開始。

這一課完成了!
Next lesson:布林邏輯與邏輯閘
你目前沒有登入,學習進度只存在這個瀏覽器。 Login 後,進度會跟著帳號,換電腦也看得到。