【圖像處理基石】圖像預處理方面有哪些經典的算法?

在這里插入圖片描述

圖像預處理是計算機視覺任務(如目標檢測、圖像分割、人臉識別)的基礎步驟,核心目的是消除圖像中的噪聲、提升對比度、修正幾何畸變等,為后續高階處理提供高質量輸入。以下先系統梳理經典算法,再通過Python實現2個高頻應用算法(直方圖均衡化、中值濾波)。

一、圖像預處理經典算法梳理

根據處理目標,可將經典算法分為5大類,每類包含核心算法、原理、目的及應用場景:

1. 幾何變換類(修正空間畸變)

針對圖像的空間位置或形狀偏差,調整像素坐標以滿足后續對齊、裁剪等需求。

算法原理核心目的應用場景
平移對所有像素按指定偏移量(dx, dy)移動,公式:(x’, y’) = (x+dx, y+dy)調整圖像位置圖像拼接、目標定位校準
旋轉以某點(如中心)為原點,按角度θ旋轉,需處理像素插值避免模糊修正圖像傾斜文檔掃描(矯正傾斜文字)
縮放按比例(fx, fy)放大/縮小像素,常用雙線性插值提升畫質統一圖像尺寸神經網絡輸入標準化(如224x224)
翻轉水平翻轉(左右鏡像)或垂直翻轉(上下鏡像)數據增強、修正視角人臉識別(增加樣本多樣性)

2. 圖像增強類(提升視覺質量)

通過調整像素灰度/顏色分布,增強圖像的細節對比度,解決低光照、模糊等問題。

算法原理核心目的應用場景
全局直方圖均衡化拉伸像素灰度分布,使直方圖趨于均勻(映射灰度累積概率)提升整體對比度醫學圖像(如X光片)、低光照片
CLAHE(自適應直方圖均衡化)將圖像分塊,對每塊單獨均衡化,限制對比度避免過增強增強局部細節(如暗區)逆光照片、監控圖像
伽馬校正通過冪函數(O = I^γ)調整灰度:γ<1提亮,γ>1壓暗修正光照不均顯示器校準、水下圖像增強
對比度拉伸(線性變換)線性映射灰度范圍:O = a*I + b(a>1增強對比度,a<1降低)擴展有效灰度區間灰度范圍狹窄的圖像(如霧天圖)

3. 圖像去噪類(消除干擾像素)

針對圖像采集過程中的噪聲(如椒鹽噪聲、高斯噪聲),通過鄰域像素平滑實現去噪。

算法原理核心目的應用場景
均值濾波用鄰域內所有像素的平均值替換中心像素消除高斯噪聲輕微模糊的自然圖像
中值濾波用鄰域內像素的中值替換中心像素消除椒鹽噪聲(脈沖噪聲)老照片、傳感器噪聲圖像
高斯濾波用高斯核(權重隨距離遞減)加權平均鄰域像素平滑圖像、保留細節預處理(如邊緣檢測前去噪)
雙邊濾波結合空間距離(鄰域權重)和灰度相似度(避免模糊邊緣)加權平均去噪+保留邊緣人像美顏、紋理保留

4. 顏色空間轉換(適配任務需求)

將圖像從默認的RGB空間轉換為其他空間,簡化后續處理(如分離亮度與色彩)。

轉換方向原理核心目的應用場景
RGB → 灰度加權平均RGB通道:Gray = 0.299R + 0.587G + 0.114B(符合人眼感知)減少維度(3→1)灰度圖像任務(如文字識別)
RGB → HSV分離色調(H)、飽和度(S)、亮度(V)通道單獨調整亮度/色彩圖像增強、色彩分割
RGB → YCrCb分離亮度(Y)與色差(Cr/Cb)通道視頻壓縮、膚色檢測人臉識別(膚色區域提取)

5. 閾值處理(二值化分割)

將灰度圖轉換為二值圖(僅黑白兩色),突出目標區域。

算法原理核心目的應用場景
全局閾值用固定閾值T分割:I>T設為255(白),否則設為0(黑)(如Otsu自動選T)簡單目標分割文字提取、硬幣檢測
自適應閾值按局部區域動態計算閾值(如鄰域均值)處理光照不均圖像文檔掃描(文字與背景分離)

二、Python實現經典算法(2個高頻案例)

以下基于 OpenCV(圖像處理庫)Matplotlib(圖像顯示庫) 實現,需先安裝依賴:

pip install opencv-python numpy matplotlib

案例1:直方圖均衡化(全局+CLAHE)

需求:提升低對比度圖像的細節(如逆光照片),對比全局均衡化與CLAHE的效果差異。

