MATLAB: How to adress neighbours in matrix

adressImage Processing Toolboxiterationmatrix

Imagine I have matrix A=ones(5). I want to change center of the matrix to 17, A(3,3)=17; In next iteration I want to change all points that are next to this 20 to 5. i will have:
1 1 1 1 1
1 5 5 5 1
1 5 17 5 1
1 5 5 5 1
1 1 1 1 1
In next step i want to change all ones to 10. And so on...
10 10 10 10 10
10 5 5 5 10
10 5 17 5 10
10 5 5 5 10
10 10 10 10 10
Any idea how to do this to large matrix? How to adress only the neighbours but not the points "inside"?

Best Answer

  • This works for any size matrix, large or not, as long as it's bigger than 5x5. Also you can't get a center element if there is an even number of rows or columns.
    A = ones(9)
    centerRow = ceil(size(A, 1)/2)
    centerCol = ceil(size(A, 2)/2)
    A(centerRow-2:centerRow+2, centerCol-2:centerCol+2) = 20;
    A(centerRow-1:centerRow+1, centerCol-1:centerCol+1) = 10;
    A(centerRow, centerCol) = 17