python數(shù)字圖像處理之高級(jí)濾波代碼詳解
本文提供許多的濾波方法,這些方法放在filters.rank子模塊內(nèi)。
這些方法需要用戶(hù)自己設(shè)定濾波器的形狀和大小,因此需要導(dǎo)入morphology模塊來(lái)設(shè)定。
1、autolevel
這個(gè)詞在photoshop里面翻譯成自動(dòng)色階,用局部直方圖來(lái)對(duì)圖片進(jìn)行濾波分級(jí)。
該濾波器局部地拉伸灰度像素值的直方圖,以覆蓋整個(gè)像素值范圍。
格式:skimage.filters.rank.autolevel(image, selem)
selem表示結(jié)構(gòu)化元素,用于設(shè)定濾波器。
from skimage import data,color import matplotlib.pyplot as plt from skimage.morphology import disk import skimage.filters.rank as sfr img =color.rgb2gray(data.lena()) auto =sfr.autolevel(img, disk(5)) #半徑為5的圓形濾波器 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(auto,plt.cm.gray)
2、bottomhat 與 tophat
bottomhat: 此濾波器先計(jì)算圖像的形態(tài)學(xué)閉運(yùn)算,然后用原圖像減去運(yùn)算的結(jié)果值,有點(diǎn)像黑帽操作。
bottomhat: 此濾波器先計(jì)算圖像的形態(tài)學(xué)開(kāi)運(yùn)算,然后用原圖像減去運(yùn)算的結(jié)果值,有點(diǎn)像白帽操作。
格式:
skimage.filters.rank.bottomhat(image, selem)
skimage.filters.rank.tophat(image, selem)
selem表示結(jié)構(gòu)化元素,用于設(shè)定濾波器。
下面是bottomhat濾波的例子:
from skimage import data,color import matplotlib.pyplot as plt from skimage.morphology import disk import skimage.filters.rank as sfr img =color.rgb2gray(data.lena()) auto =sfr.bottomhat(img, disk(5)) #半徑為5的圓形濾波器 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(auto,plt.cm.gray)
3、enhance_contrast
對(duì)比度增強(qiáng)。求出局部區(qū)域的最大值和最小值,然后看當(dāng)前點(diǎn)像素值最接近最大值還是最小值,然后替換為最大值或最小值。
函數(shù): enhance_contrast(image, selem)
selem表示結(jié)構(gòu)化元素,用于設(shè)定濾波器。
from skimage import data,color import matplotlib.pyplot as plt from skimage.morphology import disk import skimage.filters.rank as sfr img =color.rgb2gray(data.lena()) auto =sfr.enhance_contrast(img, disk(5)) #半徑為5的圓形濾波器 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(auto,plt.cm.gray)
4、entropy
求局部熵,熵是使用基為2的對(duì)數(shù)運(yùn)算出來(lái)的。該函數(shù)將局部區(qū)域的灰度值分布進(jìn)行二進(jìn)制編碼,返回編碼的最小值。
函數(shù)格式:entropy(image, selem)
selem表示結(jié)構(gòu)化元素,用于設(shè)定濾波器。
from skimage import data,color import matplotlib.pyplot as plt from skimage.morphology import disk import skimage.filters.rank as sfr img =color.rgb2gray(data.lena()) dst =sfr.entropy(img, disk(5)) #半徑為5的圓形濾波器 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)
5、equalize
均衡化濾波。利用局部直方圖對(duì)圖像進(jìn)行均衡化濾波。
函數(shù)格式:equalize(image, selem)
selem表示結(jié)構(gòu)化元素,用于設(shè)定濾波器。
from skimage import data,color import matplotlib.pyplot as plt from skimage.morphology import disk import skimage.filters.rank as sfr img =color.rgb2gray(data.lena()) dst =sfr.equalize(img, disk(5)) #半徑為5的圓形濾波器 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)
6、gradient
返回圖像的局部梯度值(如:最大值-最小值),用此梯度值代替區(qū)域內(nèi)所有像素值。
函數(shù)格式:gradient(image, selem)
selem表示結(jié)構(gòu)化元素,用于設(shè)定濾波器。
from skimage import data,color import matplotlib.pyplot as plt from skimage.morphology import disk import skimage.filters.rank as sfr img =color.rgb2gray(data.lena()) dst =sfr.gradient(img, disk(5)) #半徑為5的圓形濾波器 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)
7、其它濾波器
濾波方式很多,下面不再一一詳細(xì)講解,僅給出核心代碼,所有的函數(shù)調(diào)用方式都是一樣的。
最大值濾波器(maximum):返回圖像局部區(qū)域的最大值,用此最大值代替該區(qū)域內(nèi)所有像素值。
dst =sfr.maximum(img, disk(5))
最小值濾波器(minimum):返回圖像局部區(qū)域內(nèi)的最小值,用此最小值取代該區(qū)域內(nèi)所有像素值。
dst =sfr.minimum(img, disk(5))
均值濾波器(mean) : 返回圖像局部區(qū)域內(nèi)的均值,用此均值取代該區(qū)域內(nèi)所有像素值。
dst =sfr.mean(img, disk(5))
中值濾波器(median): 返回圖像局部區(qū)域內(nèi)的中值,用此中值取代該區(qū)域內(nèi)所有像素值。
dst =sfr.median(img, disk(5))
莫代爾濾波器(modal) : 返回圖像局部區(qū)域內(nèi)的modal值,用此值取代該區(qū)域內(nèi)所有像素值。
dst =sfr.modal(img, disk(5))
otsu閾值濾波(otsu): 返回圖像局部區(qū)域內(nèi)的otsu閾值,用此值取代該區(qū)域內(nèi)所有像素值。
dst =sfr.otsu(img, disk(5))
閾值濾波(threshhold): 將圖像局部區(qū)域中的每個(gè)像素值與均值比較,大于則賦值為1,小于賦值為0,得到一個(gè)二值圖像。
dst =sfr.threshold(img, disk(5))
減均值濾波(subtract_mean): 將局部區(qū)域中的每一個(gè)像素,減去該區(qū)域中的均值。
dst =sfr.subtract_mean(img, disk(5))
求和濾波(sum) :求局部區(qū)域的像素總和,用此值取代該區(qū)域內(nèi)所有像素值。
dst =sfr.sum(img, disk(5))
總結(jié)
以上就是本文關(guān)于python數(shù)字圖像處理之高級(jí)濾波代碼詳解的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站:
python通過(guò)opencv實(shí)現(xiàn)批量剪切圖片
python好玩的項(xiàng)目—色情圖片識(shí)別代碼分享
如有不足之處,歡迎留言指出。
相關(guān)文章
pygame實(shí)現(xiàn)簡(jiǎn)易飛機(jī)大戰(zhàn)
這篇文章主要為大家詳細(xì)介紹了pygame實(shí)現(xiàn)簡(jiǎn)易飛機(jī)大戰(zhàn),python版飛機(jī)大戰(zhàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-09-09記一次pyinstaller打包pygame項(xiàng)目為exe的過(guò)程(帶圖片)
這篇文章主要介紹了記一次pyinstaller打包pygame項(xiàng)目為exe的過(guò)程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03