Skip to content

Instantly share code, notes, and snippets.

@alcides
Created December 22, 2010 10:59
Show Gist options
  • Save alcides/751384 to your computer and use it in GitHub Desktop.
Save alcides/751384 to your computer and use it in GitHub Desktop.
Matlab text skelecton extraction
function im = thinning(img)
% THINNING Short description
% [IM] = THINNING(IMG)
im = img;
repeat = 1;
is_even = 0;
while repeat
repeat = 0;
boundaries = im * 0;
is_even = 1-is_even;
for i = 1:size(im,1)
for j = 1:size(im,2)
if im(i,j) == 1
if is_even
if fst_condition(im, i, j)
boundaries(i,j) = 1;
repeat = repeat + 1;
end
else
if snd_condition(im, i, j)
boundaries(i,j) = 1;
repeat = repeat + 1;
end
end
end
end
end
im = im - boundaries;
end
end % function
function b = shared_condition(im, i, j)
P = neighbors(im, i, j);
B = size(find(P>0),2);
b = 2 <= B && B <= 6;
b = b && size(findstr([P P(1)], [0 1]),2) == 1;
end % function
function b = fst_condition(im, i, j)
b = shared_condition(im, i, j);
P = [ -1 neighbors(im, i, j)];
b = b && P(2)*P(4)*P(6) == 0;
b = b && P(4)*P(6)*P(8) == 0;
end % function
function b = snd_condition(im, i, j)
b = shared_condition(im, i, j);
P = [ -1 neighbors(im, i, j)];
b = b && P(2)*P(4)*P(8) == 0;
b = b && P(2)*P(6)*P(8) == 0;
end % function
function nei = neighbors(im, i, j)
P = [];
for k = -1:1
for l = -1:1
if k ~= 0 || l ~= 0
try
P = [P im(i+l, j+k)];
catch
P = [P 0];
end
end
end
end
nei = [ P(4) P(6:8) P(5) P(3) P(2) P(1) ];
end % function
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment