2011-11-16 55 views
3

我有一個二進制numpy數組,並用scipy.ndimage標記連接區域。是否可以打電話來估計每個標記部分的偏心率?在Python中的偏心度估計

編輯:

我試圖制定標準,查找和折騰的標記部分是比他們寬更長的時間。在下面的數組中,我可能想保留7s並拋出3s。

3 3 0 0 0 0 
3 3 0 7 7 7 
3 3 0 7 7 7 
3 3 0 7 0 7 
3 3 0 0 0 0 
+1

你對偏心度的定義是什麼?你有一個二維數組?你想處理你的慣性張量點嗎? – hpixel

+0

偏心度作爲衡量每個標記斑點如何延伸的度量。這是一個二維數組,是的。如果它也可以用於3,那可能會很好,儘管這可能會在以後。 – ajwood

回答

1

假設您只爲每個標籤分配一次:具有偏心塊的矩陣將具有比空列更多的空行,反之亦然。

labels = [2,3,7] # or whatever you have 
good_labels = [] 
for label in labels: 
    m = matrix == label 
    non_empty_columns = sum(sum(m)>0) 
    non_empty_rows = sum(sum(m.transpose())>0) 
    if 1.0 * non_empty_rows/(non_empty_columns+0.001) > threshold: 
     good_labels.append(label) 

這將刪除非常長的(垂直)blob,轉動行和列以移除水平拉伸的blob。

+1

在很多情況下,這是可行的,但是像「T」形狀的情況呢? – ajwood

2

我想你首先需要一點數學。首先考慮你只有一個標記爲1的斑點。你的矩陣標記將是一個標量場。 你應該首先計算其平均:

mean

其中rho是你的標籤(它沒有索引,因爲它是一個標量)。 然後計算:

tensor

偏心的一個很好的定義是這個矩陣的無痕部分的兩個最大的特徵值的比例(以2D,你將有隻有2個特徵值)。您也可以將其標準化以獲得介於0和1之間的值。 對於scipy,我沒有足夠的使用它來編寫高效的代碼。

+0

這將是完美的。我的直覺告訴我,這只是幾個電話與scipy,但我不知道該怎麼做... – ajwood