python基礎教程pdf,python 近期用到的基礎知識匯總(主要是skimage的相關矩陣變化函數)(二)

 2023-10-06 阅读 31 评论 0

摘要:1.skimage.segmentation.clear_border函數 python基礎教程pdf?clear_border(labels, buffer_size=0, bgval=0, in_place=False)主要作用是清除二值圖像中邊界的1值。例如 >>> import numpy as np>>> from skimage.segmentation import clear_b

1.skimage.segmentation.clear_border函數

python基礎教程pdf?clear_border(labels, buffer_size=0, bgval=0, in_place=False)主要作用是清除二值圖像中邊界的1值。例如

    >>> import numpy as np>>> from skimage.segmentation import clear_border>>> labels = np.array([[0, 0, 0, 0, 0, 0, 0, 1, 0],...                    [0, 0, 0, 0, 1, 0, 0, 0, 0],...                    [1, 0, 0, 1, 0, 1, 0, 0, 0],...                    [0, 0, 1, 1, 1, 1, 1, 0, 0],...                    [0, 1, 1, 1, 1, 1, 1, 1, 0],...                    [0, 0, 0, 0, 0, 0, 0, 0, 0]])>>> clear_border(labels)array([[0, 0, 0, 0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 1, 0, 0, 0, 0],[0, 0, 0, 1, 0, 1, 0, 0, 0],[0, 0, 1, 1, 1, 1, 1, 0, 0],[0, 1, 1, 1, 1, 1, 1, 1, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0]])

2.skimage.measure.label函數

在skimage包中,使用measure子模塊下的label函數即可實現連通區域標記。參數input表示需要處理的二值圖像,connectivity表示判定連通的模式(1代表4連通,2代表8連通),輸出labels為一個從0開始的標記數組。

neighbors:{4,8},int,可選是否使用4或8“連接”。在3D中,4“連接”意味著連接的像素在這個像素點的三個坐標截面(xyz)中任意一個存在4連通,共2+2+2=6種像素點。而對于8-“連通性”意味著連接的像素在這個像素點的任意截面中存在一截面存在8連通即可,共3×3×3-1=26種像素點。 **不推薦使用,

x = [[[1,0,1],[0,1,0],[0,0,1]],[[1,0,0],[0,0,0],[0,0,1]],[[1,0,0],[0,1,0],[0,0,1]]]
x=np.array(x)
print(label(x, neighbors=4))[[[1 0 2][0 3 0][0 0 4]][[1 0 0][0 0 0][0 0 4]][[1 0 0][0 5 0][0 0 4]]]x = [[[1,0,1],[0,1,0],[0,0,1]],[[1,0,0],[0,0,0],[0,0,1]],[[1,0,0],[0,1,0],[0,0,1]]]
x=np.array(x)
print(label(x, neighbors=8))[[[1 0 1][0 1 0][0 0 1]][[1 0 0][0 0 0][0 0 1]][[1 0 0][0 1 0][0 0 1]]]
>>> import numpy as np
>>> x = np.eye(3).astype(int)
>>> print(x)
[[1 0 0][0 1 0][0 0 1]]
>>> print(label(x, connectivity = 1))
[[1 0 0][0 2 0][0 0 3]]
>>> print(label(x, connectivity = 2))
[[1 0 0][0 1 0][0 0 1]]
>>> print(label(x, background = -1))
[[1 2 2][2 1 2][2 2 1]]
>>> x = np.array([[1, 0, 0],
...               [1, 1, 5],
...               [0, 0, 0]])
>>> print(label(x))
[[1 0 0][1 1 2][0 0 0]]

?

3.skimage.measure.regionprops函數

此外,使用measure子模塊中的regionprops()函數可以很方便地對每一個連通區域進行屬性獲取和操作,比如計算面積、外接矩形、凸包面積等等。
計算結果返回為所有連通區域的屬性列表,列表長度為連通區域個數(第i個連通區域的attribute屬性可以通過properties[i].attribute獲取)。

Notes ----- The following properties can be accessed as attributes or keys:

**area** : int Number of pixels of region.

