常見噪聲類型與特征
| 噪聲類型 | 視覺特征 | 統計特征 | 適用濾波器 |
| 高斯噪聲 | 圖像呈現隨機亮暗點,像「雪花」 | 像素值服從正態分布 | 高斯濾波、雙邊濾波、非局部均值去噪 |
| 椒鹽噪聲 | 隨機出現純黑/純白像素點 | 像素值為極值(0 或 255) | 中值濾波、自適應中值濾波 |
| 泊松噪聲 | 信號相關,亮區噪聲強 | 方差與信號強度成正比 | Anscombe 變換 + 高斯去噪、BM3D |
| 乘性噪聲/斑點噪聲 | 雷達/SAR 圖像常見,呈顆粒狀 | 噪聲與信號相乘 | Lee 濾波、Frost 濾波、對數變換後高斯去噪 |
噪聲類型判斷方法
- 直方圖分析:觀察像素值分布,高斯噪聲呈鐘形,椒鹽噪聲在 0 和 255 有尖峰;
- 頻域分析:FFT 變換後觀察頻譜,周期性噪聲會有明亮頻譜線;
- 局部統計量:計算滑動窗口內的均值/方差關系,判斷是加性還是乘性噪聲;
- 已知場景先驗:根據成像設備(CCD/CMOS 熱噪聲多為高斯,傳感器缺陷產椒鹽)推測。
OpenCV 實戰建議
- 先嘗試
cv::fastNlMeansDenoisingColored(非局部均值),對多種噪聲效果較好;
- 椒鹽噪聲首選
cv::medianBlur,核大小 3~5;
- 保留邊緣細節時使用
cv::bilateralFilter(雙邊濾波);
- 實時性要求高可用
cv::GaussianBlur 或 cv::blur(均值濾波)。
代碼片段:自適應選擇
// 簡單啟發式:計算極值像素比例判斷椒鹽噪聲
double impulseRatio = countNonZero((img == 0) | (img == 255)) / (double)(img.total());
if (impulseRatio > 0.01) {
medianBlur(img, dst, 3); // 椒鹽噪聲
} else {
fastNlMeansDenoisingColored(img, dst, 10, 10, 7, 21); // 通用去噪
}