MATLAB代码在细胞图像上绘制长短轴显示异常问题求助
问题原因与修复方案
核心错误原因
- Matlab的
imshow使用图像坐标系,原点在左上角,y轴向下为正,和常规笛卡尔坐标系y轴向上的方向完全相反,你之前使用的是常规笛卡尔坐标系的三角函数计算逻辑,和图像坐标系不匹配导致坐标偏移。 - regionprops返回的
Orientation参数单位为度,定义是长轴与x轴正方向(水平向右)的夹角,角度计算适配图像坐标系,直接套用常规坐标系的角度计算规则会出错。 - 短轴的坐标计算逻辑没有和坐标系适配,符号规则混乱导致错位。
修正后的代码
majors = cell_props.MajorAxisLength; minors = cell_props.MinorAxisLength; ctr = cell_props.Centroid; theta = cell_props.Orientation; imshow(cell_full) hold on for k = 1:length(measurements) % 长轴绘制:适配图像y轴向下的规则,y坐标计算用减号 xMajor = ctr(k,1) + [-1 1]*(majors(k)/2)*cosd(theta(k)); yMajor = ctr(k,2) - [-1 1]*(majors(k)/2)*sind(theta(k)); plot(xMajor,yMajor,'r','LineWidth',2); % 短轴绘制:长轴角度+90度即为短轴角度,统一使用相同的坐标系转换规则,避免符号错误 xMinor = ctr(k,1) + [-1 1]*(minors(k)/2)*cosd(theta(k)+90); yMinor = ctr(k,2) - [-1 1]*(minors(k)/2)*sind(theta(k)+90); plot(xMinor,yMinor,'b','LineWidth',2); end hold off
相关参考图
原始细胞分割图像:
原代码错误输出效果:
内容的提问来源于stack exchange,提问作者stanatomist
相关产品推荐
相关产品推荐

