跳至主要內容
全球國際徵信顧問
案件指揮艙全部本機工具
V236 / OPERATING GUIDE

先讀範圍,再決定增強副本能替你做什麼。

影像增強副本只在你的瀏覽器內處理圖片,不上傳、不使用瀏覽器儲存空間。本頁說明它做什麼、不做什麼、每個步驟的白話原理與參數建議、處理紀錄怎麼讀、如何自己動手驗證,以及最常被誤解的地方。

READ FIRST

先說清楚這不是什麼

增強副本是「方便看的工作副本」,不是原始證據,也不會讓照片裡原本沒有的資訊長出來。
SCOPE

做什麼、不做什麼

做什麼
  • 在你的瀏覽器內讀取一張圖片(JPEG、PNG、WebP、GIF、BMP;AVIF 視瀏覽器而定)。檔案上限 25 MiB、約 40 百萬像素、每邊不超過 16384 px;超過時會說明原因,不會悄悄縮小。
  • 提供 4 組預設與 17 種處理步驟(自動色階、亮度/對比、伽瑪、背景平整、陰影/亮部恢復、CLAHE、白平衡、去除色偏、三種去雜訊、反銳化、輕度去模糊、放大、傾斜微調、裁切、反相)。每個步驟都能開關、調整參數與順序。
  • 預覽在長邊最多 1280 px 的縮圖上計算,可取消、有進度;滿意後再「套用到原尺寸」,在背景工作者內重新處理並產生副本。
  • 「套用到原尺寸」有進度條,可隨時取消(按「取消處理」或 Esc),取消不會留下任何檔案;若背景工作者在 10 秒內沒有停下來(例如正在編碼輸出檔),頁面會強制中止它,並請你重新選取圖片。輸出超過 100 百萬像素、或預估記憶體超過保護上限時,會說明原因並拒絕執行,不會當機。
  • 前後對照(滑桿或並排)、縮放與平移、1:1 像素檢視,以及處理前後的直方圖與統計。
  • 輸出 PNG(無損)或 JPEG(有損,可選品質),檔名加上「_增強版」;同時產生 JSON 與 TXT 兩種處理紀錄。可選擇在影像左下角加註兩行文字(預設關閉,會改變像素)。
不做什麼
  • 不上傳、不聯網、不使用任何瀏覽器儲存空間(含 cookie);關閉或重新整理頁面,畫面上的資料就消失。
  • 不修改原圖;結果一律另存為新檔。
  • 不辨識內容(不做人臉、車牌或文字辨識),不判斷圖片真偽或是否被修改過。
  • 不使用機器學習模型,不「生成」細節。所有步驟都是公開、可重算的傳統影像運算。
  • 不內建 HEIC 解碼(多數瀏覽器無法解碼);GIF 或動畫 WebP 只處理首張畫面;不處理 RAW。
  • 輸出是重新編碼的新檔:不含原圖的 EXIF、位置資料與色彩描述檔;透明處壓平成白底。
STEPS IN PLAIN WORDS

每個步驟在做什麼(白話)

下面依工具內的選單順序排列。每個步驟都附上「代價」:不是只有好處。順序也會影響結果,常見的順序是:先調亮度與色彩,再去雜訊,最後才銳化;要放大時,放大放在去雜訊之後、輕度銳化之前。

自動色階

原理
找出圖中最暗與最亮的一小撮像素(預設各 0.5 %),把它們拉到純黑 0 與純白 255,中間依比例拉開。像是把只用了一小段灰階的圖攤平到整個範圍。「只看亮度」時三個色彩通道用同一組端點,色相不變;「各色彩通道分開」則每個通道各自拉伸,順便壓掉偏色。
適合
整體發灰、偏暗但雜訊不重的圖;掃描件的泛黃底色(用各通道模式)。
代價
畫面裡有反光、燈泡等極端亮點時,端點會被它帶偏;各通道模式遇到本來就偏單色的場景(草地、藍牆)會把顏色拉歪。暗部的雜訊也會一起被拉開。
建議
先用預設的 0.5/99.5。亮點很多就把亮端調成 99 左右;顏色變怪就改回「只看亮度」。

亮度/對比

原理
線性公式:新值=係數×(舊值−127.5)+127.5+2.55×亮度,係數=(100+對比)÷100。亮度是整體平移,對比是繞著中灰放大或縮小差距。
適合
小幅微調,或在其他步驟處理完大方向之後收尾。
代價
暗部與亮部一起被推動;超出 0 到 255 的值被夾住,細節就此消失(亮部爆白、暗部死黑),事後無法從結果還原。
建議
幅度小一點(正負 20 以內)。要大幅提亮暗圖,先考慮伽瑪或陰影提亮。

伽瑪

原理
新值=255×(舊值÷255)的(1÷伽瑪)次方。伽瑪大於 1 時主要提亮中間調,0 與 255 兩端不動,所以比單純加亮度不容易爆白。
適合
整體偏暗的照片或截圖。
代價
暗部原本的雜訊與壓縮痕跡也被提亮、變得明顯。
建議
1.2 到 2.0。提亮後若暗部出現色塊或顆粒,再加上去雜訊。

