2013-04-18 91 views
3

我正在做一些與眼睛圖像有關的工作。 我做了邊緣檢測。邊緣就像一條曲線,而不是連續的。我必須假定它是連續的,並找到該曲線的法線。我如何使用MATLAB找到它的法線?如何在圖像中找到邊緣的法線

你可以看到下面的圖片。

Edge image

我想找到法線上面的曲線。 我希望我很清楚。

回答

1

您可能需要考慮對數據進行曲線擬合(基於MSE或其他標準)。我相信二階對於上面的曲線會有好處,一旦你有了一個模型,你就可以計算出每個點的正切值和正常值。

+0

請你詳細描述我。我怎樣才能選擇只有上面的曲線?我不認爲喜歡根據給定行的範圍進行選擇,因爲對於某一行,這兩條曲線都存在。 – srinath 2013-04-22 07:56:08

+0

您可以嘗試一些方法。您可以將圖像分成子圖像和閾值。你可以嘗試擬合一個二階模型,它將在它們之間找到某種「中心」線,並選擇這條線上方的數字。 – BioSP 2013-04-22 08:05:19

+0

你能告訴我怎樣才能適應它的圓弧。我想要對曲線進行曲線擬合(比如說)。我像你說的那樣隔離它。我想對它做曲線擬合(圓形) – srinath 2013-05-01 15:38:16

2

儘管看起來不直觀,但每個像素的邊緣方向都是對法線的很好估計。這將是最簡單的解決方案,因爲它不涉及任何曲線擬合。

在MATLAB中,你可以找到使用Sobel濾波器逐像素的邊緣方向:

[BW,thresh,gv,gh] = edge(I,'sobel'); 
edgeDir = atan2(gv, gh); 

這給你一個邊緣方向爲弧度的角度。

+0

感謝您的回答。通過上述過程,我得到了每個像素處的edgeDir。我只能如何做上曲線(或下曲線)?如何製作曲線法線方程? – srinath 2013-04-22 07:59:24

+0

要在任何邊緣點處將法線擬合到法線,計算邊緣方向theta,計算斜率爲m = tan(theta)。取邊緣像素座標(x,y)並求解方程y = mx + c來計算常數c。然後你有正常的方程。爲了區分上曲線和下曲線,您可能需要進行曲線擬合併比較曲線焦點的y座標。 – Zaphod 2013-04-22 09:15:23

+0

非常感謝!我明白了。你能幫我解決曲線擬合問題嗎?我沒有找到與圖像相關的任何內容。它只給了幾個點。如果您有任何鏈接,請發佈。 – srinath 2013-04-24 15:32:03

0

由於Zaphod推薦法線垂直於邊緣。您不需要進行曲線擬合,您可以使用反投影來確定曲線的焦點。

從沿着曲線的每個邊緣點開始,並從法線方向畫一條曲線。通過增加線穿過的每個像素的值來繪製線。一旦你爲所有的邊緣做了這個,你會希望找到兩個像素值更高的值,然後其餘的每個曲線一個。然後你應該知道那裏是每條曲線焦點的位置。

+0

如何沿曲線(上或下)移動?你能告訴我如何通過曲線運行以便從編碼的角度畫線? – srinath 2013-04-28 04:42:59