2015-06-16 160 views

回答

4

嘗試這種算法:

  1. 計算平均x和平均y表示在不規則對象的每一個點。這是通過對每個點採用x和y分量並將其添加到總的x和總的y中,然後除以點的數量來完成的。此平均x和平均y點算法爲您提供該對象的非加權中心。

  2. 使用該中心點再次計算不規則對象中每個點的距離。保持最大距離作爲物體的半徑。

  3. 使用中心點和半徑來計算周長。

我提交的證據表明,在對象中距離最遠的2個點之間的距離失敗時會出現一個簡單的三角形。見下圖。另外,計算最遠的兩個點的大O符號是x^2。該算法的big-O是2倍。圖像中圓的直徑將被計算爲20; -10,0和10,0之間的距離。直徑爲20的圓不包含@ 0,-11點。圓的任何移動都會自動移除用於計算圓的直徑的兩個點中的至少一個點,因爲兩個點都在切線上。

enter image description here

+1

這是不正確的,在大多數情況下,所產生的圓圈將觸摸對象一點。外接圓應至少觸及兩點。 – dlavila

+0

你能解釋爲什麼你認爲它失敗了嗎?因爲我很確定他的算法會提供正確的結果。唯一的限制是不規則物體的數據點必須均勻分佈,以便平均值不加權,這是滿足您的需求所必需的。 –

+0

我不得不編輯我的答案,以提供圖像證明兩個最遠點之間的距離失敗。 –

1

假設M是BW面具,只是做:

[b_x,b_y] = find(bwperim(M)== 1) 

檢查這項功能bwperim

+0

警告:'bwperim'需要圖像處理工具箱。而且,這隻能找到沿周邊的位置。這沒有找到包含該對象的圓的直徑。 – rayryeng

+0

我沒有回答所有問題,所以這只是一個幫助... :) –