我尝试更新矩阵的某些部分,但收到以下错误消息:
???赋值的非单例 rhs 维度少于非单例下标
我的代码尝试更新表示二进制图像的矩阵的一些值。我的代码如下:
outImage(3:5,2:4,1) = max(imBinary(3:5,2:4,1));
当我删除最后一个参数(1)时,这次我得到了同样的错误。我猜尺寸之间存在不匹配,但我无法理解。outImage 是当时创建的一个新对象(我之前尝试创建它,但没有任何改变)。可能有什么问题?
我尝试更新矩阵的某些部分,但收到以下错误消息:
???赋值的非单例 rhs 维度少于非单例下标
我的代码尝试更新表示二进制图像的矩阵的一些值。我的代码如下:
outImage(3:5,2:4,1) = max(imBinary(3:5,2:4,1));
当我删除最后一个参数(1)时,这次我得到了同样的错误。我猜尺寸之间存在不匹配,但我无法理解。outImage 是当时创建的一个新对象(我之前尝试创建它,但没有任何改变)。可能有什么问题?
您在对另一个答案的评论中提到您正在尝试创建自己的膨胀算法,因此希望在 3×3×1 子矩阵中取最大值并将该子矩阵中的值替换为最大值。默认情况下,函数MAX将沿子矩阵的列运行,这将为您提供 1×3 矩阵(即 3×3×1 矩阵的列的最大值)。出现错误是因为 MATLAB 无法将 1×3 矩阵分配给 3×3×1 矩阵。
一种解决方案是在 1×3 矩阵上再次调用MAX以获得标量值,然后您可以将其分配给 3×3×1 子矩阵的每个元素而不会出现错误:
outImage(3:5,2:4,1) = max(max(imBinary(3:5,2:4,1)));
您想用 rhs 表达式的每一列的最大值填充 outImage 中的所有索引元素吗?您可以使用 REPMAT 扩展您在 rhs 上获得的行:
outImage(3:5,2:4,1) = repmat(max(imBinary(3:5,2:4,1)),3,1)
outImage(3:5,2:4)
也可以。
在方程的 rhs 上,你取一个 3x3x1 子矩阵的最大值,它返回一个 1x3 向量。然后,您尝试将其分配给 3x3x1 子矩阵。单例下标是值为 1 的一个。所以 rhs 有 1 个非单例下标,而 lhs 有 2 个。Matlab 无法弄清楚如何扩展 1x3 矩阵以填充 3x3x1 空间。
我不完全确定你想做什么,所以我不会猜测解决方案。您是否要制作 3 个 rhs 副本并将其放入 lhs 子矩阵的每一行?或者你想在 rhs 上构建一个 3x3x1 矩阵?
我之前也遇到过同样的错误,之前我所做的是定义了左手矩阵。我不知道你是否有同样的情况,但你可以尝试以下方法:
outImage=Zeros(M,N,K);
M、N 和 K 是您拥有的尺寸。然后只需键入:
outImage(3:5,2:4,1) = max(max(imBinary(3:5,2:4,1)));