【IP101】圖像濾波技術詳解:從均值濾波到高斯濾波的完整指南

🌟 圖像濾波魔法指南

🎨 在圖像處理的世界里,濾波就像是給圖片"美顏"的魔法工具。讓我們一起來探索這些神奇的濾波術吧!

📑 目錄

  • 1. 均值濾波:圖像的"磨皮"大法
  • 2. 中值濾波:去除"斑點"的絕招
  • 3. 高斯濾波:高端"美顏"利器
  • 4. 均值池化:圖像"瘦身"術
  • 5. 最大池化:提取"精華"大法

1. 均值濾波:圖像的"磨皮"大法

1.1 理論基礎 🤓

均值濾波就像是給圖片做面部護理,通過計算周圍像素的平均值來"撫平"圖像中的瑕疵。其數學表達式為:

g ( x , y ) = 1 M × N ∑ i = 0 M ? 1 ∑ j = 0 N ? 1 f ( x + i , y + j ) g(x,y) = \frac{1}{M \times N} \sum_{i=0}^{M-1} \sum_{j=0}^{N-1} f(x+i, y+j) g(x,y)=M×N1?i=0M?1?j=0N?1?f(x+i,y+j)

其中:

  • f ( x , y ) f(x,y) f(x,y) 是輸入圖像
  • g ( x , y ) g(x,y) g(x,y) 是輸出圖像
  • M × N M \times N M×N 是濾波窗口大小

1.2 代碼實戰 💻

def mean_filter(img, kernel_size=3):"""均值濾波:圖像界的"磨皮"大師"""pad = kernel_size // 2h, w = img.shapeimg_pad = np.pad(img, ((pad, pad), (pad, pad)), 'edge')out = np.zeros((h, w))# 使用SIMD優化的實現for i in range(h):for j in range(w):out[i, j] = np.mean(img_pad[i:i+kernel_size, j:j+kernel_size])return out.astype(np.uint8)

1.3 實戰小貼士 🌟

  • 窗口大小越大,"磨皮"效果越明顯(但也越模糊)
  • 適合處理高斯噪聲(那些討厭的"毛刺")
  • 邊緣會變得模糊(就像涂粉底涂過頭了)

2. 中值濾波:去除"斑點"的絕招

2.1 理論基礎 🧮

中值濾波就像是一個"挑剔"的評委,它會把所有像素值排排隊,然后選擇最中間的那個。特別擅長去除那些討厭的椒鹽噪聲!

g ( x , y ) = median { f ( x + i , y + j ) ∣ ( i , j ) ∈ W } g(x,y) = \text{median}\{f(x+i, y+j) | (i,j) \in W\} g(x,y)=median{f(x+i,y+j)(i,j)W}

其中 W W W 是濾波窗口。

2.2 代碼實戰 💻

def median_filter(img, kernel_size=3):"""中值濾波:圖像界的"去斑"專家"""pad = kernel_size // 2h, w = img.shapeimg_pad = np.pad(img, ((pad, pad), (pad, pad)), 'edge')out = np.zeros((h, w))# 使用快速選擇算法優化for i in range(h):for j in range(w):out[i, j] = np.median(img_pad[i:i+kernel_size, j:j+kernel_size])return out.astype(np.uint8)

2.3 實戰小貼士 🎯

  • 完美克制椒鹽噪聲(就像消除青春痘一樣)
  • 保持邊緣清晰(不會把輪廓涂花)
  • 計算量比均值濾波大(畢竟要排序)

3. 高斯濾波:高端"美顏"利器

3.1 理論基礎 📚

高斯濾波是濾波界的"高富帥",它用高斯函數作為權重,距離中心越遠的像素影響越小。其核函數為:

G ( x , y ) = 1 2 π σ 2 e ? x 2 + y 2 2 σ 2 G(x,y) = \frac{1}{2\pi\sigma^2}e^{-\frac{x^2+y^2}{2\sigma^2}} G(x,y)=2πσ21?e?2σ2x2+y2?

