EDIT: Updated the algorithm, new part below
Fun problem!
Ok, my first would be to find the room centers. This is relatively easy using a distance transform and geodesic erosion.
distTransform = DistanceTransform[ColorNegate@m];
ImageAdjust[distTransform]

The distance transform image contains for every pixel the distance to the closest wall. We're looking for the bright "peak" in the distance transform, i.e. the center of each room.
centerAreas = ImageDifference[
GeodesicDilation[Image[ImageData[distTransform] - 10],
distTransform], distTransform]
EDIT: The next part is new
With this, we can use a watershed transform to find the rooms. The watershed transform (intuitively speaking) finds "basins" in a 3d landscape. We'll invert the distance transform image to turn the "peaks" into "basins" and use the room centers as markers:
watershed =
DeleteSmallComponents[
DeleteBorderComponents[
Binarize[
Image[WatershedComponents[ColorNegate[distTransform],
centerAreas]]]], 1000]

This segments the rooms quite well. Unfortunately, the watershed transform ignores the walls - the components we found are too big. But they're close enough that this simple "grow the room rectangle until it hits the wall"-algorithm finds the actual room areas:
rooms = ComponentMeasurements[watershed, "BoundingBox"];
Clear[growRect]
growRect[{{x1_, y1_}, {x2_, y2_}}] :=
Module[{checkRectEmpty, growSingleDirection, growSingleStep, cx, cy,
left, top, right, bottom, sizeEstimate, size},
(
{cx, cy} = Round[{x1 + x2, y1 + y2}/2];
checkRectEmpty[{left_, top_, right_, bottom_}] :=
Max[ImageValue[
m, {cx - left ;; cx + right, cy - top ;; cy + bottom}]] == 0;
growSingleDirection[size_, grow_] :=
If[checkRectEmpty[size + grow], size + grow, size];
growSingleStep[size_] :=
Fold[growSingleDirection, size, IdentityMatrix[4]];
sizeEstimate =
Abs[Round[{x2 - x1, y2 - y1, x2 - x1, y2 - y1}/2 - 20]];
{left, top, right, bottom} =
FixedPoint[growSingleStep, sizeEstimate, 20];
Rectangle[{cx - left, cy - top}, {cx + right, cy + bottom}]
)]
Using this, all that's left is to display the results:
finalRectangles = growRect /@ rooms[[All, 2]];
feetAndInch[n_] := ToString[Round[n/12]] <> "'" <> ToString[Mod[n, 12]]
Show[m,
Graphics[
{
finalRectangles[[ ;; ]] /.
rect : Rectangle[{x1_, y1_}, {x2_, y2_}] :>
{
{EdgeForm[Red], Transparent, rect},
{Red,
Text[StringForm["`` x ``\n``", feetAndInch@(x2 - x1),
feetAndInch@(y2 - y1), (x2 - x1)*(y2 - y1)/(144.)], {x1 + x2,
y1 + y2}/2]}
}
}]]

or, using the original floor plan as background:
