【Python】skimage模块
可以用來(lái)做圖像做處理的模塊有很多,不過(guò)對(duì)于使用python不熟悉,或者剛使用python做圖像處理的時(shí)候,經(jīng)常不知道應(yīng)該選擇使用哪些模塊。比如,scipy中misc和ndimage中都有相應(yīng)的圖像處理函數(shù),現(xiàn)在就介紹一下scikit-image模塊吧:
1)例圖:?
from skimage import datadata里面會(huì)有樣圖,如data.camera()是一張(512, 512)的圖;2)濾波:
from skimage import filters比如高斯濾波,filters.gaussian(camera, 1)比如邊緣檢測(cè):filters.sobel(camera)
3)文件讀取:
from skimage import ioio.imread(filename),其中,filename也可以是URL地址;
io.imsave(path, img).
4)數(shù)據(jù)類(lèi)型轉(zhuǎn)換:
from skimage import img_as_floatcamera_f = img_as_float(camera)將原圖uint8類(lèi)型轉(zhuǎn)變成[-1, 1]之間的范圍;
5)顏色空間轉(zhuǎn)換:
from skimage import colorcolor.rgb2hsvcolor.lab2rgb, etc.
關(guān)于圖像預(yù)處理和增強(qiáng)
6)局部濾波,如filters.sobel_h(img)
7)非局部濾波,如
rom skimage import exposure中exposure.equalize_hist(img)做直方圖均衡;
8)數(shù)學(xué)形態(tài)變換
from skimage import morphology 具體圖形生成:比如morphology.diamond(1)生成菱形;腐蝕操作:morphology.binary_erosion(img, selem=None)
selem表示結(jié)構(gòu)元素,用于設(shè)定局部區(qū)域的形狀和大小。將0值擴(kuò)充到鄰近像素。擴(kuò)大黑色部分,減小白色部分。可用來(lái)提取骨干信息,去掉毛刺,去掉孤立的像素。
膨脹操作:morphology.binary)dilation(img, selem = None)
一般對(duì)二值圖像進(jìn)行操作。找到像素值為1的點(diǎn),將它的鄰近像素點(diǎn)都設(shè)置成這個(gè)值。1值表示白,0值表示黑,因此膨脹操作可以擴(kuò)大白色值范圍,壓縮黑色值范圍。一般用來(lái)擴(kuò)充邊緣或填充小的孔洞。
Opening: erosion + dilation在
注:該操作也適用于非二值圖,即灰度圖,對(duì)應(yīng)的是最小濾波
(scipy.ndimage.morphology同樣也有該操作)
9)圖像分割
基于直方圖分析的二值分割:(Otsu閾值法)如:val = filters.threshold(img)找到閾值,然后通過(guò)mask = img < val得到二值圖
圖像打標(biāo)簽:對(duì)于分割后的圖像,可以給每一個(gè)區(qū)域打標(biāo)簽,如
from skimage import measure all_labels = measure.label(blobs)另外,scipy中也有相應(yīng)操作;
水域分割算法(也叫分水嶺算法):?
from skimage.morphology import watershed from skimage.feature import peak_local_max from scipy import ndimage >>> distance = ndimage . distance_transform_edt ( image ) >>> local_maxi = peak_local_max ( distance , indices = False , footprint = np . ones (( 3 , 3 )), labels = image ) >>> markers = morphology . label ( local_maxi ) >>> labels_ws = watershed ( - distance , markers , mask = image )另一個(gè) 隨機(jī)walker分割: from skimage import segmentation >>> #?Transform markers image so that 0-valued pixels are to >>> #?be labelled, and -1-valued pixels represent background >>> markers [ ~ image ] = - 1 >>> labels_rw = segmentation . random_walker ( image , markers )10)測(cè)量區(qū)域?qū)傩?#xff0c;如面積和周長(zhǎng)
properties = measure.regionprops(labels_rw) >>> [ prop . area for prop in properties ] [770, 1168] >>> [ prop . perimeter for prop in properties ] [100.91..., 126.81...]11)數(shù)據(jù)可視化和交互
matplotlib中提供了plt.imshow等函數(shù),結(jié)合以上濾波、分割(segmentation.clear_border(mask))等使用
另外,skimage也提供顯示圖像的函數(shù),不過(guò)也是基于matplotlib,貌似功能更強(qiáng)大:
from skimage import viewer >>> new_viewer = viewer . ImageViewer ( coins ) >>> new_viewer . show ()For more interaction, plugins can be added to the viewer:
>>>>>> new_viewer = viewer.ImageViewer(coins) >>> from skimage.viewer.plugins import lineprofile>>> new_viewer += lineprofile.LineProfile() >>> new_viewer.show()12)CV中的特征提取
from skimage import feature不同角點(diǎn)特征:
from skimage.feature import corner_harris, corner_subpix, corner_peaks//補(bǔ)充角點(diǎn)特征知識(shí)點(diǎn)
另外skimage.transform提供扭曲和仿射變換操作wrap和AffineTransform
總結(jié)
以上是生活随笔為你收集整理的【Python】skimage模块的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: py-rfcn算法caffe配置,训练及
- 下一篇: 【python 图像处理】skimage