错误使用 ~= 矩阵维度必须一致
Posted
技术标签:
【中文标题】错误使用 ~= 矩阵维度必须一致【英文标题】:Error using ~= Matrix dimensions must agree 【发布时间】:2021-12-07 19:54:16 【问题描述】:我正在使用“基于计算机断层扫描的体积工具标准化测量上颌窦”文章的以下代码来测量 DCOM 图像中的上颌窦体积:
% Read images
clear all
close all
[filename, pathname] = uigetfile('*','Select CT exam (all slices)','MultiSelect','on');
num= length(filename);
bbbb=1;
step=input('Step of image reading: \')
for aaaa = 1:step:num
xinfo=dicominfo([pathname,char(filename(aaaa))]);
pxsp=cat(2,xinfo.PixelSpacing);
x=dicomread([pathname,char(filename(aaaa))])+cat(2,xinfo.RescaleIntercept);
k=x;
k = im2bw(k,0.49);
k = imfill(k,'holes');
cc = bwconncomp(k);
stats = regionprops(cc,'Area');
A = [stats.Area];
[~,biggest] = max(A);
k(labelmatrix(cc)~=biggest) = 0;
x(k~=1)=-2000;
masccranio(:,:,bbbb)=k;
cranio(:,:,bbbb)=x;
cranio_full(:,:,bbbb)=x;
bbbb=bbbb+1;
end
起初,我们对开头的阅读步骤输入一无所知,如果可以,请提供帮助。我们的第二个问题是当我们运行代码时,我们得到以下错误:
Error using ~=
Matrix dimensions must agree.
Error in Quant (line 32)
k(labelmatrix(cc)~=biggest) = 0;
我正在使用 Matlab 2019b,据我所知,此代码适用于 2013 年。感谢您提供任何帮助。
【问题讨论】:
在运行代码之前在 MATLAB 中使用dbstop if error
。 MATLAB 将在错误发生后立即停止并在调试器中打开您的代码,您可以在其中看到每个变量的值等等。在那里你可以弄清楚labelmatrix(cc)
和biggest
是什么,以及为什么它们的尺寸不一样。
@CrisLuengo 我做到了,但不幸的是 labelmatrix(cc) 和最大的不一样
当然,错误信息告诉你。但这是您了解为什么它们的大小以及需要进行哪些更改才能使代码正常工作的工具。
【参考方案1】:
我希望您希望biggest
代表此行中所有区域区域的最大值:
k(labelmatrix(cc)~=biggest) = 0;
在这种情况下,您的问题很可能是 A
不是向量,因此 biggest
不是标量。这会导致操作失败,因为 ~=
运算符仅适用于大小相同或使用标量的矩阵。
【讨论】:
感谢您的回答。你有什么建议吗? 如果我的假设是正确的,您应该能够像这样获得biggest
的标量:[~,biggest] = max(A(:));
这会将矩阵 A 转换为向量。请注意,这仅在 A 是矩阵时才有效。如果 A 不是矩阵,则必须先将其转换为矩阵。以上是关于错误使用 ~= 矩阵维度必须一致的主要内容,如果未能解决你的问题,请参考以下文章
当我尝试使用文件维度作为行和列在 C 中创建矩阵时,为啥会出现错误?