背景平整(光照不均)

原理
先把圖縮小,在縮小圖上求出每個位置的「紙張亮度」:輕微模糊,取局部最亮值(把較細的字跡濾掉),再平滑;然後把偏暗的位置乘上增益,拉到與最亮處一致(增益上限預設 2.5)。勾選「把紙張亮度拉到白色」時,目標直接是 255。
適合
掃描或翻拍的文件:有手的陰影、折痕邊的暗角、光源不均。
代價
只會提亮、不會壓暗;增益只看亮度,色相不動。大面積深色圖案(照片、粗黑框、印章)會被誤認成「背景變暗」而被提亮。
建議
範圍(占短邊的比例)要比最粗的字跡大;圖案很大時把範圍調大,或降低套用比例。

陰影/亮部恢復

原理
用大半徑模糊取得每個位置的「局部亮度」。局部越暗、像素本身也不亮的地方,增益越大(最多約 4 倍);亮部壓低則只看局部亮度,把局部過亮的區域整塊壓暗一些,保留區域內的細節。
適合
逆光、暗角、部分區域很暗而其他區域正常的照片。
代價
陰影裡的雜訊同樣被放大;用力過度會出現暈影與不自然的平坦感。
建議
陰影提亮 30 到 60;亮部壓低通常 0 到 20;範圍用預設的 8 %短邊。

CLAHE 區域對比

原理
把圖分成若干圖磚(預設長邊 8 塊),每塊各自做直方圖均衡,但限制單一亮度的放大幅度(限制值);相鄰圖磚之間做內插,避免出現格線。只作用在亮度,顏色資訊不動。「套用比例」可以只混入一部分。
適合
對比很低、但局部仍有細節的灰濛畫面,例如霧中、夜間監視器。
代價
雜訊會被一起放大,平坦區域可能長出原本不存在的紋理;在下方的合成樣本中,它在某些圖上讓分數下降。
建議
限制值 1.5 到 2.5;套用比例 30 到 60;先去雜訊再用。

灰階世界白平衡

原理
假設整張圖的平均色應該是灰色:算出紅、綠、藍三個通道的平均(只取亮度 8 到 247 的像素),把偏離總平均的通道乘上補償增益(限制在 0.5 到 2 倍)。
適合
室內燈光造成的整體偏黃或偏藍,且畫面內容的色彩夠多樣。
代價
單色場景(大片草地、藍牆、紅色背景)本來就偏某個顏色,會被誤判成色偏而調歪。
建議
看預覽決定;不確定時把套用比例降到 50 以下。

去除色偏

原理
轉到 YCbCr 色彩空間,算出中間調(亮度 20 到 235)的平均色度,把它移到中性;等價於對 R、G、B 各加一個固定的位移,亮度不變。
適合
紅外線夜視的綠色、單色路燈造成的整片色偏。
代價
場景本來就偏色(例如白天的綠色草地)時會被拉回灰;暗部雜訊的色彩可能被放大成紫綠色斑點。
建議
夜間畫面先去雜訊再去色偏;出現彩色斑點就降低強度。

去雜訊:中值

原理
每個像素換成周圍視窗(3×3、5×5 或 7×7)內的中位數。孤立的亮點或暗點(椒鹽雜訊)因為不是中位數而被丟掉。
適合
零星的白點、黑點。
代價
細線、小點、小字的筆畫可能變細或消失;半徑越大越明顯。
建議
半徑 1 就夠。文字截圖慎用。

去雜訊:雙邊濾波

原理
和模糊一樣取鄰居的加權平均,但顏色差很大的鄰居權重趨近於 0,所以邊緣不會被抹平,平坦區域的顆粒被平均掉。
適合
一般的顆粒、感光元件雜訊、輕度壓縮雜訊。
代價
顏色容忍度太大時像塗了一層蠟,細紋理(皮膚、布料、草)消失;對零星的椒鹽雜訊幾乎無效(見實測)。
建議
半徑 2;顏色容忍度 20 到 40。

去雜訊:非局部平均

原理
以每個像素為中心取一小塊,到附近(搜尋半徑內)找外觀相似的小塊,依相似度加權平均。這是為了能在瀏覽器內快速完成的簡化近似版,不是完整的 NLM 實作。
適合
想保留較多紋理的高斯型雜訊。
代價
比其他去雜訊慢;強度太大時細節被抹平。
建議
強度 8 到 15。大圖先在預覽上確認再套用到原尺寸。

反銳化遮罩

原理
用亮度減去它的模糊版本,得到「細節」;把細節乘上強度再加回亮度。差異小於門檻的位置不動(避免連雜訊一起加強)。顏色資訊不動。
適合
輕微失焦、或縮小放大後略軟的圖。
代價
邊緣出現一亮一暗兩道光暈;雜訊與 JPEG 方塊也被放大。過度銳化會讓字看起來「更清楚」,其實是把邊緣畫粗了。
建議
半徑 1 到 1.5;強度 50 到 100;門檻 2 左右可避免放大平坦處的雜訊。

輕度去模糊