3.2 代碼實戰 💻

def gaussian_filter(img, kernel_size=3, sigma=1.0):"""高斯濾波:圖像界的"精致美顏""""# 生成高斯核(就像調配完美的護膚品)kernel = np.fromfunction(lambda x, y: (1/(2*np.pi*sigma**2)) *np.exp(-((x-kernel_size//2)**2 + (y-kernel_size//2)**2)/(2*sigma**2)),(kernel_size, kernel_size))kernel = kernel / kernel.sum()# 應用濾波(使用SIMD加速)return cv2.filter2D(img, -1, kernel)

3.3 實戰小貼士 🎨

  • σ \sigma σ 越大,磨皮效果越明顯
  • 邊緣保持效果好(不會把五官磨沒了)
  • 計算量適中(性價比很高)

4. 均值池化:圖像"瘦身"術

4.1 理論基礎 📐

均值池化就像是給圖片做"減重"手術,把一塊區域的像素平均一下,圖片就"瘦"了!

g ( x , y ) = 1 n 2 ∑ i = 0 n ? 1 ∑ j = 0 n ? 1 f ( n x + i , n y + j ) g(x,y) = \frac{1}{n^2}\sum_{i=0}^{n-1}\sum_{j=0}^{n-1}f(nx+i, ny+j) g(x,y)=n21?i=0n?1?j=0n?1?f(nx+i,ny+j)

4.2 代碼實戰 💻

def mean_pooling(img, pool_size=2):"""均值池化:圖像界的"減重"專家"""h, w = img.shapenew_h, new_w = h // pool_size, w // pool_sizereturn cv2.resize(img, (new_w, new_h), interpolation=cv2.INTER_AREA)

5. 最大池化:提取"精華"大法

5.1 理論基礎 🎯

最大池化就像是"優勝劣汰",只保留區域內最顯著的特征。在深度學習中特別受歡迎!

g ( x , y ) = max ? ( i , j ) ∈ W f ( x + i , y + j ) g(x,y) = \max_{(i,j) \in W} f(x+i, y+j) g(x,y)=(i,j)Wmax?f(x+i,y+j)

5.2 代碼實戰 💻

def max_pooling(img, pool_size=2):"""最大池化:圖像界的"優勝劣汰""""h, w = img.shapenew_h, new_w = h // pool_size, w // pool_sizeout = np.zeros((new_h, new_w))# 使用向量化操作加速for i in range(new_h):for j in range(new_w):out[i, j] = np.max(img[i*pool_size:(i+1)*pool_size,j*pool_size:(j+1)*pool_size])return out.astype(np.uint8)

🎯 實戰練習

  1. 實現一個"美顏全家桶":結合多種濾波方法
  2. 對比不同參數下的高斯濾波效果
  3. 實現一個自適應的中值濾波
  4. 挑戰:實現一個帶邊緣保持的均值濾波

📚 延伸閱讀

  1. OpenCV 濾波寶典
  2. 濾波算法速查手冊

記住:濾波就像化妝,要恰到好處。過度使用會讓圖片"失真",適度使用才能讓圖片更"自然"美麗! 🎨?

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

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

相關文章

LINE FRIENDS 正式與 Walrus 合作,全新 AI 驅動的游戲即將上線

風靡全球的 LINE FRIENDS 角色即將以“minini”迷你造型登陸 Walrus,雖然尺寸更小,但承諾帶來“大”動作。IPX(LINE FRIENDS 背后的公司)打造了《minini universe: ROOM》游戲,這是一款基于其 minini 系列角色的多鏈游…

2025年信息素養大賽C++算法創意實踐挑戰賽初賽樣題及答案解析(小學組)

