如何在 Matlab 中找到角的坐标?
How to find coordinates of corners in Matlab?
如何在Matlab中找到这个"square"中四个角的坐标?我尝试了 corner
、regionprops('Extrema')
和 detectMinEigenFeatures
,但没有成功。问题是蓝色方块不是完美的正方形,所以我需要某种锐化边缘技术或更多 "intelligent" 查找角点算法来找到它们。
假设您在 "image" 模式下执行此操作,而不是分析,计算从质心到形状上每个像素的距离,然后将其绘制为角度的函数(即好像您从质心和一条水平线开始,然后旋转该线并记下每个角度的 'radius' 的长度)。您的图表应该是一条具有 4 个局部峰值的曲线,然后您可以将其隔离并追溯到它们的坐标。
或者,如果假设角点相对保证靠近图像角点,则通过从图像角点执行上述过程并找到最小值来限制自己在相应图像象限中找到形状角点,然后重复这 4 次(即每个角)
因为我是个好人,我把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 轴)图:
最终检测:
如何在Matlab中找到这个"square"中四个角的坐标?我尝试了 corner
、regionprops('Extrema')
和 detectMinEigenFeatures
,但没有成功。问题是蓝色方块不是完美的正方形,所以我需要某种锐化边缘技术或更多 "intelligent" 查找角点算法来找到它们。
假设您在 "image" 模式下执行此操作,而不是分析,计算从质心到形状上每个像素的距离,然后将其绘制为角度的函数(即好像您从质心和一条水平线开始,然后旋转该线并记下每个角度的 'radius' 的长度)。您的图表应该是一条具有 4 个局部峰值的曲线,然后您可以将其隔离并追溯到它们的坐标。
或者,如果假设角点相对保证靠近图像角点,则通过从图像角点执行上述过程并找到最小值来限制自己在相应图像象限中找到形状角点,然后重复这 4 次(即每个角)
因为我是个好人,我把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 轴)图:
最终检测: