影像銳化(Image Sharpening)是一種提升影像細節與邊緣對比的技術,
常用於讓圖片看起來更清晰,特別適合在攝影後期或電腦視覺前處理時使用。
銳化的核心是 強化像素與周圍像素的差異,
讓邊緣的變化更明顯,從而突顯細節。
常用的銳化方法有:
準備一張圖片 image.jpg
,放在與程式同一資料夾中。
import cv2
import numpy as np
img = cv2.imread("image.jpg")
cv2.imshow("Original", img)
# 放最後面
cv2.waitKey()
cv2.destroyAllWindows()
filter2D() 可用任意自訂卷積核(Kernel)對影像進行濾波運算。 常用的銳化卷積核範例如下:
# 3x3 銳化 kernel:強化中心、抑制周圍
kernel_sharpen = np.array([[0, -1, 0],
[-1, 5, -1],
[0, -1, 0]], dtype=np.float32)
sharpen_conv = cv2.filter2D(img, ddepth=-1, kernel=kernel_sharpen)
cv2.imshow("Sharpen - filter2D (3x3)", sharpen_conv)
cv2.filter2D(src, ddepth, kernel)
效果示意:
反遮罩的想法是:原圖 − 模糊 = 邊緣;接著把邊緣加回原圖。
blur = cv2.GaussianBlur(img, (0, 0), sigmaX=2)
amount = 1.5
unsharp = cv2.addWeighted(img, 1 + amount, blur, -amount, 0)
cv2.imshow("Unsharp Mask (sigma=2, amount=1.5)", unsharp)
cv2.waitKey()
cv2.destroyAllWindows()
cv2.GaussianBlur(src, ksize, sigmaX)
cv2.addWeighted(src1, alpha, src2, beta, gamma)
效果示意:
Laplacian 能凸顯影像的二階變化(邊緣/高頻),把邊緣訊號加回原圖即可達到銳化效果。
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
lap = cv2.Laplacian(gray, ddepth=cv2.CV_16S, ksize=3)
lap_abs = cv2.convertScaleAbs(lap)
lap_color = cv2.cvtColor(lap_abs, cv2.COLOR_GRAY2BGR)
alpha = 1.0
beta = 0.7
lap_sharp = cv2.addWeighted(img, alpha, lap_color, beta, 0)
cv2.imshow("Laplacian Sharpen", lap_sharp)
cv2.waitKey()
cv2.destroyAllWindows()
cv2.Laplacian(src, ddepth, ksize)
cv2.convertScaleAbs() → 將影像轉為 8 位元整數 cv2.addWeighted() → 加權疊加
效果示意:
方法 | 優點 | 缺點 |
---|---|---|
filter2D | 簡單快速,容易調整 | 容易放大雜訊 |
Unsharp Mask | 控制銳化強度精準 | 需額外計算模糊 |
Laplacian | 邊緣偵測效果好 | 容易產生光暈效果 |
建議先做適度平滑(如 GaussianBlur)以穩定銳化效果。
參數建議:
影像銳化核心在於 強化高頻訊號(邊緣/細節)。 使用卷積核、反遮罩或 Laplacian 都能讓影像更清晰,但需兼顧雜訊與自然度。 多嘗試不同方法與參數,找到最適合你的影像銳化策略。