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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python 轮廓矩阵_二进制二维矩阵的python轮廓

發(fā)布時間:2024/10/8 python 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 轮廓矩阵_二进制二维矩阵的python轮廓 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

我想計算一個二元NxM矩陣中一個形狀的凸殼。凸殼算法需要一個坐標(biāo)列表,所以我采用紐比。阿爾格何處(im)具有所有形狀點坐標(biāo)。但是,這些點中的大多數(shù)并沒有對凸包起作用(它們位于形狀的內(nèi)部)。因為凸包計算時間至少與輸入的點數(shù)成正比,所以我設(shè)計了一個想法,預(yù)先過濾掉過多無用的點,只通過那些跨越輪廓的點。這個想法很簡單,對于二進制NxM矩陣中的每一行,我只取最小和最大的索引。例如:im = np.array([[1,1,1,0],

[1,0,1,1],

[1,1,0,1],

[0,0,0,0],

[0,1,1,1]], dtype=np.bool)

outline = somefunc(im)

然后大綱應(yīng)該是(在元組中或者作為一個5x2 numpy數(shù)組,我不介意):

^{pr2}$

任何緊圍繞這個形狀(im)的凸殼,必須是這些點(輪廓)的子集。換句話說,如果“somefunc()”能夠有效地過濾內(nèi)部點,那么它將為凸殼計算節(jié)省時間。在

我有一些代碼可以實現(xiàn)上面的技巧,但我希望有人有一個更聰明(讀得更快)的方法,因為我需要運行它很多次。我的密碼是:# I have a 2D binary field. random for the purpose of demonstration.

import numpy as np

im = np.random.random((320,360)) > 0.9

# This is my algorithm so far. Notice that coords is sorted.

coords = np.argwhere(im)

left = np.roll(coords[:,0], 1, axis=0) != coords[:,0]

outline = np.vstack([coords[left], coords[left[1:]], coords[-1]])

我的另一個想法是使用Python的reduce(),這樣我只需要運行一次坐標(biāo)列表。但我很難找到一個好的約化函數(shù)。在

任何幫助都將不勝感激!在

編輯

同時,我發(fā)現(xiàn)了一種從im直接到outline的更快的方法。至少對于大圖像來說,這要快得多。在顯然沒有外部解決方案的情況下,我把它作為這個問題的解決方案。在

不過,如果有人知道更快的方法,請大聲說出來:)

總結(jié)

以上是生活随笔為你收集整理的python 轮廓矩阵_二进制二维矩阵的python轮廓的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。