**bbox** : tuple Bounding box ``(min_row, min_col, max_row, max_col)`

**label** : int The label in the labeled input image.

在三維中bbox表示連通區域所有點中最小的xyz,以及最大的xyz加上1.

x = [[[1,0,0],[0,0,0],[0,0,1]],[[1,0,0],[0,0,0],[0,0,1]],[[0,0,0],[0,0,0],[0,0,1]]]
x=np.array(x)
x1=label(x, neighbors=8)
print(x1)
regions = regionprops(x1)
print(regions[0].bbox)
print(regions[0].area)[[[1 0 0][0 0 0][0 0 2]][[1 0 0][0 0 0][0 0 2]][[0 0 0][0 0 0][0 0 2]]]
(0L, 0L, 0L, 2L, 1L, 1L)
2

4.Python函數 dict()。

作用:dict()?函數用于創建一個字典。返回一個字典。

5.Python?enumerate() 函數

enumerate() 函數用于將一個可遍歷的數據對象(如列表、元組或字符串)組合為一個索引序列,同時列出數據和數據下標,一般用在 for 循環當中。

語法

以下是 enumerate() 方法的語法:enumerate(sequence, [start=0])

參數

  • sequence -- 一個序列、迭代器或其他支持迭代對象。
  • start -- 下標起始位置。

返回值

返回 enumerate(枚舉) 對象。

>>>seasons = ['Spring', 'Summer', 'Fall', 'Winter']
>>> list(enumerate(seasons))
[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
>>> list(enumerate(seasons, start=1))       # 下標從 1 開始
[(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]
普通的 for 循環
>>>i = 0
>>> seq = ['one', 'two', 'three']
>>> for element in seq:
...     print i, seq[i]
...     i +=1
... 
0 one
1 two
2 three
for 循環使用 enumerate
>>>seq = ['one', 'two', 'three']
>>> for i, element in enumerate(seq):
...     print i, element
... 
0 one
1 two
2 three

6.skimage.morphology.binary_dilation(image,?selem=None)函數二值圖像的膨脹。

原理:一般對二值圖像進行操作。找到像素值為1的點,將它的鄰近像素點都設置成這個值。1值表示白,0值表示黑,因此膨脹操作可以擴大白色值范圍,壓縮黑色值范圍。一般用來擴充邊緣或填充小的孔洞。

selem表示結構元素,用于設定局部區域的形狀和大小。

分別用邊長為5或15的正方形濾波器對棋盤圖片進行膨脹操作,結果如下:

可見濾波器的大小,對操作結果的影響非常大。一般設置為奇數。

除了正方形的濾波器外,濾波器的形狀還有一些,現列舉如下:

morphology.square: 正方形

morphology.disk: ?平面圓形#disk_12 = disk(6, dtype=np.bool)半徑為6的圓形濾波器

morphology.ball: 球形

morphology.cube: 立方體形

morphology.diamond: 鉆石形

morphology.rectangle: 矩形

morphology.star: 星形

morphology.octagon:?八角形

morphology.octahedron: 八面體

注意,如果處理圖像為非二值圖像(只有0和1兩個值),則可以調用:

skimage.morphology.dilation(image,?selem=None)

7.skimage.morphology.binary_erosion(image,?selem=None)二值圖像腐蝕操作。

原理:和膨脹相反的操作,將0值擴充到鄰近像素。擴大黑色部分,減小白色部分。可用來提取骨干信息,去掉毛刺,去掉孤立的像素。

selem表示結構元素,用于設定局部區域的形狀和大小。

用邊長為5和25的正方形濾波器進行腐蝕濾波結果如下:

注意,如果處理圖像為非二值圖像(只有0和1兩個值),則可以調用:

skimage.morphology.erosion(image,?selem=None)

前面兩點參考:https://blog.csdn.net/haoji007/article/details/52063306。這里邊是基本濾波學蠻全的很好!!!

?

8.skimage.morphology.remove_small_holes(ar, min_size=64, connectivity=1, in_place=False):

移除小于指定尺寸的連續孔,去掉中間的小塊(例子為值為0的區域)。

Examples
--------
>>> from skimage import morphology
>>> a = np.array([[1, 1, 1, 1, 1, 0],
...               [1, 1, 1, 0, 1, 0],
...               [1, 0, 0, 1, 1, 0],
...               [1, 1, 1, 1, 1, 0]], bool)
>>> b = morphology.remove_small_holes(a, 2)#最小值設為2了,默認4連通
>>> b
array([[ True,  True,  True,  True,  True, False],[ True,  True,  True,  True,  True, False],[ True, False, False,  True,  True, False],[ True,  True,  True,  True,  True, False]], dtype=bool)
>>> c = morphology.remove_small_holes(a, 2, connectivity=2)
>>> c
array([[ True,  True,  True,  True,  True, False],[ True,  True,  True, False,  True, False],[ True, False, False,  True,  True, False],[ True,  True,  True,  True,  True, False]], dtype=bool)
>>> d = morphology.remove_small_holes(a, 2, in_place=True)
>>> d is a
True

9.skimage.morphology.binary_closing(image,?selem=None)閉運算函數(非二值化圖像skimage.morphology.closing)

selem表示結構元素,用于設定局部區域的形狀和大小。

先膨脹再腐蝕,可用來填充孔洞。

用邊長為9的圓形濾波器進行閉運算結果如下:

反之還有skimage.morphology.binary_opening(image,?selem=None)開運算函數(非二值化圖像skimage.morphology.opening)

selem表示結構元素,用于設定局部區域的形狀和大小。

先腐蝕再膨脹,可以消除小物體或小斑塊。

用邊長為9的圓形濾波器進行開運算結果如下:

這里還是參考:https://blog.csdn.net/haoji007/article/details/52063306。代碼里面是ball(3)的立體閉運算。說明可以在三維上用。

ps:2019年6月26號,關于skimage庫好的攻略:https://www.jianshu.com/p/f2e88197e81d

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/2/123086.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息