原理
Richardson–Lucy 反卷積:假設模糊像一個高斯形狀,反覆比較「若現在的估計是清楚的,模糊後會長怎樣、和觀測差多少」,再修正估計。「防振鈴」把結果夾在原圖鄰域亮度範圍附近,減少亮邊暗邊。
適合
輕度的鏡頭失焦,且雜訊不多。
代價
動態模糊(拖影)、嚴重失焦、JPEG 壓縮後的模糊都不符合假設,效果有限,甚至變差;迭代越多越容易出現振鈴與雜訊顆粒。
建議
模糊半徑估計 1.0 到 1.5;迭代 5 到 12;先去雜訊再去模糊。

放大

原理
新像素的值是附近舊像素的加權平均(Lanczos3 或雙三次)。這只是內插,沒有任何新資訊進來。
適合
字太小,放大後比較好閱讀;要列印或疊加標註。
代價
看起來比較平滑,不代表更清楚;放大再銳化會把錯覺做得更逼真。×4 只會得到更大、更軟的圖。
建議
×2 通常就夠;之後輕度銳化(強度 60 左右)。

傾斜微調

原理
以影像中心為軸旋轉一個小角度(正值為順時針,範圍正負 15 度)。「估計傾斜角」用投影輪廓法:把疑似墨跡的點投影到旋轉後的垂直軸,文字行對齊時投影最尖,據此找角度;結果附信心值,只是相對指標,不是機率。建議值由你看預覽決定是否採用。
適合
掃描或翻拍時歪了幾度的文件。
代價
旋轉必須內插,細線會略軟;空白角要填色,或自動裁掉(裁掉會改變取景,前後對照只提供並排)。沒有明顯文字行的圖,估計值沒有意義,工具會標示「不可靠」。
建議
先按「估計傾斜角」,再看預覽決定;插補用雙三次。

裁切

原理
以百分比指定要保留的範圍。
適合
去掉無關的邊緣,專注在要檢視的區域。
代價
改變取景;處理紀錄會寫入裁切範圍。需要保留完整脈絡時不要裁,或另存一份。
建議
放在流程最後。

反相

原理
新值=255−舊值。
適合
底片、白字黑底的反白。
代價
彩色底片反相後還有橘色的底(色罩)需要另外處理。反相本身可逆,沒有資訊損失。
建議
放在流程最前或最後。
PRESETS

四組預設與使用建議

暗部提亮
自動色階→陰影/亮部恢復(陰影 40、亮部 10、範圍 8 %)→雙邊濾波(半徑 2、容忍度 25)→反銳化(半徑 1.2、強度 50、門檻 2)。適合整體偏暗的照片或截圖。若亮部已經爆白、或暗部只剩雜訊,沒有資訊可救,這組也變不出來。
夜間監視器畫面
中值(半徑 1)→雙邊濾波→去除色偏→自動色階→CLAHE(限制值 1.5、6 塊、套用 40 %)。先去雜訊再拉開對比,區域對比只套用一部分。限制:暗部雜訊可能被染成紫綠色斑;在下方的合成夜間樣本中,一張兩項分數都提高,另一張 PSNR 提高但 SSIM 略降。
文字截圖放大
放大 ×2(Lanczos3)→反銳化(半徑 1.0、強度 60)。放大不會長出原本沒有的細節;它讓字比較好讀,不讓字比較真。
掃描文件
傾斜微調(預設停用,要自己啟用)→背景平整(範圍 4 %、拉到白色)→自動色階(各通道)→雙邊濾波(容忍度 20)→反銳化(強度 70、門檻 2)。頁面歪斜時,用「估計傾斜角」取得建議值,看預覽後再決定。
怎麼調
  • 預設只是起點,不是萬用解。請看前後對照與放大後的細節,再決定要不要換掉。
  • 一次只改一個參數,並放大到 1:1 像素看邊緣、小字與暗部。出現光暈、塗蠟感、假紋理,就調回來。
  • 步驟越少越好。每多一步,就多一份「這是處理出來的」的風險。
  • 預覽在縮圖上計算,和原尺寸結果接近但不承諾逐像素相同;要檢查真正的像素,請套用到原尺寸後用 1:1 檢視。
PROCESSING LOG

處理紀錄怎麼讀

每次「套用到原尺寸」都會同時產生處理紀錄:JSON(給程式讀,也可以在工具內匯入,還原步驟與參數)與 TXT(給人讀)。

紀錄裡有什麼
  • input:原圖檔名、位元組數、類型、SHA-256、尺寸、檔案宣告的最後修改時間(檔案系統的宣告值,可被更改)、EXIF 方向標記(若有)。
  • output:副本檔名、位元組數、格式、SHA-256、尺寸、JPEG 品質、pixelsSha256(編碼前 RGBA 像素的雜湊)、是否加註;有加註時另有加註前的像素雜湊與加註內容。
  • steps:每個啟用的步驟依序一筆:序號、代碼、名稱、全部參數、由影像算出的值(derived,例如自動色階實際用到的暗端與亮端)、該步驟用時,以及一句該步驟的限制說明(note,例如放大不會增加資訊)。
  • sizeChange、processing、stats:尺寸變化、總用時、處理前後的亮度平均、對比與清晰度指標。清晰度指標(拉普拉斯變異數)只是參考,雜訊與壓縮痕跡也會讓它變大。
  • tool、createdAt、environment、notes:工具與版本、產生時間(本機時鐘)、瀏覽器識別字串,以及一組固定的提醒。
