Can a skeletonizaed image be greyscale? Can skeletonization be done on a greyscale image or it should be binarized before skeletonization?

I an using an imagej plugin to skeletonized my image. It uses min error method. My original image is greyscale and the skeletonized image is greyscale too but I can only see white and black which seems to be black and white (binarized) image. But it is not. There is no shade of black and white like light grey or dark grey. So why this image is greyscale? Where are those shades of greyness?

minerr black white.tif (4.8 MB)

The next question is that the reason for skeletonization is to get rid of redundant information and keep connectivity. Based on this, I think the image should be binarized to be able to be skeletonized.

Your posted image is 32-bit (ie. floating point) presented with a grey scale lookup table and contains only 86 different values (0-85). Depending on what plugin you have used, this might indicate the rounds of eroding-by-1-pixel of the original image to end with the current skeleton.
Image>Type>8-bit converts it to true grey (monochrome) image without losing any information.

“The next question”: what do you mean with ‘redundant information’? the individual pixels? And with ‘keep the connectivity’ that you want to find all points that are branching points and connect them with straight lines, or maybe only the conneciton information as in branching point at (x,y) connects to {(x1,y1),(x2,y2)…(xn,yn)} for every (x,y) being a branching point?

1 Like

@eljonco Thanks. I used lpx plugin: for skeletonization. Searching online, I realized that skeltonization is done on binarized image:
this makes me unclear that how lpx plugin can do skeletonization on the greyscale image?

i’m afraid that first link to throws me an empy page in multiple browsers and the home page throws a title that is partially hidden, partially Japanese and a page that is blank otherwise.

As your original question states the method used is “it uses min error method”. In ImageJ proper, that is a method to threshold (it is in the popup of the threshold dialog that default reads Default) so I assume that in the skeletonisation, first a thresholding step is used to have a binary image, which, as you stated, is needed for the skeletonisation.

From your skeletonised image, it is impossible to reconstruct the original input image. I know you are hesitant to sharing images, but could you post the image you used as input for this resulting skeleton?

And please elaborate a bit on the second part of your original question: what do you expect to keep (see my previous post in this thread).

1 Like

@eljonco I attached the jar file of this plugin.

You should add your information in this page: and then the link to download the plugin will be available.
The explanation for this plugin is in this paper:
As an example this image is taken from a published paper:
And here is the skeletonized image:
1_minErr.tif (343.6 KB)
using lpx plugin minError method.

About my second question, all I am asking is that by intuition, I think skeletonization should be done on binarized image and the output of skeletonization should be binary image too. But the input and output of this plugin is greyscale and not binary image. Any idea to explain how is this possible?

Hi @Zeynab_Mousavi,

Thanks for your detailed pointer. Skimming the paper briefly -forgive me for not taking the time and effort to register and dive into the software if source is available- to me it looks as if the usage steps, not the underlying algorithms of the plugin are explained in the paper. In this case, I think other articles of (the lab of) professor Kutsuna are the best source for more information on the inner workings of the software.

On your second question: if you threshold a grey scale image for skeletonisation as a first step, it becomes binary. Then a standard skeletonisation can be performed. The radius of the bi-tangent circles on the page with explanation of skeletonisation principles you linked to may well be the result of the skeletonisation in the form of skeleton pixel values representing this radius. If a binary skeleton is needed, you could always simply threshold this resulting image, while if somehow the radii could be of use, it is a waste to ‘simplify’ them to binary by default and return the binary image.

I thought your question to be more involved in simplifying the skeleton, e.g. how do I reduce my skeleton-pixel-set to lists of coordinates of connected branching points, or something along that line.

Hope this answer helps. Thanks.

1 Like

@eljonco Thank you. As the output of the skeletonization is a GREYSCALE image, so I dont think bianarizing and thresholding is the case here. I think this plugin does skeletonization on the gryscale image. I am trying to find the method of skeletonization of a GREYSCALE image.

What would be the added value, and how do you imagine a skeleton of a non-binarised image? Do you think about grey scale values representing heights of the mountains and of skeletons as being ridges of mountains?
If not, try to paint in words what you expect, why, and why it is of more importance than just a binary skeleton.

1 Like