2016-09-09 85 views
0

我有一个复杂的矩阵cdata,即2144x2048。我正在从cdata是比指定threshold更大的通过执行以下元素:MATLAB保持复杂矩阵的边界

[row, col] = find(abs(cdata) > threshold); 

rowcol可以有多个值。然后,我走行和col值,我执行计算,以获得真实的x数据的N个样本,并且y的数据的33个样本如下:

xdata = real(cdata(row(i),col(i)-bw:col(i)+bw)) 
ydata = real(cdata(row(i)-bw:row(i)+bw,col(i)-bw:col(i)+bw)) 

其中bw为恒定值该确定我需要获得的样本数量。在这个计算中,为xdatacdata具体的柱部和cdataydata行部分,我超过基体的边界和MATLAB引发以下错误:

??? Subscript indices must either be real positive integers or logicals 

我怎样才能确保我不要超出界限?如果它要超出界限,我可以跳过一行/一对。

回答

1

你遇到问题的原因是因为你没有限制你的搜索从矩阵的边缘接近bw。这意味着它有可能找到矩阵边缘附近阈值以上的值。当你从这些指数中增加或减去bw时,你最终会超出界限。你可以像这样限制你的搜索。

[row, col] = find(abs(cdata(bw+1:end-bw,bw+1:end-bw)) > threshold); 
row = row + bw; 
col = col + bw; 

这样可以保证你的行和列指数的范围之内,所以当你抓住他们周围的区域就不会出界。

在侧面说明。代码中的ydata变量正在索引矩阵的整个正方形区域,并且xdata仅索引行的一部分。您的ydata实际上应该是ydata = real(cdata(row(i)-bw:row(i)+bw, col(i)))吗?

+0

伟大的解决方案。是的,你对ydata是正确的,我输错了。 – DeeTee