它能證明什麼、不能證明什麼
  • 能說明:這份副本由哪一份原圖(以 SHA-256 指認)、經過哪些步驟與參數得到。
  • 不能證明:原圖內容真實、紀錄沒有被改寫、處理的時間與紀錄所寫一致。紀錄是普通文字檔。要讓它有分量,請在產生後立刻用證據鏈帳本計算原圖、副本與紀錄的雜湊,並把封存碼交給第三方保存。
VERIFY YOURSELF

如何自行驗證

先核對雜湊
  • 用作業系統的 sha256sum(或 shasum -a 256、certutil -hashfile)對原圖與副本計算,和處理紀錄中的 input.sha256、output.sha256 比對。
  • 或用下面的 Python 程式(只用標準函式庫,不依賴本站任何程式):
import hashlib, json

def sha256_of(path):
    h = hashlib.sha256()
    with open(path, "rb") as f:
        for chunk in iter(lambda: f.read(1 << 20), b""):
            h.update(chunk)
    return h.hexdigest()

ORIGINAL = "範例.png"                  # 你保存的原圖
COPY = "範例_增強版.png"               # 下載的增強副本
LOG = "範例_增強版_處理紀錄.json"      # 下載的處理紀錄(JSON)

log = json.load(open(LOG, encoding="utf-8"))
print("原圖與紀錄相符:", sha256_of(ORIGINAL) == log["input"]["sha256"])
print("副本與紀錄相符:", sha256_of(COPY) == log["output"]["sha256"])
核對副本的像素
  • pixelsSha256 是編碼前 RGBA 像素的雜湊。輸出為 PNG 時,解碼後的像素與編碼前相同,可以這樣核對(需要 NumPy 與 Pillow):
import hashlib, json
import numpy as np
from PIL import Image

COPY = "範例_增強版.png"               # 輸出為 PNG 時才能這樣核對
LOG = "範例_增強版_處理紀錄.json"

log = json.load(open(LOG, encoding="utf-8"))
rgba = np.asarray(Image.open(COPY).convert("RGBA"))      # 高 × 寬 × 4
print("尺寸相符:", [rgba.shape[1], rgba.shape[0]] == [log["output"]["width"], log["output"]["height"]])
print("像素雜湊相符:", hashlib.sha256(rgba.tobytes()).hexdigest() == log["output"]["pixelsSha256"])

輸出為 JPEG 時,解碼結果與編碼前的像素不同,這個核對不適用;JPEG 只能核對檔案雜湊。

用 NumPy 重現一個步驟
  • 步驟的公式都寫在上面。以「自動色階(只看亮度)」為例:整數亮度=(299R+587G+114B+500)÷1000 取整;依累積分布找出暗端與亮端;再用查表把所有通道拉伸。若紀錄中只有這一個步驟,下面的程式最後一行應印出「相差: 0」:
import json
import numpy as np
from PIL import Image

ORIGINAL = "範例.png"                  # 不含透明度的 PNG
COPY = "範例_增強版.png"
LOG = "範例_增強版_處理紀錄.json"      # 只啟用「自動色階」一個步驟、端點依據為「只看亮度」

log = json.load(open(LOG, encoding="utf-8"))
step = log["steps"][0]
assert step["id"] == "levels" and step["params"]["mode"] == "luma" and len(log["steps"]) == 1
p = step["params"]

src = np.asarray(Image.open(ORIGINAL).convert("RGB")).astype(np.int64)
out = np.asarray(Image.open(COPY).convert("RGB")).astype(np.int64)

luma = (299 * src[..., 0] + 587 * src[..., 1] + 114 * src[..., 2] + 500) // 1000   # 整數亮度
hist = np.bincount(luma.ravel(), minlength=256)

def percentile_index(h, n, q):                 # 最小的 v,使累積數 >= n*q/100
    c = np.cumsum(h)
    return int(np.argmax((c >= n * q / 100) & (c > 0)))

lo = percentile_index(hist, luma.size, p["low"])
hi = percentile_index(hist, luma.size, p["high"])
v = np.arange(256)
lut = np.floor(np.clip((v - lo) * 255 / (hi - lo), 0, 255) + 0.5).astype(np.int64) if hi > lo else v
print("暗端、亮端:", lo, hi, "| 紀錄中的值:", step.get("derived"))
print("與副本逐點比較,差最多的一點相差:", int(np.abs(lut[src] - out).max()))
  • 原圖要用 PNG 且不含透明度。JPEG 在不同解碼器之間可能有差 1 的像素,會使重現結果略有出入;這是解碼器的差異,不是處理步驟的差異。
  • 步驟不只一個時,依序重現即可;要核對的是每一步的輸入,不是原圖。
