所以,我在 matlab 中编写了这段代码,它应该执行非最大抑制。本质上,它应该将给定点与其邻居进行比较,如果它高于所有邻居,则将此点设置为 1,否则设置为零。
当我运行代码时,我拥有的图像是一条线。错误可能在哪里。
<function newMagnitudeImage = NonMaximalSuppression(magnitude,orientation)
[m,n]=size('Brainweb');
% Discretization of directions
orientationdis= zeros(m,n);
for i = 1 : m
for j = 1 : n
if ((orientation(i, j) > 0 ) && (orientation(i, j) < (pi/8)) || (orientation(i, j) > (7*pi/8)) && (orientation(i, j) < (-7*pi/8)))
orientationdis(i, j) = 0;
end
if ((orientation(i, j) > (pi/8)) && (orientation(i, j) < (3*pi/8)) || (orientation(i, j) < (-5*pi/8)) && (orientation(i, j) > (-7*pi/8)))
orientationdis(i, j) = pi/4;
end
if ((orientation(i, j) > (3*pi/8)) && (orientation(i, j) < (5*pi/8)) || (orientation(i, j) < (-3*pi/8)) && (orientation(i, j) > (5*pi/8)))
orientationdis(i, j) = pi/2;
end
if ((orientation(i, j) > (5*pi/8) && (orientation(i, j) <= (7*pi/8)) || (orientation(i, j) < (-pi/8) && (orientation(i, j) > (-3*pi/8)))))
orientationdis(i, j) = 3*pi/4;
end
end
end
newMagnitudeImage = zeros(m, n);
for i = 2 : m-1
for j = 2 : n-1
if (orientationdis(i, j) == 0)
if (magnitude(i, j) > magnitude(i, j - 1) && magnitude(i, j) > magnitude(i, j + 1))
newMagnitudeImage(i, j) = magnitude(i, j);
else
newMagnitudeImage(i, j) = 0;
end
end
if (orientationdis(i, j) == 45)
if (magnitude(i, j) > magnitude(i + 1, j - 1) && magnitude(i, j) > magnitude(i - 1, j + 1))
newMagnitudeImage(i, j) = magnitude(i, j);
else
newMagnitudeImage(i, j) = 0;
end
end
if (orientationdis(i, j) == 90)
if (magnitude(i, j) > magnitude(i - 1, j) && magnitude(i, j) > magnitude(i + 1, j))
newMagnitudeImage(i, j) = magnitude(i, j);
else
newMagnitudeImage(i, j) = 0;
end
end
if (orientationdis(i, j) == 135)
if (magnitude(i, j) > magnitude(i - 1, j - 1) && magnitude(i, j) > magnitude(i + 1, j + 1))
newMagnitudeImage(i, j) = magnitude(i, j);
else
newMagnitudeImage(i, j) = 0;
end
end
end
end