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

如何定义m、n替代poly2mask的固定行列数以适配x、y的动态变化?

动态适配poly2mask的图像尺寸

问题

基于以下MATLAB代码:

x = 256*rand(1,4);y = 256*rand(1,4);x(end+1) = x(1);y(end+1) = y(1);bw = poly2mask(x,y,256,256);imshow(bw)

能否定义m和n替代poly2mask里的固定值256,让x和y值变化时生成的图像仍能适配?

解决方案

完全可以,核心思路是根据多边形坐标的极值动态计算图像尺寸,同时调整坐标确保多边形完整落在图像范围内。

修改后的代码

% 生成多边形坐标(可替换为任意x、y序列)
x = 256*rand(1,4);
y = 256*rand(1,4);
x(end+1) = x(1);
y(end+1) = y(1);

% 计算多边形的边界范围
x_min = min(x);
x_max = max(x);
y_min = min(y);
y_max = max(y);

% 可选:添加余量避免多边形贴图像边缘(按边界长度的10%设置)
margin = 0.1 * max(x_max - x_min, y_max - y_min);
% 动态确定图像尺寸m(高度)、n(宽度)
m = ceil(x_max - x_min + 2*margin);
n = ceil(y_max - y_min + 2*margin);

% 将原坐标映射到新图像的坐标系(poly2mask以图像左上角为(1,1))
x_adj = x - x_min + margin;
y_adj = y - y_min + margin;

% 生成适配的掩码图像
bw = poly2mask(x_adj, y_adj, m, n);
imshow(bw)

关键说明

  • 动态尺寸计算:通过min/max获取多边形的边界,再结合可选余量确定图像的高度m和宽度n,确保图像刚好容纳多边形(或留有缓冲空间)。
  • 坐标映射:poly2mask要求坐标对应图像的像素位置(左上角为原点),因此需要将原多边形的最小坐标偏移到新图像的合理位置,避免多边形超出图像范围。

无余量简化版

如果不需要边缘缓冲,可直接用边界极值计算:

x_min = min(x);
x_max = max(x);
y_min = min(y);
y_max = max(y);

m = ceil(x_max - x_min);
n = ceil(y_max - y_min);
% 偏移坐标到图像起始位置(1,1)
x_adj = x - x_min + 1;
y_adj = y - y_min + 1;

bw = poly2mask(x_adj, y_adj, m, n);
imshow(bw)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 21:52:52