2017-01-04 73 views
0

如何在Matlab中的「square」中找到四個角的座標?我嘗試了corner,regionprops('Extrema')detectMinEigenFeatures,但沒有運氣。問題是藍色的方形不是一個完美的方形,所以我需要某種銳化邊緣技術或更「智能」的查找角點算法來找到它們。如何在Matlab中找到拐角的座標?

target-image

+1

我是否點擊他們用鼠標不是一個選項? –

+0

不是一個選項,不允許用戶輸入。 – Jimbo

+0

「允許」還是僅僅「不切實際」?這是一次性問題,還是您有四萬億的類似圖像需要處理? –

回答

1

因爲我是一個好人,我已經翻譯了TASOS的解釋相關成代碼,檢查意見:

%Open your image 
I = imread('square.png'); 
I = im2bw(I(:,:,3)); 

%Compute the centroid 
centroid = round(size(I)/2); 

%Find the pixels that create the square 
[x,y] = find(I); 

%Change the origin 
X = [y,x]-centroid; 

%Sort the data 
X = sortrows(X,[1 2]); 

%Cartesian to polar coordinates 
[theta,rho] = cart2pol(X(:,1),X(:,2)); 

%sort the polar coordinate according to the angle. 
[POL,index] = sortrows([theta,rho],1); 

%Smoothing, using a convolution 
len = 15 %the smoothing factor 
POL(:,2) = conv(POL(:,2),ones(len ,1),'same')./conv(ones(length(POL(:,2)),1),ones(len ,1),'same'); 

%Find the peaks 
pfind = POL(:,2); 
pfind(pfind<mean(pfind)) = 0; 
[~,pos] = findpeaks(pfind); 

%Change (again) the origin 
X = X+centroid; 


%Plot the result 
plot(POL(:,1),POL(:,2)) 
hold on 
plot(POL(pos,1),POL(pos,2),'ro') 
figure 
imshow(I) 
hold on 
plot(X(index(pos),1),X(index(pos),2),'ro') 

結果:

的距離(y軸)對角(x軸)曲線圖: enter image description here

最終檢測:

enter image description here

+0

尼斯:)我完全贊同這個代碼:頁 –

3

假設你在「圖像」做這種模式,而不是分析,從質心對你的形狀每個像素計算距離,然後繪製以此爲角度的功能(即就好像您從質心和水平線開始,然後旋轉該線並記下每個角度處「半徑」的長度)。你的圖形應該是一條有4個局部峯的曲線,然後你可以分離並追溯到它們的座標。

或者,如果假設角落相對保證靠近圖像角落,則通過從圖像角落執行上述過程並找到最小值限制自己找到相應圖像象限中的形狀角落,然後重複此4倍(即在每個轉角處)

+0

這是一個很棒的建議,你能否提供一些代碼作爲例子? – Jimbo