實現步驟:
  1. 加載圖像并轉換為灰度圖(均衡化通常在單通道上進行);
  2. 實現全局直方圖均衡化;
  3. 實現CLAHE(自適應均衡化);
  4. 顯示原圖、全局均衡化圖、CLAHE圖及對應直方圖。
代碼:
import cv2
import numpy as np
import matplotlib.pyplot as plt# 1. 加載圖像(以灰度模式讀取,0表示灰度)
img = cv2.imread("low_contrast_image.jpg", 0)  # 替換為你的圖像路徑
if img is None:raise ValueError("圖像加載失敗,請檢查路徑是否正確!")# 2. 全局直方圖均衡化
global_eq = cv2.equalizeHist(img)# 3. CLAHE(自適應直方圖均衡化)
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8))  # clipLimit限制對比度,tileGridSize分塊大小
clahe_eq = clahe.apply(img)# 4. 計算各圖像的直方圖(用于對比)
def calculate_histogram(image):hist = cv2.calcHist([image], [0], None, [256], [0, 256])return hist / hist.sum()  # 歸一化,便于顯示hist_original = calculate_histogram(img)
hist_global = calculate_histogram(global_eq)
hist_clahe = calculate_histogram(clahe_eq)# 5. 顯示結果(Matplotlib默認RGB,灰度圖直接顯示)
plt.figure(figsize=(15, 10))# 圖像顯示
plt.subplot(2, 3, 1)
plt.imshow(img, cmap="gray")
plt.title("原圖")
plt.axis("off")plt.subplot(2, 3, 2)
plt.imshow(global_eq, cmap="gray")
plt.title("全局直方圖均衡化")
plt.axis("off")plt.subplot(2, 3, 3)
plt.imshow(clahe_eq, cmap="gray")
plt.title("CLAHE(自適應均衡化)")
plt.axis("off")# 直方圖顯示
plt.subplot(2, 3, 4)
plt.plot(hist_original, color="black")
plt.title("原圖直方圖")
plt.xlabel("灰度值")
plt.ylabel("概率密度")plt.subplot(2, 3, 5)
plt.plot(hist_global, color="black")
plt.title("全局均衡化直方圖")
plt.xlabel("灰度值")plt.subplot(2, 3, 6)
plt.plot(hist_clahe, color="black")
plt.title("CLAHE直方圖")
plt.xlabel("灰度值")plt.tight_layout()
plt.show()
結果分析:
  • 全局均衡化:整體對比度提升,但可能導致局部過亮(如天空區域泛白);
  • CLAHE:通過分塊均衡化,在提升暗區細節(如建筑陰影)的同時,避免過增強,效果更自然。

案例2:中值濾波(消除椒鹽噪聲)

需求:去除圖像中的椒鹽噪聲(隨機黑白斑點),對比原圖與去噪后的效果。

實現步驟:
  1. 加載灰度圖并手動添加椒鹽噪聲(模擬真實噪聲場景);
  2. 用中值濾波處理噪聲圖像;
  3. 對比原圖、噪聲圖、去噪圖。
代碼:
import cv2
import numpy as np
import matplotlib.pyplot as plt# 1. 加載灰度圖像
img = cv2.imread("lena.jpg", 0)  # 替換為你的圖像路徑(如經典Lena圖)
if img is None:raise ValueError("圖像加載失敗,請檢查路徑是否正確!")# 2. 手動添加椒鹽噪聲(噪聲比例:10%)
def add_salt_pepper_noise(image, noise_ratio=0.1):h, w = image.shapenoise_img = image.copy()# 計算噪聲像素數量noise_pixels = int(h * w * noise_ratio)# 添加鹽噪聲(白色斑點,灰度255)for _ in range(noise_pixels // 2):x = np.random.randint(0, w)y = np.random.randint(0, h)noise_img[y, x] = 255# 添加椒噪聲(黑色斑點,灰度0)for _ in range(noise_pixels // 2):x = np.random.randint(0, w)y = np.random.randint(0, h)noise_img[y, x] = 0return noise_imgnoise_img = add_salt_pepper_noise(img, noise_ratio=0.1)# 3. 中值濾波處理(核大小為3x3,需為奇數)
median_filtered = cv2.medianBlur(noise_img, ksize=3)  # ksize可調整為5、7(核越大去噪越強,但細節越模糊)# 4. 顯示結果
plt.figure(figsize=(12, 4))plt.subplot(1, 3, 1)
plt.imshow(img, cmap="gray")
plt.title("原圖")
plt.axis("off")plt.subplot(1, 3, 2)
plt.imshow(noise_img, cmap="gray")
plt.title("添加椒鹽噪聲(10%)")
plt.axis("off")plt.subplot(1, 3, 3)
plt.imshow(median_filtered, cmap="gray")
plt.title("中值濾波(3x3核)")
plt.axis("off")plt.tight_layout()
plt.show()
結果分析:
  • 噪聲圖:出現明顯的黑白斑點(椒鹽噪聲),細節被掩蓋;
  • 中值濾波后:大部分噪聲被消除,圖像細節(如面部輪廓、眼睛)保留較好,這是因為中值對脈沖噪聲的抑制效果優于均值濾波。

