Image 矩阵尺寸必须符合误差,而实际上相同

Image 矩阵尺寸必须符合误差,而实际上相同,image,matlab,Image,Matlab,我收到一条错误消息说: Matrix dimensions must agree. Error in tankGame>exmRange (line 119) if (p1.dir == 'down') p1.value = imrotate(p1.oriValue, 180,'bilinear'); end 但是我检查了p1.value和p1.oriValue的大小,它们都是32x32x3。如果我删除这个部分,程序运行得很好 我认为这是因为imrotate以某种方式改变了尺寸

我收到一条错误消息说:

Matrix dimensions must agree.

Error in tankGame>exmRange (line 119)
    if (p1.dir == 'down') p1.value = imrotate(p1.oriValue, 180,'bilinear'); end
但是我检查了
p1.value
p1.oriValue
的大小,它们都是
32x32x3
。如果我删除这个部分,程序运行得很好


我认为这是因为
imrotate
以某种方式改变了尺寸(尽管对于180度的正方形图像旋转,它不应该改变),所以我如何修复它呢?

可能产生错误的是
p1.dir=='down'
=
运算符是一个元素操作运算符,它比较两个字符向量中的每个字符,生成一个布尔向量,指示哪些字符对相等。它不是在做字符串比较

例如,如果
p1.dir
是字符向量
'up
,则您正在将一个包含2个字符的向量与一个包含4个字符的向量进行比较:

'up'='down''生成错误消息“矩阵维度必须一致”
“doom”==“down%”返回逻辑数组[true-false]
使用strcmp比较字符串:

如果strcmp(p1.dir,'down')
p1.value=imrotate(p1.oriValue,180,'双线性');
结束

在较新版本的MATLAB(从R2016b开始)中,有一个实际的
string
类型(与MATLAB中一直称为“string”的
char
向量相反)。
字符串
是用双引号创建的:
“down”
(与
“down”
相反,后者是
字符
向量)。对于这个新类型,
=
操作符执行字符串比较。将运算符应用于
字符串
一个
字符
向量时,
字符
将转换为
字符串
。因此,另一个解决方案是:

如果p1.dir==“向下”
p1.value=imrotate(p1.oriValue,180,'双线性');
结束

可能产生错误的是
p1.dir=='down'
=
运算符是一个元素操作运算符,它比较两个字符向量中的每个字符,生成一个布尔向量,指示哪些字符对相等。它不是在做字符串比较

例如,如果
p1.dir
是字符向量
'up
,则您正在将一个包含2个字符的向量与一个包含4个字符的向量进行比较:

'up'='down''生成错误消息“矩阵维度必须一致”
“doom”==“down%”返回逻辑数组[true-false]
使用strcmp比较字符串:

如果strcmp(p1.dir,'down')
p1.value=imrotate(p1.oriValue,180,'双线性');
结束

在较新版本的MATLAB(从R2016b开始)中,有一个实际的
string
类型(与MATLAB中一直称为“string”的
char
向量相反)。
字符串
是用双引号创建的:
“down”
(与
“down”
相反,后者是
字符
向量)。对于这个新类型,
=
操作符执行字符串比较。将运算符应用于
字符串
一个
字符
向量时,
字符
将转换为
字符串
。因此,另一个解决方案是:

如果p1.dir==“向下”
p1.value=imrotate(p1.oriValue,180,'双线性');
结束

如果你说你的程序在删除某些内容时运行得很好,那么你会担心吗?(也许你的意思是说,当你删除某个东西时,你的代码能够执行,但可能没有你想要的结果。)好吧,让我们假设这个32x32x3矩阵是某种棱镜。这将有助于了解如何旋转此棱镜。你是如何旋转图像的。@KingDuken我的意思是,如果我不旋转图像,一切都很好。关于旋转图像的问题是,我不认为有超过1种旋转方式,这只是一个图像,而不是3D空间中的一个平面……当你说你的程序在删除某些内容时运行得很好,那么你担心吗?(也许你的意思是说,当你删除某个东西时,你的代码能够执行,但可能没有你想要的结果。)好吧,让我们假设这个32x32x3矩阵是某种棱镜。这将有助于了解如何旋转此棱镜。你是如何旋转图像的。@KingDuken我的意思是,如果我不旋转图像,一切都很好。关于旋转图像的问题是,我不认为有超过1种旋转方式,这只是一个图像,而不是3D空间中的平面…这确实是个问题,谢谢。我想我可能是染上了python的一些坏习惯。@Amarthl:我忘了说,在较新的MATLAB中,有一个实际的
字符串
类型。它使用双引号指定。在那里,
==
操作符进行字符串比较
p1.dir==“down”
将按预期工作,因为
p1.dir
将转换为字符串类型。但这不适用于八度音阶。这确实是问题所在,谢谢。我想我可能是染上了python的一些坏习惯。@Amarthl:我忘了说,在较新的MATLAB中,有一个实际的
字符串
类型。它使用双引号指定。在那里,
==
操作符进行字符串比较
p1.dir==“down”
将按预期工作,因为
p1.dir
将转换为字符串类型。但这不适用于八度音阶。