中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python怎么實現圖像簡單濾波

發布時間:2022-06-29 09:54:40 來源:億速云 閱讀:186 作者:iii 欄目:開發技術

這篇文章主要介紹“python怎么實現圖像簡單濾波”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“python怎么實現圖像簡單濾波”文章能幫助大家解決問題。

引言

對圖像進行濾波,可以有兩種效果:一種是平滑濾波,用來抑制噪聲;另一種是微分算子,可以用來檢測邊緣和特征提取。

skimage庫中通過filters模塊進行濾波操作。

1、sobel算子

sobel算子可用來檢測邊緣

函數格式為:skimage.filters.sobel(image, mask=None)

from skimage import data,filters
import matplotlib.pyplot as plt
img = data.camera()
edges = filters.sobel(img)
plt.imshow(edges,plt.cm.gray)

python怎么實現圖像簡單濾波

2、roberts算子

roberts算子和sobel算子一樣,用于檢測邊緣

調用格式也是一樣的:

edges = filters.roberts(img)

3、scharr算子

功能同sobel,調用格式:

edges = filters.scharr(img)

4、prewitt算子

功能同sobel,調用格式:

edges = filters.prewitt(img)

5、canny算子

canny算子也是用于提取邊緣特征,但它不是放在filters模塊,而是放在feature模塊

函數格式:skimage.feature.canny(image,sigma=1.0)

可以修改sigma的值來調整效果

from skimage import data,filters,feature
import matplotlib.pyplot as plt
img = data.camera()
edges1 = feature.canny(img)   #sigma=1
edges2 = feature.canny(img,sigma=3)   #sigma=3

plt.figure('canny',figsize=(8,8))
plt.subplot(121)
plt.imshow(edges1,plt.cm.gray)  

plt.subplot(122)
plt.imshow(edges2,plt.cm.gray)

plt.show()

python怎么實現圖像簡單濾波

從結果可以看出,sigma越小,邊緣線條越細小。

6、gabor濾波

gabor濾波可用來進行邊緣檢測和紋理特征提取。

函數調用格式:skimage.filters.gabor_filter(image, frequency)

通過修改frequency值來調整濾波效果,返回一對邊緣結果,一個是用真實濾波核的濾波結果,一個是想象的濾波核的濾波結果。

python怎么實現圖像簡單濾波

from skimage import data,filters
import matplotlib.pyplot as plt
img = data.camera()
filt_real, filt_imag = filters.gabor_filter(img,frequency=0.6)   

plt.figure('gabor',figsize=(8,8))

plt.subplot(121)
plt.title('filt_real')
plt.imshow(filt_real,plt.cm.gray)  

plt.subplot(122)
plt.title('filt-imag')
plt.imshow(filt_imag,plt.cm.gray)

plt.show()

python怎么實現圖像簡單濾波

以上為frequency=0.6的結果圖。

python怎么實現圖像簡單濾波

以上為frequency=0.1的結果圖

7、gaussian濾波

多維的濾波器,是一種平滑濾波,可以消除高斯噪聲。

調用函數為:skimage.filters.gaussian_filter(image, sigma)

通過調節sigma的值來調整濾波效果

from skimage import data,filters
import matplotlib.pyplot as plt
img = data.astronaut()
edges1 = filters.gaussian_filter(img,sigma=0.4)   #sigma=0.4
edges2 = filters.gaussian_filter(img,sigma=5)   #sigma=5

plt.figure('gaussian',figsize=(8,8))
plt.subplot(121)
plt.imshow(edges1,plt.cm.gray)  

plt.subplot(122)
plt.imshow(edges2,plt.cm.gray)

plt.show()

python怎么實現圖像簡單濾波

可見sigma越大,過濾后的圖像越模糊

8.median

中值濾波,一種平滑濾波,可以消除噪聲。

需要用skimage.morphology模塊來設置濾波器的形狀。

from skimage import data,filters
import matplotlib.pyplot as plt
from skimage.morphology import disk
img = data.camera()
edges1 = filters.median(img,disk(5))
edges2= filters.median(img,disk(9))

plt.figure('median',figsize=(8,8))

plt.subplot(121)
plt.imshow(edges1,plt.cm.gray)  

plt.subplot(122)
plt.imshow(edges2,plt.cm.gray)

plt.show()

python怎么實現圖像簡單濾波

從結果可以看出,濾波器越大,圖像越模糊。

9、水平、垂直邊緣檢測

上邊所舉的例子都是進行全部邊緣檢測,有些時候我們只需要檢測水平邊緣,或垂直邊緣,就可用下面的方法。

水平邊緣檢測:sobel_h, prewitt_h, scharr_h

垂直邊緣檢測: sobel_v, prewitt_v, scharr_v

from skimage import data,filters
import matplotlib.pyplot as plt
img = data.camera()
edges1 = filters.sobel_h(img)  
edges2 = filters.sobel_v(img) 

plt.figure('sobel_v_h',figsize=(8,8))

plt.subplot(121)
plt.imshow(edges1,plt.cm.gray)  

plt.subplot(122)
plt.imshow(edges2,plt.cm.gray)

plt.show()

python怎么實現圖像簡單濾波

上邊左圖為檢測出的水平邊緣,右圖為檢測出的垂直邊緣。

10、交叉邊緣檢測

可使用Roberts的十字交叉核來進行過濾,以達到檢測交叉邊緣的目的。這些交叉邊緣實際上是梯度在某個方向上的一個分量。

其中一個核:

0   1
-1   0

對應的函數:

roberts_neg_diag(image)

 例:

from skimage import data,filters
import matplotlib.pyplot as plt
img =data.camera()
dst =filters.roberts_neg_diag(img) 

plt.figure('filters',figsize=(8,8))
plt.subplot(121)
plt.title('origin image')
plt.imshow(img,plt.cm.gray)

plt.subplot(122)
plt.title('filted image')
plt.imshow(dst,plt.cm.gray)

python怎么實現圖像簡單濾波

另外一個核:

1   0
0  -1

對應函數為:

roberts_pos_diag(image)

from skimage import data,filters
import matplotlib.pyplot as plt
img =data.camera()
dst =filters.roberts_pos_diag(img) 

plt.figure('filters',figsize=(8,8))
plt.subplot(121)
plt.title('origin image')
plt.imshow(img,plt.cm.gray)

plt.subplot(122)
plt.title('filted image')
plt.imshow(dst,plt.cm.gray)

python怎么實現圖像簡單濾波

關于“python怎么實現圖像簡單濾波”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

建平县| 洪雅县| 佳木斯市| 大冶市| 株洲县| 什邡市| 高邮市| 沂源县| 阿坝县| 红桥区| 舟山市| 农安县| 六盘水市| 哈巴河县| 嫩江县| 巴彦县| 扎囊县| 洛扎县| 秦皇岛市| 庆城县| 义马市| 建昌县| 元谋县| 福安市| 台北市| 建德市| 榆林市| 信丰县| 陆丰市| 安康市| 澜沧| 河北省| 乐平市| 松滋市| 南部县| 金秀| 抚宁县| 乌拉特前旗| 余江县| 衡南县| 游戏|