How to measure the volume of rock?

I have a object which is similar to the shape of irregular rock like this

I would like to find the volume of this. How to do it?

If I have to find the volume, what are the things I would need. eg., If it is cylindrical, I would measure length and diameter. But, it is irregularly shaped. Like the above rock.

Where should I start? Couple of google search says something related to integration and contours. Somebody pls give me some handle :) I would say i'm very beginner level in math.

Many Thanks :)

Edit: 60 to 70% accuracy would be helpful.

-

14
You could always use Archimedes' solution: submerge it in water, and measure the volume of water displaced. – Nate Eldredge Jul 31 '12 at 14:14

1
For something as irregular as your example rock, I think Nate's solution is the only sensible one. – John Wordsworth Jul 31 '12 at 14:15

3
The object is tumor inside the stomach. @Qiaochu Yuan a 3D angiogram – Prince Ashitaka Jul 31 '12 at 14:26

3
– draks ... Jul 31 '12 at 14:28

1
What kind of measuring tools do you have then? I assume you can see it in fair detail if you're comparing it to the rock. How do you know the shape/rough size of it in the first place? – Robert Mastragostino Jul 31 '12 at 14:29
show 5 more comments

3 Answers

As your comment indicates, you're not interested in rocks so much as tumors.

One possible approach is to use a tomographic technique. Many medical imaging tools image the body using tomography: that is, examining the body one "slice" at a time.

If you have access to such tools, or can derive such an example, then what you want to do is cut the rock/tumor into many slices along some axis, and then compute the area of the tumor at that slice. This is a bit easier to do that doing it in three dimensions.

Then, you move forward by some $\Delta z$ along the $z$-axis (or whatever axis), and repeat.

Multiply each surface area by $\Delta z$, sum them, and you will get a good estimate. The estimate is better the smaller your $\Delta z$.

To compute the area of each "slice", you can do many things: fit a simpler shape to the data, perform Monte Carlo integration, or decompose the shape into a series of piecewise linear segments.

-

2
– J. M. Jul 31 '12 at 16:34

2
I think typically the slices from tomographies are digital images consisting of pixels. In that case determining the size is easy: Just count all the pixels which belong to the tumor in all the slices, and multiply this with the area each pixel covers in each slice, and with the distance between slices. – celtschk Jul 31 '12 at 18:15

1
@celtschk Good point. If you have a digital image, you can use a simple threshold method to get the "area". A simple MATLAB script could be something like length(find(IMG > thresh))/prod(size(a)). – Arkamis Jul 31 '12 at 18:22

If you don't want to use Archimedes' solution, and you know the material, you can look up the density and weigh the rock.

-

The easiest way (if you have a 3d model) is simple Monte Carlo integration. One builds a big bounding box around the "rock", and then randomly chooses a large points inside the box. The ratio of points inside the "rock" to the the number of total points, is the ratio of volumes. Since you can easily calculate the box's volume, you now also know the volume of the rock.

The task of finding whether or not a point is inside the rock is in general complex, but is simplified if you can assume that the rock is convex. In that case, you test each triangle that belongs to your 3D mesh: if the point is in the right side for all triangles, the point is inside.

-
{"extraction_info": {"found_math": true, "script_math_tex": 0, "script_math_asciimath": 0, "math_annotations": 0, "math_alttext": 0, "mathml": 0, "mathjax_tag": 0, "mathjax_inline_tex": 4, "mathjax_display_tex": 0, "mathjax_asciimath": 0, "img_math": 0, "codecogs_latex": 0, "wp_latex": 0, "mimetex.cgi": 0, "/images/math/codecogs": 0, "mathtex.cgi": 0}, "config": {"markdown_headings": false, "markdown_code": true, "boilerplate_config": {"ratio_threshold": 0.18, "absolute_threshold": 10, "end_threshold": 15, "enable": true}, "remove_buttons": true, "remove_image_figures": true, "remove_link_clusters": true, "table_config": {"min_rows": 2, "min_cols": 3, "format": "github"}, "remove_chinese": true, "remove_edit_buttons": true, "extract_latex": true}, "english_confidence": 0.9242060780525208, "perplexity_flag": "middle"}