You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matlab旋转后提取物体XY坐标及质心 导出JMP绘图异常求助

问题成因
  • 坐标系规则不匹配:Matlab处理图像时默认使用左上角为原点,Y轴向下递增的图像坐标系,而JMP散点图默认使用左下角为原点,Y轴向上递增的笛卡尔坐标系,二者Y轴方向完全相反,导入后会出现垂直翻转的视觉效果,看起来像是额外发生了旋转偏移。
  • 质心数据未导出:你的代码中仅将轮廓的X、Y坐标写入了csv文件,没有把计算得到的质心坐标加入导出表格,因此JMP导入后不存在质心数据,自然无法正常显示。
  • 坐标映射逻辑混淆:你在Matlab中测试画图时使用了plot(yCentre,xCentre)的写法,人为交换了质心的X、Y坐标顺序,导出时如果没有统一顺序,也会进一步加剧坐标错位问题。
解决方案

1. 修正Matlab坐标计算与导出逻辑

修改代码,对Y坐标做方向翻转,同时将质心坐标同步写入导出表格,修正后的参考代码如下:

clc;
clear;
close all;
 
url='http://clipart-library.com/newimages/fish-clip-art-32.png';
I = rgb2gray(imread(url));
rotAngle = 55;
% 旋转图像
I = imrotate(I, rotAngle,'nearest','loose');
% 获取旋转后图像的高度,用于翻转Y坐标
[imgH, ~] = size(I);
           
[B,L] = bwboundaries(I,'noholes');
            
k=1;
stat = regionprops(I,'Centroid');
b = B{k};
% 轮廓坐标处理,Y轴翻转匹配笛卡尔坐标系
xBoundary = b(:,2);
yBoundary = imgH - b(:,1);
% 质心坐标处理,Y轴翻转
centroidObject = stat(k).Centroid;
xCentre = centroidObject(1);
yCentre = imgH - centroidObject(2);
% 构造导出表格,包含轮廓坐标和对应质心坐标
dataTable = table(xBoundary, yBoundary, ...
    repmat(xCentre, height(xBoundary), 1), ...
    repmat(yCentre, height(xBoundary), 1), ...
    'VariableNames', {'轮廓X', '轮廓Y', '质心X', '质心Y'});            
writetable(dataTable,'E:/dataTable.csv')
% 验证绘图,坐标顺序无需交换
hold on;  
plot(xCentre,yCentre,'Marker','x','Color','r');
plot(xBoundary,yBoundary,'Color','g');

2. JMP绘图设置

导入修正后的csv文件后,绘制散点图时:

  • 轮廓系列选择轮廓X作为X轴,轮廓Y作为Y轴
  • 质心系列选择质心X作为X轴,质心Y作为Y轴,单独设置标记样式即可正常显示

内容的提问来源于stack exchange,提问作者JohnSal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 14:09:03