Can anyone help me to find out why I can't replace pixel values at (x, y-1) and (x+1, y) with the value at (x, y) ?

1 view (last 30 days)
I am using Matlab and I need your help! Assume that the 8 neighbors of the location (x,y) are:
top-left (x-1,y-1);
top-middle (x,y-1);
top-right (x+1,y-1);
middle-left (x-1,y);
middle-middle(x,y);
middle-right (x+1,y);
bottom-left (x-1,y+1);
bottom-middle(x,y+1);
bottom-right (x+1,y+1);
With the following example (of A = magic(5)), I can only replace the numbers or 'let's say' pixel values at (x-1, y) and (x, y-1) with the value at (x, y). But, I can’t replace the pixel values at (x, y+1) and (x+1, y) with the value at (x, y).
Can any help me to understand why ? In addition, can you please help me to write a code that would replace the pixel values at the locations (x-1, y); (x, y-1); (x, y-1) and (x+1, y) with the value of (x,y) location - without affecting other locations not nearest or adjacent to (x,y)? Many thanks in advance!
A = magic(5);
M1 = size(A,1);
M2 = size(A,2);
E = [5 20];
for x = 2:(M1-1)
for y = 2:(M2-1)
for k = 1:length(E)
if E(k) == A(x,y)
A(x-1,y) = A(x,y);
A(x,y-1) = A(x,y);
end
end
end
end
The expected results should look like this (with reference to E).
A =
17 5 1 8 15
5 5 5 20 16
4 5 20 20 20
10 12 19 20 3
11 18 25 2 9

Accepted Answer

Stephen23
Stephen23 on 13 Jan 2016
Edited: Stephen23 on 13 Jan 2016
N = 5;
E = [5,20];
%
X = magic(N);
Y = false(N+2);
for k = 1:numel(E);
Y(2:end-1,2:end-1) = X==E(k);
Z = Y(1:end-2,2:end-1) | Y(3:end,2:end-1) | Y(2:end-1,3:end) | Y(2:end-1,1:end-2);
X(Z) = E(k);
end
produces this:
X =
17 5 1 8 15
5 5 5 20 16
4 5 20 20 20
10 12 19 20 3
11 18 25 2 9

More Answers (0)

Categories

Find more on Numeric Types in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!