Algorithm 将返回您要查找的所有点的索引。您甚至可以使用逻辑表达式。或者我误解了你所说的“最大”值。这是真的。但是,同一子矩阵中的几个像素可以具有相同的值。哇!!非常感谢你!如何将此算法应用于多维矩阵(x,y,z),而不仅仅是单个帧?(我想要一个块大小[3])bloc

Algorithm 将返回您要查找的所有点的索引。您甚至可以使用逻辑表达式。或者我误解了你所说的“最大”值。这是真的。但是,同一子矩阵中的几个像素可以具有相同的值。哇!!非常感谢你!如何将此算法应用于多维矩阵(x,y,z),而不仅仅是单个帧?(我想要一个块大小[3])bloc,algorithm,matlab,image-processing,block,Algorithm,Matlab,Image Processing,Block,将返回您要查找的所有点的索引。您甚至可以使用逻辑表达式。或者我误解了你所说的“最大”值。这是真的。但是,同一子矩阵中的几个像素可以具有相同的值。哇!!非常感谢你!如何将此算法应用于多维矩阵(x,y,z),而不仅仅是单个帧?(我想要一个块大小[3])blockproc据我所知仅适用于2D。你也许可以将3D阵列重塑为2D阵列,然后应用blockproc这是一个由Ramón Casero博士(牛津大学)实施的解决方案(使用3D阵列实施blockproc):哇!!非常感谢你!如何将此算法应用于多维矩阵(


将返回您要查找的所有点的索引。您甚至可以使用逻辑表达式。或者我误解了你所说的“最大”值。这是真的。但是,同一子矩阵中的几个像素可以具有相同的值。哇!!非常感谢你!如何将此算法应用于多维矩阵(x,y,z),而不仅仅是单个帧?(我想要一个块大小[3])
blockproc
据我所知仅适用于2D。你也许可以将3D阵列重塑为2D阵列,然后应用
blockproc
这是一个由Ramón Casero博士(牛津大学)实施的解决方案(使用3D阵列实施blockproc):哇!!非常感谢你!如何将此算法应用于多维矩阵(x,y,z),而不仅仅是单个帧?(我想要一个块大小[3])
blockproc
据我所知仅适用于2D。您可以将3D阵列重塑为2D阵列,然后应用
blockproc
这是一个由Ramón Casero博士(牛津大学)实施的解决方案(使用3D阵列实施blockproc):
function loc = max_location(M);
[~, ii] = max(M(:));
[r c] = ind2sub(size(M),ii);
loc = [r c];
blockproc(im, blocksize, @(x) x.location+max_location(x.data)-1)
>> blocksize = [3 3];

>> im = [ 0.3724    0.0527    0.4177        0.6981    0.0326    0.4607
          0.1981    0.7379    0.9831        0.6665    0.5612    0.9816
          0.4897    0.2691    0.3015        0.1781    0.8819    0.1564

          0.3395    0.4228    0.7011        0.1280    0.6692    0.8555
          0.9516    0.5479    0.6663        0.9991    0.1904    0.6448
          0.9203    0.9427    0.5391        0.1711    0.3689    0.3763 ];

>> blockproc(im, blocksize, @(x) x.location+max_location(x.data)-1)

ans =
     2     3     2     6
     5     1     5     4
@(x)max(x)
@(x)max(x.data)
a=magic(4);

b=blockproc(a,[2,2],@(x) find(x.data==max(max(x.data)))); %linear indexes
a =

    16     2     3    13
     5    11    10     8
     9     7     6    12
     4    14    15     1


b =

     1     3
     4     2
% rearranges 512 x 512 image into 4096 x 64
% each column of I2 represents a 64 x 64 block 
n = 64;
I2 = im2col(I,[n,n],'distinct'); 

% find max in each block
% ~ to ignore that output
[~,y] = max(I2);

% convert those values to overall indices
ind = sub2ind(size(I2),y, 1:n);

% create new matrix
I3 = zeros(size(I2));
I3(ind)=1;
I3 = col2im(I3,[n,n],size(I),'distinct');