三、總結

圖像預處理算法的選擇需結合具體任務和圖像問題

  • 若圖像對比度低:優先用CLAHE(優于全局均衡化);
  • 若圖像有椒鹽噪聲:優先用中值濾波(核大小根據噪聲強度調整);
  • 若需統一圖像尺寸:用縮放(雙線性插值);
  • 若需分離亮度與色彩:將RGB轉為HSV或YCrCb。

上述實現的2個算法是工業界最常用的預處理步驟,可直接集成到目標檢測、圖像分割等 pipeline 中,提升后續模型的精度。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/921036.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/921036.shtml
英文地址,請注明出處:http://en.pswp.cn/news/921036.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MySQL 多表查詢方法

MySQL 多表查詢方法MySQL 多表查詢用于從多個表中檢索數據&#xff0c;通常通過關聯字段&#xff08;如外鍵&#xff09;實現。以下是常見的多表查詢方式&#xff1a;內連接&#xff08;INNER JOIN&#xff09;內連接返回兩個表中匹配的行。語法如下&#xff1a;SELECT 列名 F…

網絡斷連與業務中斷的全鏈路診斷與解決之道(面試場景題)

目錄 1. 網絡鏈路的“命脈”:從物理層到應用層的排查邏輯 物理層:別小看那一根網線 數據鏈路層:MAC地址和交換機的“恩怨情仇” 工具推薦:抓包初探 2. 網絡層的“幕后黑手”:IP沖突與路由迷霧 IP沖突:誰搶了我的地址? 路由問題:數據包的“迷路”之旅 3. 傳輸層與…

英偉達Newton與OpenTwins如何重構具身智能“伴隨式數采”范式

具身智能的“數據饑荒”&#xff1a;行業痛點與技術瓶頸的深度剖析1.1 具身智能的現狀與核心挑戰Embodied AI的落地之路面臨著多重嚴峻挑戰。在算法層面&#xff0c;實現通用智能仍需人類的持續介入&#xff0c;并且從感知到行動的認知映射尚未完全打通。在硬件層面&#xff0c…

STM32HAL 快速入門(十六):UART 協議 —— 異步串行通信的底層邏輯

大家好&#xff0c;這里是 Hello_Embed。在前幾篇中&#xff0c;我們通過環形緩沖區解決了按鍵數據丟失問題&#xff0c;而在嵌入式系統中&#xff0c;設備間的數據交互&#xff08;如單片機與電腦、傳感器的通信&#xff09;同樣至關重要。UART&#xff08;通用異步收發傳輸器…

使用 C 模仿 C++ 模板的拙劣方法

如下所示&#xff0c;準備兩個宏&#xff0c;一個定義類型&#xff0c;一個定義容器大小。 使用時只要先定義這兩個宏&#xff0c;然后再包含容器頭文件就能生成不同類型和大小的容器了。但是這種方法只允許在源文件中使用&#xff0c;如果在頭文件中使用&#xff0c;定義不同類…

flume接收處理器:構建高可用與高性能的數據鏈路

flume接收處理器&#xff1a;構建高可用與高性能的數據鏈路 在大規模數據采集場景中&#xff0c;單點故障和性能瓶頸是兩大核心挑戰。Flume 通過 Sink Group 接收處理器&#xff08;Processor&#xff09; 機制&#xff0c;提供了強大的故障轉移&#xff08;Failover&#xf…

高級Kafka應用之流處理

40 Kafka Streams與其他流處理平臺的差異在哪里&#xff1f; 什么是流處理平臺&#xff1f; “Streaming Systems”一書是這么定義“流處理平臺”的&#xff1a;流處理平臺&#xff08;Streaming System&#xff09;是處理無限數據集&#xff08;Unbounded Dataset&#xff09;…

Custom SRP - LOD and Reflections

1 LOD Groups 場景中對象越多,場景就越豐富,但是過多的對象,也會增加 CPU 和 GPU 的負擔.同時如果對象最終渲染在屏幕上后覆蓋的像素太少,就會產生模糊不清的像素點/噪點.如果能夠不渲染這些過小的對象,就能解決噪點問題,同時釋放 CPU GPU,去處理更重要的對象. 裁剪掉這些對象…

【Linux篇章】互聯網身份密碼:解密 Session 與 Cookie 的隱藏玩法和致命漏洞!

