how to adress neighbours in matrix
2 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Jakub
am 4 Nov. 2013
Kommentiert: Jakub
am 4 Nov. 2013
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"?
0 Kommentare
Akzeptierte Antwort
Image Analyst
am 4 Nov. 2013
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
5 Kommentare
Image Analyst
am 4 Nov. 2013
Bearbeitet: Image Analyst
am 4 Nov. 2013
You'd have to set the 4 "sides" one at a time. For example to set the outlines at 2 away from the middle:
A(centerRow-2, centerCol-2:centerCol+2) = 20; % Top line
A(centerRow+2, centerCol-2:centerCol+2) = 20; % Bottom line
A(centerRow-2:centerRow+2, centerCol-2) = 20; % Left line
A(centerRow-2:centerRow+2, centerCol+2) = 20; % Right line
If they're not perfect rectangles, but irregular shapes, or if you want the dot to expand out to an octagon or something, then you'd have to use mathematical morphological dilation with a structuring element of the desired shape. See bwmorph() in the Image Processing Toolbox.
Or you could do it by computing the distance transform with bwdist() and then thresholding.
Weitere Antworten (0)
Siehe auch
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!