Applying Moore's Boundary Tracing Algorithm for binary image

6 views (last 30 days)
Hello everyone!! I have tried to implement Moore's Boundary Tracing Algorithm for Edge Linking Operation of the binary image. This is my code:
function boundary = traceit(input)
binary = logical(input); [rows,columns] = size(binary); padded(rows+2,columns+2) = 0; padded(2:rows+1,2:columns+1) = binary;
N = circshift(padded,[0 1]); S = circshift(padded,[0 -1]); E = circshift(padded,[-1 0]); W = circshift(padded,[1 0]); boundary_image = padded - (padded + N + S + E + W == 5);
boundary_size = sum(boundary_image(:)) + 1; boundary(boundary_size,2) = 0;
for i = 1:rows for j = 1:columns if binary(i,j) == 1 break; end end if binary(i,j) == 1 break; end end
initial_entry = [j,i] + 1;
neighborhood = [-1 0; -1 -1; 0 -1; 1 -1; 1 0; 1 1; 0 1; -1 1]; exit_direction = [7 7 1 1 3 3 5 5];
for n = 1:8 c = initial_entry + neighborhood(n,:); if padded(c(2),c(1)) initial_position = c; break; end end
initial_direction = exit_direction(n);
boundary(1,:) = initial_position;
position = initial_position; direction = initial_direction; boundary_size = 1;
while true for n = circshift(1:8,[0,1-direction]) c = position + neighborhood(n,:); if padded(c(2),c(1)) position = c; break; end end
direction = exit_direction(n); boundary_size = boundary_size + 1; boundary(boundary_size,:) = position;
if all(position == initial_position) &&...
(direction == initial_direction)
break;
end
end
boundary = boundary - 1; end
After that I try to apply this function for my target image. I have perform the following conversion on the image before using the function: RGB - Gray Scale - Binary - Canny Edge Detector
im = imread('shape.png'); img = rgb2gray(im); BW = im2bw(img,0.5); e = edge(BW,'canny'); imshow(e,[])
e = traceit(out); figure imshow(out)
After I have computed, it does not return with any error, but the algorithm also doesn't work in the manner I expected neither. Please kindly give me some advice.
Thank you very much!!!
  1 Comment
John D'Errico
John D'Errico on 8 Jun 2016
Time to learn to use the debugger. Look at what it is doing. Then think about why there is something strange happening.

Sign in to comment.

Answers (0)

Products

Community Treasure Hunt

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

Start Hunting!