我有一个512x512的图像,我为整个图像制作了4x4块,然后我想访问所有单个4x4矩阵的(第3行,第3个元素)并将其添加到我获得的索引值。请帮我解决下面的代码。
[row col] = size(a);
m = zeros(row,col);
count = [(row-4)*(col-4)]/4;
outMat = zeros(4,4,count);
l = 0;
for i=2:4:row-4
for j=2:4:col-4
l = l + 1;
outMat(:,:,l) = double(a(i-1:i+2,j-1:j+2));% for each matrix i have to find(3rd row,3rd element of each matrix.
end;
end;
添加(第3行,第3个元素):
m(i,j) = sum(sum(a .* w)); %index value of each 4x4 matrix % w = 4x4 matrix.
LUT = m(i,j)+ outMat(3,3);%(3rd row,3rd element each matrix should be added to all m(i,j) values. In which i fail to add all(3rd row,3rd element) of all 4x4 matrices.
答案 0 :(得分:0)
我认为你可以做到
LUT = sum( sum( a(3:4:row,3:4,col) * w(3,3) ) );
答案 1 :(得分:0)
我将重新提出您的问题,以便更容易理解,并让我能够轻松地写出答案。
根据您在Kostya帖子中的评论,您有两张图片img1
和img2
,其中它们被分解为4 x 4块。 outMat
将是一个3D矩阵,其中每个切片包含从img1
中提取的4 x 4块。从这里,你有一个矩阵m
,它存储了一个4 x 4块存储outMat
的加权和。
接下来,您将拥有另一个矩阵,我们称之为outMat2
,这也是一个3D矩阵,其中每个切片是从img2
中提取的4 x 4块。在此3D矩阵中,您希望提取每个块的第三行和第三列,将其添加到m
的相应位置,并将输出存储到名为LUT
的变量中。
您所要做的就是提取一个矢量,该矢量切割位于第三行和第三列的所有切片。然后,您必须将其重新整形为与m
大小相同的矩阵,然后将其添加到m
之上,并将其存储到名为LUT
的变量中。请记住,如果我们将其重新整形为矩阵,则重新整形将以列主要格式完成,因此您将按列堆叠值。因为您的块是行式创建的,所以我们需要对此矩阵进行重新整形,使其具有size(m,2)
行和size(m,1)
列,然后对其进行转置。
因此:
vec = outMat2(3,3,:);
vec = vec(:); %// Make sure it's a 1D vector
m2 = reshape(vec, size(m,2), size(m,1)).';
LUT = m + m2;
LUT
将包含一个2D矩阵,其中每个元素包含来自img1
的4 x 4块的加权和以及img2
中每个块的相应第三行,第三列。
下次,请更新您的问题,以便获得所有信息。我们不应该通过你的评论来弄清楚你想要什么。