照片放大為什麼會糊?我用 Python 從零寫縮放演算法,順便測馬賽克能不能被破解
派大鑫博士加先生
0:00 / 0:00
照片放大為什麼會糊?我用 Python 從零寫縮放演算法,順便測馬賽克能不能被破解
8 просмотров · 2 дн. назад
派大鑫博士加先生
16 подписчиков
8 просмотров · 2 дн. назад
手機把照片一直放大,為什麼會糊、會出現一格一格的鋸齒?照片打了馬賽克,真的就看不出來了嗎?
這集用 Python 從零寫出圖片縮放演算法(最近鄰、雙線性),再和 Pillow 內建的方法一起實測,最後拆解馬賽克,並實際試試看被打碼的數字能不能被猜回來。
重點:
· 放大 8 倍:64×64 = 4,096 個像素要變成 262,144 個,多出來的 258,048 個只能用算的
· 最近鄰:直接抄最近那一格,每個原像素被抄 64 次 → 方塊和鋸齒(結果和 Pillow NEAREST 完全相同)
· 雙線性:四個鄰居按距離加權;實算一格:R = 103.69,存成 104;自己寫的版本和 Pillow BILINEAR 每個像素最多差 1
· 實測(512×512 原圖 → 平均縮成 64×64 → 放大回來,PSNR 越高越像):最近鄰 23.41 dB、雙線性 24.07 dB、Pillow 雙三次 24.59 dB;雙三次每格看 16 個鄰居,共讀 4,194,304 次像素
· 縮小的陷阱:同心圓縮成四分之一,每 4 格挑 1 格會冒出摩爾紋;外圈亮暗起伏(理想值 0):挑點 90.1、4×4 平均 12.0
· Pillow resize 縮小實測:NEAREST 90.1、BILINEAR 1.1、BICUBIC 0.5、LANCZOS 0.5 → 縮圖別選 NEAREST
· 馬賽克 = 區塊平均縮小 + 最近鄰放大,就兩行
· 實測:假的四位數密碼打上 16×16 馬賽克(5,376 個像素只剩 21 個平均值),在已知字型和位置的前提下試遍 10,000 種,0.19 秒找到正確答案;馬賽克圖再存成 JPEG 品質 75,第一名仍是正確答案
· 要遮蔽就用純色蓋掉:一萬種密碼蓋上純色後 10,000 種畫面完全一樣,沒有線索
0:00 開場
0:13 照片其實是格子
0:31 最近鄰:直接抄
0:51 雙線性:四個鄰居加權
1:27 實測:哪一種最像
2:02 縮小的陷阱:摩爾紋
2:54 馬賽克 = 縮小再放大
3:13 實測:馬賽克能被猜回來嗎
4:08 觀念整理 · 下一集
測試圖全部由程式當場畫出,影片中的數字都是程式實際計算的結果。
配樂為程式產生的原創旋律。
#圖片縮放 #馬賽克 #Python #程式教學 #用程式還原日常科技