日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Programming Computer Vision with Python (学习笔记七)

發布時間:2025/3/21 python 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Programming Computer Vision with Python (学习笔记七) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

數學形態學(mathematical morphology)關注的是圖像中的形狀,它提供了一些方法用于檢測形狀和改變形狀。起初是基于二值圖像提出的,后來擴展到灰度圖像。二值圖像就是:每個像素的值只能是0或1,1代表描繪圖像的點,0代表背景。

基本的形態學運算包括:腐蝕(erosion)膨脹(dilation)開(opening)閉(closing),對于這些運算,都需要用到被稱為結構元素(Structuring element)的模板,一般為方形,以小矩陣的形式表示,但它的元素的值只能是0或1,它代表的是一個集合,這個集合罩在原圖像上,可以跟原圖像的形狀進行集合運算。

腐蝕(erosion)

要講清楚去處過程不容易,直接上圖看效果:

圖中(a)為原圖像,(b)為腐蝕運算后結果,可以看出除了字母筆刷變細了之外,黑色背景的噪點也都不見了,(c)是膨脹運算結果,字母筆刷比原圖像粗。

ok,現在看腐蝕是怎么實現的,還是先看圖:

如圖所示,(a)是3×3結構元素,相當于:

array([[ 1., 1., 1.],[ 1., 1., 1.],[ 1., 1., 1.]])

圖中標識出了它的中心點。

結構元素的設置也可以是其它大小,也不一定全是1(黑點),比如是一個3×3十字形

[[0,1,0],[1,1,1],[0,1,0]]

(b)為待處理的原圖像,我們把其中由所有黑點組成的集合設為X

(c)為腐蝕后的結果,黑色點就是經過腐蝕之后保留下來的點,灰色的點表示被排除出去的點,我們看到的效果是X變小了一圈,這也之所以叫腐蝕的原因吧。

可以這樣來形象理解腐蝕運算過程:將結構元素平移到原圖像上某個位置,如果結構元素中所有的黑點(值為1)都落在X里,就把結構元素中心點對應的原圖像的像素點保留下來,否則就排除出去,如(c)所示,假設結構元素蓋在這個位置,這時結構元素下半部還有幾個點沒落在原圖X中,所以將中心點對應的像素點排除出去,從黑色標記為灰色。將結構元素在原圖像上進行平移,直到原圖像的每一個像素都被處理過。

所以這個結果也會把形狀以外的噪點排除掉。

腐蝕函數說明

scipy.ndimage.morphology.binary_erosion(input, structure=None, iterations=1,...)input: 原圖像二值圖 structure: 即結構元素,默認為3×3十字形 iterations: 表示要連續應用腐蝕多少次返回腐蝕后二值圖結果,ndarray類型

示例:

>>> a = np.zeros((7,7), dtype=np.int) >>> a[1:6, 2:5] = 1 >>> a #原圖像二值圖,注意中間由1組成的矩形形狀 array([[0, 0, 0, 0, 0, 0, 0],[0, 0, 1, 1, 1, 0, 0],[0, 0, 1, 1, 1, 0, 0],[0, 0, 1, 1, 1, 0, 0],[0, 0, 1, 1, 1, 0, 0],[0, 0, 1, 1, 1, 0, 0],[0, 0, 0, 0, 0, 0, 0]])>>> ndimage.binary_erosion(a).astype(a.dtype) #可以看出矩形形狀被"腐蝕"了一圈 array([[0, 0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0],[0, 0, 0, 1, 0, 0, 0],[0, 0, 0, 1, 0, 0, 0],[0, 0, 0, 1, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0]])

膨脹(dilation)

類似地:

如圖(c)就是膨脹的結果,運算過程跟腐蝕類似,只不過對像素的排除判斷不一樣,膨脹的判斷方式是:只要結構元素中有一個黑點(值為1)落在X集合里,就把結構元素中心點對應的原圖像的像素點保留下來,否則就排除出去。

膨脹函數scipy.ndimage.morphology.binary_dilation與腐蝕類似,使用示例:

>>> a = np.zeros((5, 5)) >>> a[2, 2] = 1 >>> a array([ [ 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0.], [ 0., 0., 1., 0., 0.], [ 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0.]]) >>> ndimage.binary_dilation(a).astype(a. dtype) #binary_dilation第二個參數可指定結構元素,默認為3×3十字形 array([ [ 0., 0., 0., 0., 0.], [ 0., 0., 1., 0., 0.], [ 0., 1., 1., 1., 0.], [ 0., 0., 1., 0., 0.], [ 0., 0., 0., 0., 0.]])

我們從以上的效果圖可以看到,腐蝕和膨脹可以改變形狀,同時也可以去背景噪點。
另外,把形狀的膨脹結果減去它的腐蝕結果,可以得到形狀的粗略邊緣以及角點。

