Posted by
Michael Schmid on
Oct 22, 2014; 7:54am
URL: http://imagej.273.s1.nabble.com/Pixel-inspector-rugosity-tp5010138p5010146.html
Hi Keyvan,
as long as the slope angles are low, it seems to me that rugosity can be approximated by
1 + 0.5((dv/dx)^2 + (dv/dy)^2)
where v is the pixel value.
This is essentially 1 + 0.5 times the square of the Sobel operator.
http://en.wikipedia.org/wiki/Sobel_operatorThe Sobel operator is implemented in ImageJ as Process>Find Edges.
For higher slopes, you need 1/cos(Sobel_output). In any case, make sure that your z units are the same as the distance between the pixels (use a 32-bit image, i.e. floating-point precision).
You can then average over the rugosity in any area by Analyze>Measure.
The result will be slightly different than what you get when calculating rugosity from the single pixel values because the Sobel operator does slight smoothing of the data (to avoid that, you may resize the image to twice or 3x the original size with bicubic interpolation).
---
The reason why the Pixel Inspector is limited in size is showing no more data than what fits the typical screen size, but also performance: When writing the plugin, I did not expect that any one would ever use it for sizes larger than roughly 7x7, so I simply took a jawa.awt.Label for each single number. This becomes quite slow for large amounts of numbers.
---
Another option if you need the pixel values for a larger area: Duplicate the selection and save as Text Image. Then you can read the values into your own program to calculate rugosity by the method of your choice. Or implement that method directly in an ImageJ macro or plugin.
Michael
________________________________________________________________
On Oct 21, 2014, at 20:03, Balazadeh Mohtadi, Carlos wrote:
> Hi everyone,
>
> I'm currently looking at trying to generate a value for rugosity or average
> roughness from a set number of pixels or a frame within a grayscale image.
>
> Pixel inspector gives me a wide array of pixel data with intensity values
> per pixel which can be translated into a surface plot easily. I would like
> to translate that data into a rugosity measurement of the plot generated,
> in this case, height would be designated by max peaks recorded in the pixel
> data frame.
>
> One issue I have with pixel inspector is that it can only give me a pixel
> inspection radius of 10 pixels. I need something slightly bigger and I'm
> not sure if I could potentially override this setting or not.
>
> I'm linking an image of the surface plot I'm generating within a specified
> area using the rectangle tool (unfortunately, I don't know if I can extract
> pixel data for the rectangle tool).
> The next image is an example of the surface plot I'm generating using the
> pixel inspector along with a .csv that contains the pixel data for that
> plot.
>
> 1 - rectangle tool surface plot ROI
>
https://www.dropbox.com/s/jim0svvd0h8ycou/1.bmp?dl=0>
> 2 - Pixel inspector ROI surface plot (much smaller than the first
>
https://www.dropbox.com/s/bh061xdl8y3yrzk/2.bmp?dl=0>
> Pixel data2 - Pixel data for image "2".
>
>
https://www.dropbox.com/s/43dpfffifv4bfof/Pixel%20data2.csv?dl=0>
> I'm converting all my images to 8-bit before generating these.
> As you see with picture 1, there is plenty of peaks and valleys that can be
> used to assess a rugosity value or roughness.
>
> If anyone has done similar work I'd greatly appreciate the help.
>
> Best regards,
>
> Keyvan Balazadeh
>
> --
> ImageJ mailing list:
http://imagej.nih.gov/ij/list.html--
ImageJ mailing list:
http://imagej.nih.gov/ij/list.html