【问题标题】:Error - Index exceeds matrix dimensions错误 - 索引超出矩阵维度
【发布时间】:2014-11-12 22:37:49
【问题描述】:

我有以下部分:

N = size(p,1);
x = 1:N; y = x;
[X,Y] = meshgrid(x,y);
R = sqrt((2.*X-N-1).^2+(2.*Y-N-1).^2)/N;
Theta = atan2((N-1-2.*Y+2),(2.*X-N+1-2));
R = (R<=1).*R;
Rad = radialpoly(R,n,m);    

Product = p(x,y).*Rad.*exp(-1i*m*Theta);

我在以下行中收到错误:

Product = p(x,y).*Rad.*exp(-1i*m*Theta);

我得到的错误是:

Index exceeds matrix dimensions.

我尝试“调试”程序,发现尺寸问题可能是由于以下行:

[X,Y] = 网格网格(x,y);

奇怪的是,该程序在我应用它的大多数图像上都没有给我错误。

你知道我为什么会收到这样的错误吗?

谢谢。

【问题讨论】:

  • 什么是pradialpoly?目前,我们没有足够的信息来重现该问题。
  • 很可能,问题不是由于网格网格造成的。您确定您的 p 始终是正方形图像吗(即您使用 y=x,但仅从 p 的第一个维度获得 N)
  • 顺便说一句,您不应该使用y,x 而不是x,y 访问p 吗?即行列索引而不是 XY 坐标?
  • 是 Kostya 建议的:对于大小为 100x200 的图像 p 会发生什么?
  • p 是图像,但不是正方形图像

标签: matlab runtime-error


【解决方案1】:

首先,很高兴了解您如何分配 p 变量。

确保您size(y)==size(p)尝试

assert(size(p,1) == size(p,2) )

assert(N == size(p,2) )

如果它返回一个错误,那么你的p 不是正方形的。


如果您事先知道您有一个矩形(非方形)数组,请相应地分配您的y

x = 1:size(p, 1)
y = 1:size(p, 2)
...
%// and maybe dependent on what you do:
N = min(size(p))

这将确保它在沿第二维索引时不超过 p 的大小

【讨论】:

  • p是一张图片。而且,是的,它不是正方形。我应该在我展示的代码中做什么来消除方形图像的问题。而且,顺便说一下,当图像的宽度大于它的高度时,我没有得到任何错误]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-05
  • 1970-01-01
相关资源
最近更新 更多