開(opening)

先對原圖像進行腐蝕,再膨脹,就是開運算。有什么用呢?簡單點說它可以去除與結構元素大小相當的孔洞和碎片。如果一處圖像中有多個形狀,開運算可以把那些只有一點點粘連的形狀分開。因為那點粘連的地方被去除了。
簡單示例:

>>> a = np.zeros((5,5), dtype=np.int) >>> a[1:4, 1:4] = 1; a[4, 4] = 1 >>> a #原圖像,注意右下角有個1,表示零散的碎片 array([[0, 0, 0, 0, 0],[0, 1, 1, 1, 0],[0, 1, 1, 1, 0],[0, 1, 1, 1, 0],[0, 0, 0, 0, 1]])>>> ndimage.binary_opening(a, structure=np.ones((3,3))).astype(np.int) array([[0, 0, 0, 0, 0],[0, 1, 1, 1, 0],[0, 1, 1, 1, 0],[0, 1, 1, 1, 0],[0, 0, 0, 0, 0]]) #基于3×3全1的結構元素應用開運算,把原圖像角落的1去掉>>> ndimage.binary_opening(a).astype(np.int) array([[0, 0, 0, 0, 0],[0, 0, 1, 0, 0],[0, 1, 1, 1, 0],[0, 0, 1, 0, 0],[0, 0, 0, 0, 0]]) #還可以用于平滑邊角,也就是四角處縮小變平滑了,如果形狀與形狀有邊角的粘連,就可以分開

閉(closing)

與開運算相反,先對原圖進行膨脹,再腐蝕,就是閉運算。閉運算可以填充圖像中的孔洞,連接一些缺口和碎片,變成塊狀。舉個應用場景——車牌定位,如下圖:

右圖是使用通過簡單的算法得到車的粗略邊角,車牌位置像是一堆散點,如果對這個邊角圖運用閉運算可以得到這樣的效果:

車牌的位置變成一個接近車牌形狀的矩形,為下一步檢測提供了便利。

閉運算函數ndimage.binary_closing的用法:

>>> a = np.zeros((5,5), dtype=np.int) >>> a[1:-1, 1:-1] = 1; a[2,2] = 0 >>> a #原圖像,注意中間有個0,表示形狀里面有個空洞 array([[0, 0, 0, 0, 0],[0, 1, 1, 1, 0],[0, 1, 0, 1, 0],[0, 1, 1, 1, 0],[0, 0, 0, 0, 0]])>>> ndimage.binary_closing(a).astype(np.int) array([[0, 0, 0, 0, 0],[0, 1, 1, 1, 0],[0, 1, 1, 1, 0],[0, 1, 1, 1, 0],[0, 0, 0, 0, 0]]) #應用閉運算之后,空洞被填充了

開閉運算原理看似簡單,但很強大,只要結構元素選取得當,可以做很多事情。

對象計數(Counting Objects)

這里說的對象是指圖像中與周圍沒有連通的單獨的形狀,我們的目標是要計算這些對象的個數,計算對象個數可以使用函數:

label, num_features = scipy.ndimage.measurements.label(input, structure=None, output=None) 參數 input: 數組類型,其中元素非0值表示對象組成的點,0表示圖像背景 structure: 結構元素,用于檢測對象的連通特征,默認是3×3十字形返回值 label: 返回與input一樣的大小,但是把對象標記出來 num_features:對象的個數

用法簡單示例:

>>> a = np.array([[0,0,1,1,0,0], ... [0,0,0,1,0,0], ... [1,1,0,0,1,0], ... [0,0,0,1,0,0]]) >>> labeled_array, num_features = measurements.label(a) #使用默認3×3十字形結構元素 >>> print(num_features) 4 >>> print(labeled_array) #打印被識別出來的對象的位置,分別用1,2,3...遞增的下標標記出來,所以labeled_array可以當成灰度圖打印出來,被標識的對象的灰度從黑到白變化 array([[0, 0, 1, 1, 0, 0],[0, 0, 0, 1, 0, 0],[2, 2, 0, 0, 3, 0],[0, 0, 0, 4, 0, 0]])

從上面例子看出,使用默認3×3十字形結構元素,檢測時,只有水平和垂直連通才認為像素屬于同一個對象,對角連通不算,如果要把對角連通當作是同一個對象來計算,可以指定結構元素為:

[[1,1,1],[1,1,1],[1,1,1]]

有時候,因受噪聲影響,對象之間有一點邊角的粘連,人眼可以很容易分辨出是兩個對象,但要讓label函數理解這一點,可以使用前面提到的開運算先對把對象稍微分開,再把結果傳給label函數進行計數,下面給出一個具體的圖像進行示例:

