how to adress neighbours in matrix
1 次查看(过去 30 天)
显示 更早的评论
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 个评论
采纳的回答
Image Analyst
2013-11-4
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 个评论
Image Analyst
2013-11-4
编辑:Image Analyst
2013-11-4
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.
更多回答(0 个)
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!