Matlab:选择矩阵的一部分

时间:2017-06-17 18:02:12

标签: matlab indexing casting integer

以下脚本给出了错误"下标索引必须是正整数或逻辑。"

我不明白为什么,因为变量是整数。而且,我也将它们转换为整数。

代码是:

x_start = int16(x-matrixRay);
        x_end = uint16(x+matrixRay);
        y_start = uint16(y-matrixRay);
        y_end = uint16(y+matrixRay);
        matrix = img(x_start:x_end,y_start:y_end);

我在上面的代码之前放了一个断点。下面我列出了变量的值:

    K>> x_start

x_start =

  uint16

   298

K>> x_end

x_end =

  uint16

   302

K>> y_start

y_start =

  uint16

   88

K>> y_end

y_end =

  uint16

   92

K>> matrixRay

matrixRay =

     2

显然,我不能发布所有矩阵" img",因为它非常大。工作区是1369x1173 uint8。

1 个答案:

答案 0 :(得分:2)

正如其他人所指出的那样,int8(-128到127)显然不会覆盖你的图像尺寸。给定大小,您可以使用uint16作为索引。使用有符号整数进行索引没有多大意义。您可以简单地使用round来创建索引,以防它可能是非整数。

但是int8只会给你错误的结果(比我认为的错误更糟)。您得到的错误是因为您的x_start或y_start为零。您可以通过设置断点轻松检查这一点。

如果你确定自己在做什么就是你想要的,你可以解决这个问题:

for( my $i=0; $i<@rec; $i++) {
  my $x = $rec[$i] // '';
  if( $i == 1 && ($rec[7]//"") eq 'a' ) {
    $html .= "<td><font size=\"3\" color=\"#FF0000\">$x</font></td>";
  }else{  
    $html .= "<td>$x</td>";
  }
}

类似的应该应用于y_start和y_end。