How to compare a matrix element with its neighbours without using a loop in MATLAB?

前端 未结 3 1669
天涯浪人
天涯浪人 2021-02-20 09:06

I have a matrix in MATLAB. I want to check the 4-connected neighbours (left, right, top, bottom) for every element. If the current element is less than any of the neighbours the

3条回答
  •  孤街浪徒
    2021-02-20 09:37

    One way to do this is with the function NLFILTER from the Image Processing Toolbox, which applies a given function to each M-by-N block of a matrix:

    >> A = magic(6)  %# A sample matrix
    
    A =
    
        35     1     6    26    19    24
         3    32     7    21    23    25
        31     9     2    22    27    20
         8    28    33    17    10    15
        30     5    34    12    14    16
         4    36    29    13    18    11
    
    >> B = nlfilter(A,[3 3],@(b) b(5)*all(b(5) >= b([2 4 6 8])))
    
    B =
    
        35     0     0    26     0     0
         0    32     0     0     0    25
        31     0     0     0    27     0
         0     0     0     0     0     0
        30     0    34     0     0    16
         0    36     0     0    18     0
    

    The above code defines an anonymous function which uses linear indexing to get the center element of a 3-by-3 submatrix b(5) and compare it to its 4-connected neighbors b([2 4 6 8]). The value in the center element is multiplied by the logical result returned by the function ALL, which is 1 when the center element is larger than all of its nearest neighbors and 0 otherwise.

提交回复
热议问题