BW is logical, just 0 and 1. When you uint8() that, you are creating an image with just uint8(0) and uint8(1), which is too dark to be visible.
You are also doing the grayscale conversion on a double array that is out of range for valid double coefficients, and that is affecting your output.
scaled = 255 * width/MAX;
scaled8 = uint8(scaled);
level = graythresh(scaled8);
BW = im2bw(scaled8, level);