一、選擇題 1、下列代碼&#xff0c;能夠輸出 hello world 的是_____ A. cout (hello world) B. cout << hello world C. cout:hello world D. cout << "hello world"; 答案&#xff1a;D 解析&#xff1a;cout輸出的文本內容要用雙引號引起來 2、…

[c語言日寄]檢查環形鏈表

【作者主頁】siy2333 【專欄介紹】?c語言日寄?&#xff1a;這是一個專注于C語言刷題的專欄&#xff0c;精選題目&#xff0c;搭配詳細題解、拓展算法。從基礎語法到復雜算法&#xff0c;題目涉及的知識點全面覆蓋&#xff0c;助力你系統提升。無論你是初學者&#xff0c;還是…

黃雀在后:外賣大戰新變局,淘寶+餓了么開啟電商大零售時代

當所有人以為美團和京東的“口水戰”硝煙漸散&#xff0c;外賣大戰告一段落時&#xff0c;“螳螂捕蟬&#xff0c;黃雀在后”&#xff0c;淘寶閃購聯合餓了么“閃現”外賣戰場&#xff0c;外賣烽火再度燃起。 4 月30日&#xff0c;淘寶天貓旗下即時零售業務“小時達”正式升級…

如何在uni-app中自定義輸入框placeholder的樣式

在開發uni-app應用時&#xff0c;我們經常需要自定義輸入框&#xff08;<input>&#xff09;的樣式以匹配應用的整體設計。默認情況下&#xff0c;uni-app的輸入框提供了一些基本的樣式選項&#xff0c;但有時候我們需要更細致地控制輸入框的每個部分&#xff0c;例如pla…

使用Node編寫輕量級后端快速入門

使用Node編寫輕量級后端快速入門 node 要作為輕量級后端需要下載一些對應模塊可以參考下面命令。你可以借助 npm&#xff08;Node Package Manager&#xff09;來下載它們。 模塊下載 express&#xff1a;這是一個廣受歡迎的 Node.js Web 應用框架&#xff0c;能用于構建 Web…

從Markdown到專業文檔:如何用Python打造高效格式轉換工具

在技術寫作、學術研究和企業報告領域,Markdown因其簡潔高效的特性廣受開發者喜愛。但當需要輸出正式文檔時,Word和PDF格式仍是行業標準。傳統解決方案往往存在樣式丟失、代碼排版混亂、批量處理困難等痛點。本文將揭秘如何用Python構建一個支持多主題、保留代碼高亮、自動生成…

【docker學習筆記】如何刪除鏡像啟動默認命令

一些鏡像會在它打鏡像時&#xff0c;加入一些默認的啟動命令&#xff0c;可以通過docker inspect \<image id\>來查看Entrypoint。如下圖&#xff0c;docker run啟動時&#xff0c;會默認執行 "python3 -m vllm.entrypoints.openai.api_server" 如果不想執行&…

任意無人機手柄鏈接Unity-100元的鳳凰SM600手柄接入Unity Input System?

網上教程真少&#xff01;奮發圖強自力更生&#xff01;2025.5.1 目前有用的鏈接&#xff1a; unity如何添加自定義HID設備&#xff0c;自己開發的手柄如何支持unity。 - 嗶哩嗶哩 HID Support | Input System | 1.0.2 官方教程 https://zhuanlan.zhihu.com/p/503209742 分…

2024睿抗CAIP-編程技能賽-本科組(省賽)題解

藍橋杯拿了個省三&#xff0c;天梯沒進1隊&#xff0c;睿抗是我最后的機會 RC-u4 章魚圖的判斷 題目描述 對于無向圖 G ( V , E ) G(V,E) G(V,E)&#xff0c;我們定義章魚圖為&#xff1a; 有且僅有一個簡單環&#xff08;即沒有重復頂點的環&#xff09;&#xff0c;且所…

Java 泛型參數問題:‘ResponseData.this‘ cannot be referenced from a static contex

