comparing 3x3 block with center pixel
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
Elysi Cochin
el 13 de Nov. de 2019
Comentada: Matt J
el 21 de Nov. de 2019
i have a matrix as shown below
i wanted to take 3x3 pixel and take 3 pixels at a time along with the center pixel,
and compare the selected 3 pixel value with the center pixel,
and if 2 or morepixel has value greater than the center pixel and i wanted to assign 1 to it else 0
So in this case i will get 0-1-1-0 and then convert the binary 0110 to its corresponding decimal value = 6
Then the next 3x3 pixel
4 comentarios
KALYAN ACHARJYA
el 20 de Nov. de 2019
You did not answered the @Matt J question.
Also is the start pixel at 70 or 200?
What about boundary pixels?
Respuesta aceptada
Matt J
el 20 de Nov. de 2019
Editada: Matt J
el 20 de Nov. de 2019
Here, X is the input matrix.
result=0;
result=result+1*rot90(fkernel(rot90(X,+1)),-1);
result=result+2*rot90(fkernel(rot90(X,+2)),-2);
result=result+4*fkernel(X);
result=result+8*rot90(fkernel(rot90(X,-1)),+1);
function Y=fkernel(X)
[m,n]=size(X);
Y=nan(m-2,n-2);
for i=1:n-2
B=X(:,i:i+2);
Y(:,i)=sum(B(1:m-2,:)>=B(2:m-1,2),2)>=2;
end
end
0 comentarios
Más respuestas (1)
KALYAN ACHARJYA
el 20 de Nov. de 2019
Editada: KALYAN ACHARJYA
el 20 de Nov. de 2019
Self Declaration: Odd Way but simpler
for i=2:Row-1
for j=2:Col-1
if (mat(i,j)<mat(i-1,j-1)+mat(i,j)<mat(i,j-1)+mat(i,j)<mat(i+1,j-1))=>2
data(1)=1;
else
data(1)=0;
end
if (mat(i,j)<mat(i-1,j-1)+mat(i,j)<mat(i-1,j)+mat(i,j)<mat(i-1,j+1))=>2
data(2)=1;
else
data(2)=0;
end
if (mat(i,j)<mat(i+1,j-1)+mat(i,j)<mat(i_1,j)+mat(i,j)<mat(i+1,j+1))=>2
data(3)=1;
else
data(3)=0;
end
if (mat(i,j)<mat(i-1,j+1)+mat(i,j)<mat(i,j+1)+mat(i,j)<mat(i+1,j+1))=>2
data(4)=1;
else
data(4)=0;
end
mat(i,j)=bin2dec(logical(data));
end
end
7 comentarios
Jan
el 21 de Nov. de 2019
@Matt J: You are right, modifying mat inside the loop, which uses mat as input also is not wanted. If you declare data before the loops and reset the values to 0 by data(:)=0 or if it is recreated by zeros(1,4) does not really matter. For large arrays one of the methods might be faster than the other.
Matt J
el 21 de Nov. de 2019
@Jan: It does matter however, that you were recreating data outside the j-loop. It needs to be reset inside both loops after each (i,j) is processed.
Ver también
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!