如何定义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
相关产品推荐
相关产品推荐

