如何访问整个图像中所有块的特定矩阵元素?

时间:2014-11-22 06:53:24

标签: matlab image-processing

我有一个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.

2 个答案:

答案 0 :(得分:0)

我认为你可以做到

LUT = sum( sum( a(3:4:row,3:4,col) * w(3,3) ) );

答案 1 :(得分:0)

我将重新提出您的问题,以便更容易理解,并让我能够轻松地写出答案。

根据您在Kostya帖子中的评论,您有两张图片img1img2,其中它们被分解为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中每个块的相应第三行,第三列。


下次,请更新您的问题,以便获得所有信息。我们不应该通过你的评论来弄清楚你想要什么。