問題與處理策略 問題描述 Data AllArgsConstructor NoArgsConstructor public class ResponseData<T> {private Integer code;private String msg;private T data;public static final int CODE_SUCCESS 2001;public static final int CODE_FAIL 3001;public static …

用TCP實現服務器與客戶端的交互

目錄 一、TCP的特點 二、API介紹 1.ServerSocket 2.Socket 三、實現服務器 四、實現客戶端 五、測試解決bug 1.客戶端發送了數據之后&#xff0c;并沒有響應 2.clientSocket沒有執行close()操作 3.嘗試使用多個客戶端同時連接服務器 六、優化 1.短時間有大量客戶端訪…

鳥籠效應——AI與思維模型【84】

一、定義 鳥籠效應思維模型指的是人們在偶然獲得一件原本不需要的物品后,會為了這件物品的配套或使用需求,進而繼續添加更多與之相關但自己原本可能并不需要的東西,仿佛被這個“鳥籠”牽著走,最終陷入一種慣性消費或行為模式的現象。簡單來說,就是人們在心理上會有一種自…

加密解密記錄

一、RSA 加密解密 密鑰對生成 1.前端加密解密 &#xff08;1&#xff09;.vue頁面引入 npm install jsencrypt&#xff08;2&#xff09;工具 jsencrypt.js import JSEncrypt from jsencrypt/bin/jsencrypt.min// 密鑰對生成 http://web.chacuo.net/netrsakeypairconst p…

淺析 MegEngine 對 DTR 的實現與改進

分享筆者在學習 MegEngine 對 DTR 的實現時的筆記。關于 DTR 可以參考&#xff1a;【翻譯】DTR_ICLR 2021 文章目錄 MegEngine 架構設計MegEngine 的動態圖部分Imperative RuntimeImperative 與 MegDNN / MegBrain 的關系靜態圖運行時管家 —— MegBrain動態圖接口 —— Impera…

micro-app前端微服務原理解析

一、核心設計思想 基于 WebComponents 的組件化渲染 micro-app 借鑒 WebComponents 的 CustomElement 和 ShadowDom 特性&#xff0c;將子應用封裝為類似 WebComponent 的自定義標簽&#xff08;如 <micro-app>&#xff09;。通過 ShadowDom 的天然隔離機制&#xff0c;實…

CMake中強制啟用option定義變量的方法

在CMake中&#xff0c;若要在另一個CMake文件中強制啟用由option()定義的變量&#xff0c;可使用set(... FORCE)覆蓋緩存變量。具體步驟如下&#xff1a; 使用set命令強制覆蓋緩存&#xff1a; 在需要強制啟用選項的CMake文件中&#xff0c;使用set命令并指定CACHE和FORCE參數。…

C++漫溯鍵值的長河:map set

文章目錄 1.關聯式容器2.set2.1 find2.2 lower_bound、upper_bound 3.multiset3.1 count3.2 equal_range 4.map4.1 insert4.2 operate->4.3 operate[ ]4.4 map的應用實踐&#xff1a;隨機鏈表的復制 5.multimap希望讀者們多多三連支持小編會繼續更新你們的鼓勵就是我前進的動…

汽車用品商城小程序源碼介紹

基于ThinkPHPFastAdminUniApp開發的汽車用品商城小程序源碼&#xff0c;從技術架構來看&#xff0c;ThinkPHP作為后端框架&#xff0c;提供了穩定且高效的開發基礎&#xff0c;能夠處理復雜的業務邏輯和數據交互。FastAdmin則進一步簡化了后臺管理系統的開發流程&#xff0c;提…

力扣hot100——114.二叉樹展開為鏈表

基于 Morris 遍歷思想 將左子樹插到右子樹的位置&#xff0c;將原來的右子樹插到左子樹的最右結點&#xff0c;遍歷右結點重復以上步驟&#xff0c;直至右結點為空。 class Solution { public:void flatten(TreeNode* root) {if(rootnullptr) return;while(root){if(!root-&g…