【发布时间】:2015-02-03 13:08:02
【问题描述】:
我想使用循环计算 400 50 X 50 矩阵的协方差,所以当我尝试时..
for i=t-9:t+59
for j=r-9:r+59
a(:,:,p)=vidFrames2(i:(i+49),j:(j+49));
b(:,:,p)=cov3d(double(a));
p=p+1;
end
end
此代码我收到错误“分配的非单件右轴维度比非单件下标更多” 但是当我想通过此代码中的挤压功能消除此错误时,
b(p,:)=cov3d(squeeze(double(a)));
我收到“下标分配维度不匹配”。
如何计算 3d 矩阵的协方差....cov3d 函数是-
function xy = cov3d(x)
[m,n,r] = size(x);
if m==1
x=zeros(n,n,r,class(x));
else
xc=bsxfun(@minus,x,sum(x,1)/m);
for i=1:r
xci=xc(:,:,i);
xy(:,:,i)=xci'*xci;
end
xy=xy/(m-1);
结束 实际上,我想要将 400 个协方差矩阵存储在一个变量中。在此更改之后,我只得到一个协方差矩阵。实际上,我正在处理一个框架,我将初始坐标值存储在 50 X 50 矩阵的 i 和 j 中。然后我想以 50 X 50 matix 的形式获得 10 X 10 邻域的像素值。这意味着如果我输入初始坐标为(100,100),那么我想获取存储在区域(91,91)(91,141)(141,91)(141,141)内的像素值。然后存储这个矩阵的协方差值。然后它会再次找到区域(92,91),(142,91)(92,141),(142,141)等的像素值并覆盖整个区域..所以如果我覆盖整个区域那么我想我将得到总共 400 个矩阵。我想存储所有区域的协方差值,.. 今天我将 for 循环的上限更改为 i=t-9:t+60 和 j=r-9:r+ 60,但我没有得到 400 个协方差矩阵
【问题讨论】:
-
我看到这 50 x 50 矩阵似乎是视频中的帧。您是否打算根据像素强度的分布为视频中的每一帧找到一个 2x2 协方差矩阵?
-
@eigenchris - OP 从这里提取了
cov3d代码:stackoverflow.com/questions/17435510/… -
@rayryeng 啊,我明白了。谢谢。 :)