简体   繁体   中英

Convert adjacent elements of matrix in Matlab

I'm working on Brushfire algorithm and I need to make a loop which will scan through the matrix and find the adjacent zeros with ones and convert "1" to "2". Assume that I have a matrix 5 by 5:

0   0   0   0   0
0   1   1   1   1
0   0   1   1   1
0   0   1   1   1
0   0   1   1   1

Can I somehow make it:

0   0   0   0   0
0   2   2   2   2
0   0   2   1   1
0   0   2   1   1
0   0   2   1   1

Thank you

With the image processing toolbox, the algorithm would be:

A = [0 0 0 0 0 
0 1 1 1 1
0 0 1 1 1
0 0 1 1 1
0 0 1 1 1];

B = A;

%# set pixels at border between 0 and 1 to 2
B(imdilate(~A,true(3)) & A>0) = 2;

You do it with 2D-convolution, using the standard function conv2 . Denoting your matrix as X ,

mask = [0 1 0; 1 1 1; 0 1 0]; %// or [1 1 1; 1 1 1; 1 1 1] to include diagonal adjacency
X(conv2(double(~X), mask, 'same') & X) = 2;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM