如何在Matlab中找到角点的坐标?

时间:2017-01-04 10:54:00

标签: matlab edge-detection

如何在这个" square"中找到四个角的坐标?在Matlab?我尝试使用cornerregionprops('Extrema')detectMinEigenFeatures但没有运气。问题是蓝色正方形不是一个完美的正方形,所以我需要某种锐化边缘技术或更多的智能" find-corner-algorithm找到它们。

target-image

2 个答案:

答案 0 :(得分:3)

假设您在“图像”模式下执行此操作,而不是通过分析,计算从形心到形状上每个像素的距离,然后将其绘制为角度的函数(即,就好像您从质心和水平线,然后旋转该线并记下每个角度的“半径”的长度。您的图形应该是一条包含4个局部峰的曲线,然后您可以将其隔离并追溯到它们的坐标。

或者,如果假设拐角相对保证靠近图像角落,则通过从图像角落执行上述步骤并找到最小值来限制自己在相应图像象限中找到形状角点,并且然后重复这4次(即每个角落)

答案 1 :(得分:3)

因为我是一个好人,我已将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