2013-02-24 46 views
2

我有這樣的旋轉圖像:enter image description here找到旋轉圖像的邊框

我想要做的是找到圖像的邊緣。這是我想要找到在此圖像中看到的紅色邊緣: enter image description here

我試圖找到第一個和最後一個非零元素,然後使用這些作爲邊緣的座標。這很好(如果我真的可以讓它工作),但它不可擴展,紅色邊框可能需要擴展以獲得「較厚」邊框。基本上,我試圖找到邊框,因爲我需要移動出現在我需要擺脫的旋轉圖像邊緣的效果。如果有人能夠指出我的方向是合適的答案(沿着邊界框或類似的線),我會非常感激!

編輯 將我的編輯按照@Jonas的建議移動回答。

+0

你是指較粗的邊界是什麼意思?無論如何,你可以將這個圖像轉換爲二值圖像,其中0作爲閾值,然後使用找到的最小邊界矩形[這裏](http://www.mathworks.com/matlabcentral/fileexchange/34767-a-suite-of-minimal-邊界的對象)。但是,我必須說,轉換成二進制並不是一個強有力的方法。 – 2013-02-24 06:29:42

+0

@Parag對不起,我的意思是,如果有1像素厚,我用它來刪除邊框,我可能想要進一步擴大去除圖像(2像素,3等)。另外我剛剛使用了(a> 0)= 255;創建一個二進制圖像,它*似乎*工作。感謝您的建議,我會嘗試一下。 – user901898 2013-02-24 06:36:52

+0

@ user901898:如果您自己找到了有用的答案,請將其添加爲下面的實際答案,而不是編輯您的問題。 – Jonas 2013-02-24 14:14:26

回答

2

我找到了一個合適的答案。從用戶Parag的建議我二進制thresholded圖像(任何大於0)。然後我應用了Sobel邊緣檢測。這會創建一個包含圖像邊緣的二值圖像,然後根據需要使用形態擴大來「擴大」邊框。

的代碼我使用:

I = imread('outputTest.jpg'); 
B = I; 
B(B > 0) = 255; 
BW = edge(B,'sobel'); 
SE = strel('rectangle', [5 5]); 
BW = imdilate(BW,SE); 
I2 = I; 
I2(BW > 0) = 0; 

由於Parag提到binarising圖像不解決這個的,但由於之前我看到他們被我的形成圖像的方式最可靠的方法,我敢肯定至少這對我的情況來說已經足夠了。

0

一個簡單的方法是使用旋轉角度計算旋轉圖像的角點。