Perona Malik 演算法Python實現

2021-09-19 10:29:23 字數 938 閱讀 6147

最近正好在學習關於影象處理的東西,需要用到pm(perona_malik)演算法,所以就把自己的一些理解和**貼上來,希望能跟大家一起**。(pm演算法的具體原理可以網上查閱相關資料或者相關書籍,這裡只是簡要介紹大概的實現思路 。)

一般而言,對乙個影象進行提取特徵之前,需要進行降噪濾波處理。最常用的應該是高斯濾波,原理簡單理解,實現也不複雜,但帶來的問題是,高斯雜訊是各向同性濾波,也就是說,它不會區分影象中的邊緣與非邊緣區域,在高斯濾波眼中「一視同仁」,各個方向都是相同程度的濾波,而pm演算法則是各向異性演算法,它會以梯度的大小來「判斷」是邊緣區域或者是非邊緣區域,從而進行不同的處理。

具體來說,pm演算法在經典的「熱傳導方程」的基礎上,引入了乙個「擴散係數c」,這個c值是由具體畫素點的梯度模決定的,梯度模大的地方(邊緣),c值為0,梯度模小的地方(非邊緣),c值較大,結果就是,由於邊緣區域梯度大,會得以保留,不去濾波,而非邊緣區域梯度小,會進行濾波,於是乎,實現了「降噪」+「影象增強」的效果。

原理公式如下:

擴散係數c是由以下兩個公式之一產生的:

其中,x與c都是代表c函式,s是畫素點的梯度模,k是乙個常數,控制梯度響應的值。

整個**實現思路如下:

1、求出各個畫素點的梯度及其梯度模

2、求出每個點梯度模對應的擴散係數c值

3、代入改變後的熱傳導方程中

4、多次迭代,得到目標影象

整個**實現已上傳到這裡,pm演算法python實現。

py 拷貝目錄

將乙個資料夾中到所有目錄或者檔案都拷貝到另外乙個資料夾中 coding utf 8 utility.py import os author lee defcopyfolder sourcedir,targetdir for f in os.listdir sourcedir sourcefile o...

網路程式設計 py

學習目標 如何基於socket程式設計,來開發一款c s架構 c client客戶端 s server服務端 軟體 網路程式設計 實現計算機與計算機間的通訊 通訊協議 tcp 可靠,有狀態的,長連線的協議,像打 一樣 udp 不可靠,無連線,像發簡訊一樣 tcp和udp屬於運輸層 建立tcp sco...

py 語法改正

message hello,full name.title print message 注意 兩對引號的範圍 一對引號括hello 一對引號括感嘆號 切忌不要瞎矇。加號連線的是字串,所以左右兩邊都需要是字串性質的。列表 print 列表名 列印輸出最原始的符號加資料 print 字元名 列印輸出資料...