旋转后对象的 X、Y 坐标和质心 - Matlab
X,Y coordinates and centroid of an object after rotation - Matlab
我正在使用此脚本提取旋转后对象的 X、Y 坐标和质心。轮廓坐标保存在 table 中,但是当我在 JMP 中对它们进行散点图时,我得到另一个旋转(如图所示)。此外,我没有得到质心。知道为什么以及如何解决吗?
代码:
clc;
clear;
close all;
url='http://clipart-library.com/newimages/fish-clip-art-32.png';
I = rgb2gray(imread(url));
imshow(I);
rotAngle = 55;
I = imrotate(I, rotAngle,'nearest','loose');
imshow(I);
[B,L] = bwboundaries(I,'noholes');
k=1;
stat = regionprops(I,'Centroid');
b = B{k};
xBoundary = b(:,2);
yBoundary = b(:,1);
centroidObject = stat(k).Centroid;
xCentre = centroidObject(:,2)
yCentre = centroidObject(:,1)
dataTable = table(xBoundary,yBoundary);
writetable(dataTable,'E:/dataTable.csv')
hold on;
plot(yCentre,xCentre,'Marker','x','Color','r');
plot(xBoundary,yBoundary,'Color','g');
您的代码中有错字:
stat = regionprops(I,'Centroid');
输入应该是 L
,带标签的图像,而不是 I
。如果你修复它,你会看到 stat
只有 1 个输出,而不是 255,并且 stat(1)
将对你的对象有有意义的值,而不是 NaN
因为 I
没有任何值为 1 的像素。质心为 NaN
导致未绘制任何标记。
接下来,您的绘图是颠倒的,因为默认情况下图像轴的 y 向下增加,而正常绘图轴的 y 向上增加。
有
set(gca,'YDir','reverse')
创建绘图后,您可以反转绘图的 y 轴。
我正在使用此脚本提取旋转后对象的 X、Y 坐标和质心。轮廓坐标保存在 table 中,但是当我在 JMP 中对它们进行散点图时,我得到另一个旋转(如图所示)。此外,我没有得到质心。知道为什么以及如何解决吗?
代码:
clc;
clear;
close all;
url='http://clipart-library.com/newimages/fish-clip-art-32.png';
I = rgb2gray(imread(url));
imshow(I);
rotAngle = 55;
I = imrotate(I, rotAngle,'nearest','loose');
imshow(I);
[B,L] = bwboundaries(I,'noholes');
k=1;
stat = regionprops(I,'Centroid');
b = B{k};
xBoundary = b(:,2);
yBoundary = b(:,1);
centroidObject = stat(k).Centroid;
xCentre = centroidObject(:,2)
yCentre = centroidObject(:,1)
dataTable = table(xBoundary,yBoundary);
writetable(dataTable,'E:/dataTable.csv')
hold on;
plot(yCentre,xCentre,'Marker','x','Color','r');
plot(xBoundary,yBoundary,'Color','g');
您的代码中有错字:
stat = regionprops(I,'Centroid');
输入应该是 L
,带标签的图像,而不是 I
。如果你修复它,你会看到 stat
只有 1 个输出,而不是 255,并且 stat(1)
将对你的对象有有意义的值,而不是 NaN
因为 I
没有任何值为 1 的像素。质心为 NaN
导致未绘制任何标记。
接下来,您的绘图是颠倒的,因为默认情况下图像轴的 y 向下增加,而正常绘图轴的 y 向上增加。 有
set(gca,'YDir','reverse')
创建绘图后,您可以反转绘图的 y 轴。