我們如何驗證這些演算法
  • 核心函式寫成可在 Node 執行的純函式,並有 574 項單元斷言(本機沙箱的測試,涵蓋正常、邊界、錯誤輸入與極端大小)。
  • 另以 NumPy、SciPy、OpenCV、Pillow、scikit-image 做了 356 個交叉比對案例(版本:numpy 2.5.3、scipy 1.18.1、opencv 5.0.0、pillow 12.3.0、scikit-image 0.26.0)。結果如下,誤差越小越一致;這是對合成圖的比對,不代表所有真實圖片都相同。
交叉比對:本機沙箱小樣本。誤差單位為 0 到 255 的灰階(傾斜估計為度)。
項目對照對象通過「應一致」類的實測最差誤差「解釋或近似」類的實測最差誤差
自動色階、亮度對比、伽瑪、反相、白平衡、去色偏NumPy 依定義、scikit-image rescale_intensity、OpenCV YCrCb94/9410.1792
高斯模糊基礎(精確核與方塊近似)SciPy gaussian_filter、OpenCV GaussianBlur46/464.6e-054.402
反銳化遮罩scikit-image unsharp_mask12/121—
中值、雙邊、非局部平均OpenCV medianBlur、bilateralFilter、獨立實作30/301—
CLAHE 區域對比OpenCV createCLAHE19/190—
Lanczos3、雙三次Pillow resize、獨立實作42/42116
傾斜微調Pillow rotate、OpenCV warpAffine、獨立實作35/3501
輕度去模糊NumPy/SciPy 獨立實作的 Richardson–Lucy6/61—
陰影/亮部恢復NumPy/SciPy 依定義14/1402
背景平整NumPy/SciPy 依定義8/81—
預設流程「掃描文件」各步驟的獨立參考依序串接4/41—
平均亮度、標準差、拉普拉斯變異數NumPy4/47.3e-12—
投影輪廓法傾斜估計(單位:度)合成頁面的已知角度42/420.1—

合計 356 個案例,通過 356,未通過 0。「應一致」是指預期與對照對象相同(容許 ±1 的四捨五入差);「解釋或近似」是已知有差異、並以模型解釋或量化的案例(例如方塊模糊對真高斯、Pillow 的中介夾制)。

  • 已知且已說明的差異:以獨立實作對照發現,Pillow 旋轉的雙三次係數相當於 −1,OpenCV 是 −0.75,本工具採用 −0.5(Catmull–Rom),所以和兩者的結果會略有不同;σ 大於 2 的模糊改用三次方塊模糊近似真高斯(形狀差異以「解釋或近似」類量化);CLAHE 的內插順序模仿 OpenCV 5.0 的單精度運算;Pillow 縮放時把橫向結果先存成 8 位元並夾在 0 到 255,所以在飽和的銳利邊會和本工具(全程浮點)差到 16 個灰階。
  • 環境差異:不同瀏覽器的數學函式與影像編碼器可能有末位差異,所以跨瀏覽器重跑同一組步驟,pixelsSha256 不一定相同,輸出檔的雜湊也不一定相同。
MEASURED, WITH LIMITS

實測:什麼時候有幫助,什麼時候沒有

以下數字全部是「本機沙箱小樣本」:用標準測試圖與程式合成的頁面,人為製造劣化,再對照「已知的乾淨原圖」計算 PSNR(分貝,越高越接近)與 SSIM(0 到 1,越高越相似)。真實案件沒有乾淨原圖可以比,所以這些分數只能說明「在這個人造情境下發生了什麼」,不能直接推論到你的圖,更不是準確率。

共 74 組「情境×處理方式」,判讀為:改善 53、有升有降 17、幾乎不變 3、變差 1。判讀規則:PSNR 提高至少 0.5 分貝且 SSIM 提高至少 0.005 為「改善」;兩者都下降到同樣門檻為「變差」;兩者變動都小於門檻為「幾乎不變」;其餘為「有升有降」。

展開全部合成劣化結果(74 列)
合成劣化實驗(亮度,對「已知的乾淨原圖」的 PSNR 分貝/SSIM):本機沙箱小樣本。
劣化情境處理方式處理前處理後判讀
偏暗(像素值×0.2+雜訊)— astronaut預設「暗部提亮」7.12/0.33827.12/0.842改善
只做自動色階28.50/0.743改善
色階+伽瑪 1.618.34/0.678改善
色階+陰影提亮+中值去雜訊23.76/0.820改善
曝光不足(線性光×0.2+雜訊)— astronaut預設「暗部提亮」10.71/0.67028.37/0.896改善
只做自動色階30.31/0.885改善
伽瑪 2.2(還原曝光的近似)18.84/0.748改善
伽瑪 2.2+雙邊去雜訊18.97/0.750改善
偏暗(像素值×0.2+雜訊)— coffee預設「暗部提亮」8.27/0.28123.04/0.890改善
只做自動色階27.87/0.778改善
色階+伽瑪 1.617.84/0.685改善
色階+陰影提亮+中值去雜訊19.62/0.808改善
曝光不足(線性光×0.2+雜訊)— coffee預設「暗部提亮」11.78/0.63822.86/0.935改善
只做自動色階28.64/0.899改善
伽瑪 2.2(還原曝光的近似)19.42/0.795改善
伽瑪 2.2+雙邊去雜訊19.53/0.792改善
低對比(範圍壓到 95–184)— chelsea只做自動色階17.49/0.78116.41/0.833有升有降
色階 0.1/99.9 百分位16.36/0.862有升有降
CLAHE(區域對比)17.84/0.912有升有降
色階+CLAHE 50%16.49/0.701變差
低對比(範圍壓到 95–184)— rocket只做自動色階13.01/0.69926.91/0.836改善
色階 0.1/99.9 百分位31.48/0.887改善
CLAHE(區域對比)12.66/0.671有升有降
色階+CLAHE 50%21.15/0.595有升有降
高斯模糊 σ=1.5(無雜訊)— astronaut反銳化 1.5 px/強度 1.026.78/0.87728.60/0.916改善
去模糊 σ=1.5、10 次29.17/0.925改善
去模糊 σ=1.5、20 次29.59/0.931改善
高斯模糊 σ=1.5+雜訊 σ=2 — astronaut反銳化 1.5 px/強度 1.026.66/0.85728.25/0.862改善
去模糊 σ=1.5、10 次28.94/0.899改善
先雙邊去雜訊再去模糊28.64/0.899改善
先雙邊去雜訊再反銳化28.17/0.889改善
動態模糊(9 px、20°)+雜訊 σ=2 — astronaut反銳化 1.5 px/強度 1.024.31/0.78824.49/0.765有升有降
去模糊(假設高斯 σ=2、10 次)24.54/0.792幾乎不變
高斯模糊 σ=1.5(無雜訊)— coffee反銳化 1.5 px/強度 1.028.17/0.82529.50/0.864改善
去模糊 σ=1.5、10 次29.77/0.871改善
去模糊 σ=1.5、20 次30.05/0.879改善
高斯模糊 σ=1.5+雜訊 σ=2 — coffee反銳化 1.5 px/強度 1.028.00/0.81129.05/0.817改善
去模糊 σ=1.5、10 次29.51/0.852改善
先雙邊去雜訊再去模糊29.10/0.842改善
先雙邊去雜訊再反銳化28.82/0.832改善
動態模糊(9 px、20°)+雜訊 σ=2 — coffee反銳化 1.5 px/強度 1.026.73/0.79426.77/0.777有升有降
去模糊(假設高斯 σ=2、10 次)26.60/0.790幾乎不變
夜間畫面(偏綠+低對比+雜訊 σ=9+JPEG 55)— astronaut預設「夜間監視器畫面」11.67/0.65319.51/0.733改善
中值+去色偏+色階(不做區域對比)19.60/0.730改善
舊組合:色階後 CLAHE 70%+反銳化18.18/0.593有升有降
非局部平均+去色偏+色階19.71/0.756改善
夜間畫面(偏綠+低對比+雜訊 σ=9+JPEG 55)— rocket預設「夜間監視器畫面」18.34/0.75923.39/0.746有升有降
中值+去色偏+色階(不做區域對比)24.84/0.724有升有降
舊組合:色階後 CLAHE 70%+反銳化18.92/0.372有升有降
非局部平均+去色偏+色階25.02/0.818改善
高斯雜訊 σ=15 — astronaut中值 r=125.14/0.61928.92/0.826改善
中值 r=227.24/0.837改善
雙邊 r=3 σ=3031.70/0.839改善
雙邊 r=3 σ=5030.43/0.824改善
非局部平均 h=1532.43/0.848改善
非局部平均 h=2531.27/0.823改善
椒鹽雜訊 6% — astronaut中值 r=116.75/0.33931.19/0.949改善
雙邊 r=3 σ=3016.86/0.330有升有降
非局部平均 h=1516.83/0.340幾乎不變
掃描件(泛黃+左下偏暗+模糊 0.8+雜訊 σ=4+JPEG 60)預設「掃描文件」11.87/0.91521.23/0.972改善
只做自動色階(各通道)12.26/0.893有升有降
只做背景平整(拉到白色)17.57/0.953改善
舊思路:色階(各通道)+陰影提亮 6012.70/0.900有升有降
預設但不去雜訊21.22/0.943改善
掃描件(泛黃+斜向漸層+模糊 0.8+雜訊 σ=4+JPEG 60)預設「掃描文件」9.75/0.87121.44/0.969改善
只做自動色階(各通道)10.70/0.864有升有降
只做背景平整(拉到白色)17.70/0.948改善
舊思路:色階(各通道)+陰影提亮 6011.35/0.880改善
預設但不去雜訊21.40/0.933改善
掃描件(泛黃+手的陰影帶+模糊 0.8+雜訊 σ=4+JPEG 60)預設「掃描文件」12.59/0.91116.18/0.953改善
只做自動色階(各通道)13.10/0.893有升有降
只做背景平整(拉到白色)15.52/0.941改善
舊思路:色階(各通道)+陰影提亮 6013.54/0.900有升有降
預設但不去雜訊16.18/0.927改善
展開放大實驗
放大實驗:把「真實」的 3 倍或 2 倍解析度頁面縮小後再放大回去,比較放大結果與真實頁面。處理前=最近鄰放大。
情境處理方式處理前(最近鄰)處理後判讀
文字截圖 ×2Lanczos321.99/0.94422.37/0.946幾乎不變
雙三次22.23/0.944幾乎不變
Lanczos3+反銳化 60%22.94/0.957改善
Lanczos3+反銳化 120%(1.5 px)21.99/0.960有升有降
文字截圖 ×3Lanczos319.12/0.90919.67/0.915改善
雙三次19.57/0.913幾乎不變
Lanczos3+反銳化 60%19.95/0.922改善
Lanczos3+反銳化 120%(1.5 px)20.09/0.930改善
展開傾斜估計實驗
傾斜估計(合成的白底黑字頁面):真值為需要套用的順時針角度(度)。
真值估計誤差信心值標為可靠轉正前 PSNR/SSIM用估計角轉正後
-12.0-12.050.050.58是11.40/0.60627.11/0.981
-7.0-6.950.050.54是11.46/0.61327.26/0.982
-3.0-3.000.000.53是11.85/0.64829.33/0.986
-1.0-1.050.050.53是13.08/0.72527.08/0.981
+1.5+1.500.000.53是12.59/0.69729.40/0.987
+3.0+3.000.000.53是11.86/0.64829.30/0.986
+7.0+7.000.000.53是11.46/0.61329.42/0.986
+12.0+11.950.050.55是11.39/0.60427.32/0.982
較難的頁面(背景漸層、雜訊、重度 JPEG 壓縮;3 張):誤差都在 0.05 度以內,信心值約 0.53,全部標為可靠。
真值估計誤差信心值標為可靠
-5.0-5.050.050.53是
+2.5+2.550.050.53是
+9.0+8.950.050.53是

