2013-02-16 53 views
3

我需要檢測我的項目中形狀檢測的邊緣。 目前我正在使用MATLAB,但如果它提供更好的輸出,我可以使用openCV進行調試。 所以這裏是問題所在。我擁有的示例圖像將粗糙表面的對象重疊在一起。 我正在使用此代碼並獲得良好的輸出,但表面粗糙度仍然會使我的輸出降級。 我會哄在MATLAB驗證碼:需要良好的粗糙表面重疊物體的邊緣檢測過程

a = imread('D:\images\wheatstarch.jpg'); 
I = rgb2gray(a); 
imshow(I) 
thresold = graythresh(I); 
se1=strel('diamond',2); 
I1=imerode(I,se1); 
bw = edge(I1,'canny'); 
figure; 
imshow(bw); 

我得到這樣的輸出: http://i49.tinypic.com/vg7fns.png

Ineed一個更好的輸出,這樣我可以使用形狀檢測輸出。下載 http://www.profimedia.si/photo/wheat-starch-granules/profimedia-0035237439.jpg

+0

你是什麼意思「更好的產出」?你能提供「更好的產出」結果圖像? – 2013-02-16 09:18:45

+0

我的意思是它應該沒有額外的鋸齒線或由於表面上的陰影或由於重疊物體的陰影而被檢測到的過多線條。 – 2013-02-16 14:26:35

回答

0

在Photoshop文件播放,Photoshop的發現邊緣邊緣,然後一個層次的命令

輸入圖像給出了一個輸出更喜歡你正在尋找。我不是建議你使用photoshop,photoshop是一個方便的工具,可視化處理圖形文件的方法。我總是寫我自己的代碼,所以不能提出任何現成的解決方案。

我看到的是photoshop的查找邊緣給出了邊緣硬度的灰度結果,而您要查找的對象是邊緣最硬的邊緣。

看起來你得到的是圖像首先轉換爲b(像水平指令),然後找到邊緣。轉換爲b & w將在陰影中創建任意線,然後對其進行跟蹤。這導致了原始圖像中出現的灰色陰影平滑過渡到跟蹤中的人爲線。

通過創建灰度邊緣,然後將灰度邊緣轉換爲灰度,平滑的灰度移位不會產生任何邊緣。

0

你最好看看BSDS他們有最先進的邊緣檢測,應該比Canny的表現要好得多。
他們也有源代碼(爲Linux編譯的matlab)。