Just to show that this question is a duplicate of the link given in its body:
By using ssch's answer one can get the coordinates of the shape:
img = Import["https://i.stack.imgur.com/UhLrU.png"];
img = ImageTake[img, All, {1, ImageDimensions[img][[2]]/2}];
img = ColorNegate[GradientFilter[img, 4]];
{width, height} = ImageDimensions[img];
width = width - 3;
f[y_] := Module[{i = 1},
While[ImageValue[img, {i, y}] > .99 && i < width, i = i + 1]; width - i + 1]
Where f[y] gives the radius in terms of the height. Some quick operations can be done in order to obtain a good looking shape:
coor[n_] := Select[Reverse /@ Sort@({#1, f[#1]} & /@ Range[1,height,n]), 5 < First@# < 50 &]
shapePos = coor@10
where n would represent the sharpness/precision of the shape.
Then by using J.M.'s answer:
parametrizeCurve[pts_List, a : (_?NumericQ) : 1/2] :=
FoldList[Plus, 0, Normalize[(Norm /@ Differences[pts])^a, Total]] /;MatrixQ[pts, NumericQ]
tvals = N@parametrizeCurve[shapePos];
m = 3;
knots = Join[ConstantArray[0, m + 1], MovingAverage[ArrayPad[tvals, -1], m], ConstantArray[1, m + 1]];
bas = Table[BSplineBasis[{m, knots}, j - 1, tvals[[i]]],
{i,Length[shapePos]}, {j, Length[shapePos]}];
ctrlpts = LinearSolve[bas, shapePos];
Graphics[{BSplineCurve[ctrlpts, SplineDegree -> 3, SplineKnots -> knots],
{AbsolutePointSize[4], Point[shapePos]}}, Axes -> None, Frame -> True]

circPoints = {{1, 0}, {1, 1}, {-1, 1}, {-1, 0}, {-1, -1}, {1, -1}, {1, 0}};
circKnots = {0, 0, 0, 1/4, 1/2, 1/2, 3/4, 1, 1, 1};
circWts = {1, 1/2, 1/2, 1, 1/2, 1/2, 1};
wgpts = Map[Function[pt, Append[#1 pt, #2]], circPoints] & @@@ ctrlpts;
wgwts = ConstantArray[circWts, Length[ctrlpts]];
Graphics3D[{EdgeForm[], Opacity@.75, Brown,
BSplineSurface[wgpts, SplineClosed -> {False, True},
SplineDegree -> {3, 2}, SplineKnots -> {knots, circKnots},
SplineWeights -> wgwts]}, Boxed -> False]

f[y]from ssch's answer and using J.M methods give a decent 3D plot. – Öskå Apr 26 '14 at 12:15