去雜訊對照

同一張加了高斯雜訊(σ=15)的圖,處理前 PSNR 25.14、SSIM 0.619。下表列出本工具的幾種去雜訊,以及外部函式庫的結果作為參考。外部函式庫的演算法與參數不同,不能直接拿來比高低;本工具的非局部平均是為了在瀏覽器內快速完成的簡化近似。

去雜訊對照(亮度,對乾淨原圖;本機沙箱小樣本)
來源處理方式PSNR(分貝)/SSIM
本工具中值 r=128.92/0.826
本工具中值 r=227.24/0.837
本工具雙邊 r=3 σ=3031.70/0.839
本工具雙邊 r=3 σ=5030.43/0.824
本工具非局部平均 h=1532.43/0.848
本工具非局部平均 h=2531.27/0.823
外部函式庫OpenCV fastNlMeansDenoisingColored(h=12、模板 7、搜尋 21)28.95/0.796
外部函式庫OpenCV fastNlMeansDenoisingColored(h=18)27.79/0.794
外部函式庫OpenCV bilateralFilter(d=7、sigmaColor=60、sigmaSpace=3)31.93/0.840
外部函式庫OpenCV medianBlur(3×3)28.92/0.826
外部函式庫scikit-image denoise_nl_means(fast、patch 5、距離 6)28.01/0.760
PERFORMANCE

效能與記憶體

以下數字全部來自本機沙箱的實測,只有一台機器、每個情境各測一次,不是你的裝置的預測。沙箱是 2 核心、回報裝置記憶體 8 GB 的無頭 Chromium 141.0.7390.37;真實手機沒有實測。

4000×3000 JPEG(約 12 百萬像素),三種預設流程,各測一次(本機沙箱小樣本;手機外觀只是瀏覽器的觸控與視窗模擬,不是真實手機)
情境預設流程預覽(縮圖)秒套用到原尺寸 秒主執行緒最長任務 毫秒最長畫面間隔 毫秒
正常速度暗部提亮0.75.2無33
正常速度夜間監視器畫面0.77.4無50
正常速度掃描文件0.55.5無17
CDP 降速 4 倍(僅主執行緒)暗部提亮1.26.07067
CDP 降速 4 倍(僅主執行緒)夜間監視器畫面1.07.6無33
CDP 降速 4 倍(僅主執行緒)掃描文件0.85.07067
手機外觀 390×844+CDP 降速 4 倍暗部提亮0.94.6無33
手機外觀 390×844+CDP 降速 4 倍夜間監視器畫面0.76.7無33
手機外觀 390×844+CDP 降速 4 倍掃描文件0.95.1107100
整個瀏覽器限制在 25 %單核暗部提亮4.121.792200
整個瀏覽器限制在 25 %單核夜間監視器畫面3.530.992100
整個瀏覽器限制在 25 %單核掃描文件2.721.789183

載入並計算 SHA-256(4000×3000、約 1.3 MiB 的 JPEG):正常速度 0.5 秒、CDP 降速 4 倍(僅主執行緒) 0.7 秒、手機外觀 390×844+CDP 降速 4 倍 0.7 秒、整個瀏覽器限制在 25 %單核 2.8 秒。「主執行緒最長任務」只記錄超過 50 毫秒的任務,「無」表示沒有任何任務超過 50 毫秒。「最長畫面間隔」是在處理期間以 requestAnimationFrame 量到的相鄰畫面最長間隔,用來看畫面有沒有卡住。處理時畫面保持可操作,是因為計算全部在背景工作者內,主執行緒只負責畫面。

