Posted by
Jeremy Adler-2 on
Nov 01, 2016; 4:49am
URL: http://imagej.273.s1.nabble.com/grey-scale-skeleton-transform-tp5017505p5017514.html
You want to identify an intensity ridge.
A ridge might be defined as
a continuous line of pixels that connects two end points while passing through the most intense intervening pixels. The problem is there will only be single solution if the intensity ridge has no branch points.
In practice - roughly mark the two end points and make a local search for the most intense pixel around each - your start and target pixel.
from the start pixel calculate the next location along a straight line to the target pixel, say 5 pixels in, and repeat the local search but at right angles to the line and find the location of an intensity peak (perhaps a pixel whose neighbors along the search line in both directions have a lower intensity). Then recalculate the line from this new location to the target pixel and repeat until you arrive at the end pixel.
A better variant would be incrementally move from the two points that were initially identified as the ends of the intensity ridge.
After the line is completed it could be extended from each end along the direction of the line, the problem being to set the criteria for the final end points of an intensity ridge - how do you define a ridge.
Applying a local mean filter to the image will reduce the effect of noise.
If the ridge is not linear then marking a number of intermediate points would help.
The manual component is not ideal but precisely defining what is meant by an intensity ridge is difficult
________________________________________
From: ImageJ Interest Group [
[hidden email]] on behalf of Michael Schmid [
[hidden email]]
Sent: 31 October 2016 12:42
To:
[hidden email]
Subject: Re: grey scale skeleton transform
Hi Joost,
if the intensity along the ridges is roughly constant, you could try
'Find Maxima' with output 'Maxima within tolerance', then skeletonize.
Another option: Try a Laplace filter, i.e. convolution with this kernel:
-1 -2 -1
-2 12 -2
-1 -2 -1
You might need some smoothing before or after this step to reduce noise;
use 32-bit (float) images in any case. Then threshold and skeletonize.
[Since Laplace is a linear operation, any linear smoothing operations
can be done before or after the Laplace, with the same result; the only
difference is numerical noise. If you need much smoothing, a difference
of Gaussians filter, i.e. the difference of the image smoothed by
gaussian Filters of different radius will do the same job with less
numerical noise]
If this is not sufficient, a slightly better ridge detection is finding
the 4 values of the 2nd derivatives in the 4 directions separated by 45°
and then some criterion that gives you the best score if you have a high
negative second derivative in one direction, but approximately zero
perpendicular to it.
Michael
________________________________________________________________
On 2016-10-31 10:51, Joost Willemse wrote:
> Hi everyone,
>
> Does anyone know a plugin to create a skeletonized image based on a
> grey-scale images instead of based on binary images. I have pictures which
> have an intense line of fluorescence which I want to localize precisely but
> there is quite some variation along the length of the line which makes a
> normal thresholding insufficient.
>
> If i do skeletonize the binary image I get the middle of my region back
> which does not necessarily coincide with the highest intensity skeleton
> from the region.
>
> All help is appreciated
> Joost willemse
> Leiden University
>
> --
> ImageJ mailing list:
http://imagej.nih.gov/ij/list.html>
--
ImageJ mailing list:
http://imagej.nih.gov/ij/list.html--
ImageJ mailing list:
http://imagej.nih.gov/ij/list.html