回転を許して面積が最小になる外接矩形を求めるプログラムを作成してみました(たぶんちゃんと動いていると思いますが、何らか極端なケースで変な結果が出る可能性もありますので、常に可視化して結果の妥当性ご確認ください)。下記が添付のプログラムを動かす例となります。
im = imread('hirn0vxp.png');
bw = imbinarize(im_gray);
minrect_info = im_minarearect(bw);
for rgi = 1:height(minrect_info)
pt_corners = minrect_info.Corner_Points{rgi};
temp = [pt_corners;pt_corners(1,:)];
plot(temp(:,1),temp(:,2),'g-o');
pt_center = mean(pt_corners,1);
text(pt_center(1),pt_center(2),...
{sprintf('area:%5.1f',minrect_info.Min_Area(rgi)),sprintf('rot:%3.1f',minrect_info.Rotation_Angle(rgi))},...
text(pt_corners(:,1),pt_corners(:,2),num2str([1:4]'),'Color','y');
これを動かすと下記のような図が出てくるかと思います。
座標の並び順や回転角度の定義などは下記の通りです。