I have a basic level of image processing/matlab. I need to write an m file to complete skeletisation of a binary image of the word "skeleton" in white on a black background. It is to be done without using matlab functions for skeletising. thank you

4 views (last 30 days)
Hi, I have a basic level of image processing/matlab. I need to write an m file to complete skeletisation of a binary image of the word "skeleton" in white on a black background. It is to be done without using matlab functions for skeletising. possibly one that will work on all binary images. Thanks
my code is as follows. I created it using an algorithm found online and adapted it to this:
clear all
I=imread('skeleton.jpg')
I = im2double(I);
I = im2bw(I);
figure, imshow(I);
H = size(I, 1); %height of image
W = size(I, 2); %width of image
for i = 2:H-1
for j = 2:W-1
Neighbour = [I(i-1,j) I(i-1,j+1) I(i,j+1) I(i+1,j+1) I(i+1,j) I(i+1,j-1) I(i,j-1) I(i-1,j-1)];
Surrounds = [I(i-1,j) I(i-1,j+1) I(i,j+1) I(i+1,j+1) I(i+1,j) I(i+1,j-1) I(i,j-1) I(i-1,j-1) I(i-1,j)];
Transition = nnz(diff(Surrounds)==1);
Non_zero = sum(Neighbour(:)==1);
if Transition==1 && (2<=Non_zero<=6) && (I(i-1,j)*I(i,j+1)*I(i+1,j)==0) && (I(i,j+1)*I(i+1,j)*I(i,j-1)==0)
I(i,j)=0;
end
end
end
figure, imshow(I)
  5 Comments
Image Analyst
Image Analyst on 18 Apr 2013
The restriction that you can't use the built-in MATLAB function that calculates the skeleton. I mean, why not use it?
Ralph Dunne
Ralph Dunne on 18 Apr 2013
It is a project that I am completing and as part of the project no functions from matlab for the operation may be used. It must be built by creating my own m file which will complete the skeletising of the image. I am stuck from here I found this algorithm online at the link below under Parallel skeletonization algorithm 1 but I seem to have made a mistake as it does not fully work. It seems quite basic when explained in the article but I seem to have a problem with my coding if you have any ideas to help I would really appreciate it.

Sign in to comment.

Answers (1)

Thomas
Thomas on 18 Apr 2013
The grassfire transform would be easy to implement: http://en.wikipedia.org/wiki/Grassfire_Transform
Be aware that this algorithm is not exceptionally fast. However, it can be parallelized.
  1 Comment
Ralph Dunne
Ralph Dunne on 18 Apr 2013
thanks, I used the example algorithm found in the grassfire link you answered with. I am finding it hard to implement this algorithm. I am not a great coder. does the grassfire return a distance transfrom? the link below is the result I am trying to complete

Sign in to comment.

Categories

Find more on Resizing and Reshaping Matrices 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!