imdilate() to connect across small breaks. Take the result and skeletonize it. Then from each "tip" of the skeleton, ask for the geodesic path back to a starting point. That path gives you implicit crack direction information.
But unfortunately the path is going to be pixelated, so at any one point you are going to want a bit of information about the previous and next pixel locations in order to determine your direction vector; the further back and further forward you look the more accurately you would be able to determine the slope of a long segment, but the more likelihood that you will encounter a curve in the path.
Supposing that you do create a function that can tell you the direction vector anywhere along the path, given the pixel list, to a satisfactory resolution. Then go back to the original image, and follow the path along it, take perpendicular to the direction, extend it in each direction until it hits the edge of the crack, total the length of the two sides, and that should be the width.
For direction vector (x,y) the perpendicular is (-y,x) or (y,-x)