本篇摘要 本篇將承接上篇HTTP講解&#xff08; 戳我查看 &#xff09;遺留的關于Cookie與Session的介紹&#xff0c;在本篇&#xff0c;將會介紹Cookie的由來&#xff0c;作用&#xff0c;以及缺點等&#xff0c;進而引出Session&#xff0c;最后介紹一下它們的性質等&#xf…

Postman接口測試工具:高效管理測試用例與環境變量,支持斷言驗證及團隊協作同步

之前跟你們聊過能搭知識網絡的 Obsidian&#xff0c;今天換個偏向接口測試的方向 —— 給你們安利一個 Github 上的「Postman」&#xff0c;它是個接口測試工具&#xff0c;官網能直接下載&#xff08;Postman: The Worlds Leading API Platform | Sign Up for Free&#xff09…

可可圖片編輯 HarmonyOS 上架應用分享

可可圖片編輯 HarmonyOS 上架應用分享 介紹 可可圖片編輯 原名 圖片編輯大師&#xff0c;因為上架審核的時候 &#xff0c;提示與一些已有應用重名&#xff0c;為了避免沖突&#xff0c;需要改名字&#xff0c;所以苦心思考了一分鐘&#xff0c;就調整成 可可圖片編輯。 應用…

Notepad++近期版本避雷

近期Notepad若干版本存在投毒事件&#xff0c;雖然也歡迎大家使用替代軟件&#xff0c;但是Notepad作為一款開源軟件&#xff0c;如有需要也可以繼續白嫖使用&#xff0c;但是請務必避開若干埋雷版本&#xff01; 經檢查&#xff0c;部分版本在幫助菜單中加入了有關tw的部分個人…

【lucene核心】impacts的由來

在 Lucene 的 Impact 概念&#xff08;出現在 ImpactsEnum / Impact 對象里&#xff09;中&#xff1a;字段 含義 freq 當前 term 在該文檔中出現了多少次&#xff08;即詞頻 term frequency&#xff09;。 norm 當前 文檔在該字段中的長度因子&#xff08;即之前 norms 里保存…

基于Echarts+HTML5可視化數據大屏展示-惠民服務平臺

效果展示代碼結構&#xff1a;主要代碼實現 index.html布局 <!doctype html> <html><head><meta charset"utf-8"><title>雙數智慧公衛-傳染病督導平臺</title><meta http-equiv"refresh" content"60;urlhttps…

【Flink】DataStream API:執行環境、執行模式、觸發程序執行

目錄執行環境getExecutionEnvironmentcreateLocalEnvironmentcreateRemoteEnvironment執行模式流執行模式&#xff08;Streaming&#xff09;批執行模式&#xff08;Batch&#xff09;自動模式&#xff08;AutoMatic&#xff09;觸發程序執行DataStream API是Flink的核心層API&…

CentOS7.6

騰訊云服務器 騰訊云 產業智變云啟未來 - 騰訊 服務器在控制臺顯示 點擊進入面板&#xff0c;顯示所有信息 現在來安裝桌面的遠程控制軟件 寶塔SSH終端:一款同時支持SSH和SFTP客戶端的免費軟件! 點擊立即下載 在云服務器的實例列表復制公網ip 密碼就是服務器的密碼&#xff…

前端架構知識體系:常見圖片格式詳解與最佳實踐

前端開發必備&#xff1a; 在前端開發中&#xff0c;合理選擇圖片格式直接影響網頁加載性能、用戶體驗和帶寬成本。本文將系統梳理常見圖片格式&#xff0c;分析它們的優缺點、壓縮原理、兼容性和推薦使用場景&#xff0c;并提供前端優化實戰建議。1. JPEG / JPG 全稱&#xff…

ARM的編程模型

ARM的編程模型 ARM 的編程模型指的是從程序員&#xff08;特別是匯編程序員和編譯器設計者&#xff09;視角所看到的 ARM 處理器架構。它定義了程序員可以使用的資源、數據操作方式以及規則&#xff0c;主要包括&#xff1a;寄存器組、數據類型、內存訪問方式、執行狀態和異常處…

最大熵強化學習相比傳統強化學習,有什么缺點?

要理解最大熵強化學習&#xff08;MaxEnt RL&#xff09;相比傳統強化學習&#xff08;如DQN、PPO、DDPG等&#xff09;的缺點&#xff0c;首先需要明確兩者的核心差異&#xff1a;傳統RL的目標是“最大化累積獎勵”&#xff0c;而MaxEnt RL在該目標基礎上額外增加了“最大化策…

python生成器與協程深度剖析

目錄 生成器 傳統列表 vs 生成器對比 yield機制深度解析 生成器的高級用法 協程的演進:從yield到async/await 基于yield的協程 現代async/await語法 協程的錯誤處理和超時控制 異步生成器與異步迭代器 異步生成器 異步迭代器實現 實戰案例:異步爬蟲框架設計 生成器…