from PIL import Image import numpy as np from scipy.ndimage import measurements,morphology import matplotlib.pyplot as pltim = np.array(Image.open('house.png').convert('L')) im = 1 * (im < 128) #把灰度圖像轉為二值圖,即灰度少于128的當成圖像黑點,否則當作背景label_from_origin, num_from_origin = measurements.label(im)im_open = morphology.binary_opening(im, np.ones((9, 5)), iterations=2) #運用了一個9×5全1的結構元素,并連續應用兩次開運算 label_from_open, num_from_open = measurements.label(im_open)#以下是畫圖 index = 221 plt.subplot(index) plt.imshow(im) plt.title('original') plt.axis('off')plt.subplot(index + 1) plt.imshow(label_from_origin) plt.title('%d objects' % num_from_origin) plt.axis('off')plt.subplot(index + 2) plt.imshow(im_open) plt.title('apply opening') plt.axis('off')plt.subplot(index + 3) plt.imshow(label_from_open) plt.title('%d objects' % num_from_open) plt.axis('off')#plt.gray() #為了更好的看出對象的分離,故意不用灰度顯示 plt.show()

效果圖如下,第二組(即第二行)是應用開運算之后的圖像及計算結果,跟第一組相比,對象計數增加了,我在第二組圖中圈出了應用開運算之后的主要變化之處:

小結

上面介紹的用于二值圖的一些函數,也有其對應的用于灰度圖像的函數,包括:

  • grey_erosion()

  • grey_dilation()

  • grey_opening()

  • grey_closing()

下一節學習圖像去噪。
你還可以查看其它筆記。

總結

以上是生活随笔為你收集整理的Programming Computer Vision with Python (学习笔记七)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 天堂a在线 | 免费观看黄网站 | 国产精品13p| 一级a毛片 | 国产成人欧美一区二区三区91 | 国产日韩一区二区三区在线观看 | 久久91精品 | 懂色一区二区二区av免费观看 | 亚洲婷婷小说 | 男人天堂亚洲天堂 | 黄色工厂这里只有精品 | 亚洲精品传媒 | 91精品国产综合久久国产大片 | 特黄特色大片免费播放器使用方法 | 97桃色| 久久久毛片 | 日韩欧美中文在线观看 | 浪浪视频污 | 无码免费一区二区三区 | 玖草视频在线观看 | 禁漫天堂在线 | 久久婷婷久久 | 户外露出一区二区三区 | 国产传媒欧美日韩 | 99国产精品一区二区三区 | 干爹你真棒插曲mv在线观看 | 正在播放亚洲 | 亚洲AV无码国产精品 | 性一交一乱一乱一视频 | 日本大奶视频 | 国产福利91精品一区二区三区 | 欧美午夜精品久久久 | 午夜精品亚洲 | 男女作爱网站 | 可以免费观看av | 先锋av资源网 | 国产第一草草影院 | 纯爱无遮挡h肉动漫在线播放 | 91视频xxx| 高柳家在线观看 | 91精品国产乱码在线观看 | 欧美日韩黄色一区二区 | 小嫩女直喷白浆 | 国产手机看片 | 午夜精品久久久久久久爽 | 久久久一区二区三区 | 天堂成人在线视频 | 一区二区三区久久 | 久久中文网 | 欧美在线观看一区二区三区 | 涩涩视频在线观看 | 天天干天天干天天操 | 老色批网站| 国产伦精品一区二区三区在线观看 | 日韩福利片在线观看 | 蜜桃视频一区二区三区 | 中文字幕麻豆 | 香蕉视频免费网站 | 久久中文字幕人妻 | 伊人久久一区二区三区 | 不良视频在线观看 | 性色AV无码久久一区二区三 | 国产精品青青草 | 有码一区二区三区 | 国产成人免费在线视频 | 黄色大全免费看 | 美女自拍偷拍 | 免费看欧美成人a片无码 | 亚洲av永久无码国产精品久久 | 激情精品 | 毛片日韩| 免费人成网站 | 亚洲乱码国产乱码精品精软件 | 日韩欧美高清在线视频 | 中国特级黄色大片 | 国产精品福利一区二区三区 | 欧美在线网址 | 日本特级黄色大片 | 熟妇高潮喷沈阳45熟妇高潮喷 | 九九热最新 | 玖玖玖视频 | 毛片网站免费 | 国产精品亚洲一区二区三区在线观看 | 免费成人国产 | 免费黄网在线看 | 亚洲天堂手机版 | 久草免费新视频 | 成人久久国产 | 狠狠人妻久久久久久综合麻豆 | www色亚洲| 99视频+国产日韩欧美 | 日韩国产网站 | 特黄特色大片免费 | 国产suv精品一区二区69 | 欧美激情一区二区三区在线 | 色香色香欲天天天影视综合网 | 成年人精品视频 | 色婷婷av一区二区三区大白胸 | 牛人盗摄一区二区三区视频 |