You can use imellipse:
I = imread('eight.tif');
% roughly estimating ellipse values from your given c/r
c = [222 272 300 270 221 194];
r = [21 21 75 121 121 75];
xmin = min(c);
ymin = min(r);
width = range(c);
height = range(r);
h_im = imshow(I);
e = imellipse(gca,[xmin ymin width height]);
BW = createMask(e,h_im);
figure, imshow(I)
figure, imshow(BW)
If you don't want to use an eclipse, you can use interp1 or other interpolation functions on c and r :
% editing r and c so the shape closes - just take first value, append to end:
c = [222 272 300 270 221 194 222];
r = [21 21 75 121 121 75 21];
% adjust interpolation to suit
c2 = interp1(1:7,c,1:0.2:7,'pchip');
r2 = interp1(1:7,r,1:0.2:7,'pchip');
BW2 = roipoly(I,c2,r2);