降速實測要怎麼讀

各步驟在背景工作者內的用時(正常速度、4000×3000、單次實測)
預設流程處理合計 秒各步驟
暗部提亮5.2自動色階 0.2 秒、陰影/亮部恢復 0.5 秒、去雜訊:雙邊濾波 2.2 秒、反銳化遮罩 0.7 秒
夜間監視器畫面7.3去雜訊:中值 2.1 秒、去雜訊:雙邊濾波 2.4 秒、去除色偏 0.2 秒、自動色階 0.1 秒、CLAHE 區域對比 0.7 秒
掃描文件5.5背景平整 0.4 秒、自動色階 0.2 秒、去雜訊:雙邊濾波 2.2 秒、反銳化遮罩 0.8 秒

記憶體

瀏覽器行程(含瀏覽器本體、GPU 與頁面,合計)的常駐記憶體,在上面幾次 4000×3000 的原尺寸處理後約為 969 到 1039 MB(粗略值,每次測量都包含瀏覽器本體;不是只算本工具)。套用到原尺寸之前,程式會先用保守公式估算尖峰記憶體,超過保護上限就不執行並說明原因:

套用到原尺寸前的尖峰記憶體估計(程式內建的保守估算,不是實測;保護上限 1536 MiB)
預設流程1920×10804000×30006000×40008000×5000
暗部提亮約 40 MiB約 229 MiB約 458 MiB約 763 MiB
夜間監視器畫面約 32 MiB約 183 MiB約 366 MiB約 610 MiB
掃描文件約 40 MiB約 229 MiB約 458 MiB約 763 MiB
文字截圖放大約 134 MiB約 778 MiB約 1556 MiB,超過保護上限輸出超過 100 百萬像素上限

保護上限預設 1536 MiB;瀏覽器回報裝置記憶體時,取「裝置記憶體 ×0.3」(最低 0.5 GiB)與預設值中較小者;沒有回報但主要輸入方式是觸控時降為 0.9 GiB。這個公式是按每一步的輸入、輸出與工作平面保守加總的設計值,沒有和實際的記憶體用量逐項對照;在較舊的裝置上仍可能失敗,失敗時會顯示「記憶體不足」的說明,而不是當機。

COMMON MISTAKES

常見誤解

「增強之後看到車牌或人臉了。」
如果原圖有拍到,增強可能讓它比較好認;如果原圖沒有,銳化、放大與區域對比會製造看起來像字、像臉的紋理。請對照原圖,不要把副本裡新出現的筆畫當成原圖內容。
「放大 4 倍會更清楚。」
放大只是內插。×4 只會得到更大、更軟的圖;字是否可讀取決於原圖的像素。
「分數變高就是更接近真相。」
PSNR、SSIM 都要有乾淨原圖才算得出來,真實案件沒有。工具內的「清晰度指標」只是拉普拉斯變異數,雜訊與壓縮痕跡也會讓它變大,僅供參考。
「預覽就是最後的結果。」
預覽在縮圖上計算,接近但不承諾逐像素相同;下載的是在原尺寸上重新處理的結果。
「有處理紀錄就沒人能質疑。」
紀錄只是文字檔,可以被編輯,時間來自本機時鐘。它記錄做法,讓別人能重做並比對;它不替內容背書。
「JPEG 比較小,輸出 JPEG 就好。」
JPEG 有損,輸出時會再壓縮一次,可能把你剛處理好的細節抹掉或製造方塊。要保存工作副本,建議輸出 PNG。
「去模糊可以救回拖影或失焦的照片。」
本工具的去模糊假設模糊近似高斯,只適合輕度失焦。動態模糊、嚴重失焦與重度壓縮的圖,效果有限,也可能出現振鈴。
「換一個瀏覽器,結果也要逐位元相同。」
不承諾。數學函式與影像編碼器的差異可能造成末位不同;因此像素雜湊適合在同一個瀏覽器引擎下核對,檔案雜湊適合核對「這個檔案」。
「預設組合適合所有圖。」
不是。預設是針對常見情況的起點,實測中也有在個別圖上讓某項分數下降的例子。

建議的使用流程

  1. 先把原圖另存一份並設為唯讀,不要在原檔上做任何事。
  2. 在工具內載入圖片,確認檔案資訊(尺寸、SHA-256)無誤。
  3. 選最接近的預設;看前後對照,放大檢查邊緣、小字與暗部。
  4. 需要時一次只調一個參數;出現光暈、塗蠟感或假紋理就調回來。
  5. 套用到原尺寸,輸出 PNG;同時下載增強副本與處理紀錄(JSON 與 TXT)。
  6. 用證據鏈帳本為原圖、副本與紀錄計算雜湊並匯出,封存碼交給第三方保存。
  7. 交付時三者一起附上,並明確說明「這份是增強副本,經過哪些處理」。
  8. 是否可作為證據、怎麼提出,請諮詢律師。