如何获取矩阵中的角点数以及将它们的位置存储在数组中?

时间:2017-02-02 15:49:05

标签: matlab image-processing

有人告诉我,矩阵的坐标不一定用中心点表示,但也可以用角点表示。然而,我真的无法弄清楚如何解决这个问题。尽管如此,我还是将这些信息与中心点和角点的矩阵表示法联系起来,如下所示。

enter image description here

[Nr, Nc] = size(Img);

Nr = ny+1; % which is total no. of centre rows Nc = nx+1; % which is total no. of center columns

此外,

ny = Nr – 1; % which is total no. of line rows nx = Nc – 1; % which is total no. of line columns

T = ny * nx; % where T = Total no. of internal nodes nodeCount = nx(iy – 1) + jx;

计数顺序是逐行的,即从节点开始:(1,1) to (1,nx)然后是(2,1) to (2, nx)等。请注意,在给定图像(6x6矩阵)中,nodeCount有25个数组元素。

现在,我需要获取nodeCount,使其包含指定计数顺序中从1到T的所有计数内部节点的数组。然后,我将从nodeCount中的每个索引获取x和y坐标。

请,我需要有关如何解决此问题的帮助/建议/建议。非常感谢。

1 个答案:

答案 0 :(得分:0)

由于评论中的讨论有点长,我决定回答:

1)创建坐标(从头开始)

[x,y] = meshgrid(1:nx,1:ny); 
coords = [x(:),y(:)];

2)创建nodeCount(从头开始)

nodeCount = reshape(reshape((1:nx*ny),nx,ny)',nx*ny,[]);

3)将coords转换为nodeCount

nodeCount = nx*(coords(:,2)-1) + coords(:,1);

4)将nodeCount转换为coords

coords_x = mod(nodeCount-1,nx) + 1;
coords_y = (nodeCount - coords_x)/nx + 1;
coords = [coords_x, coords_y];

编辑:当然,3-D也可以。取决于你如何计算你的节点。一种方法是这样(未经测试,但我想你明白了):

[x,y,z] = meshgrid(1:nx,1:ny,1:nz);
coords = [x(:),y(:),z(:)];
nodeCount = ny*nx*(coords(:,3)-1) + nx*(coords(:,2)-1) + coords(:,1)
coords_x = mod(nodeCount-1,nx) + 1;
coords_y = mod((nodeCount - coords_x)/nx, ny) + 1;
coords_z = (nodeCount - coords_x - nx*(coords_y-1))/nx/ny + 1;