I'm absolutely unsure if I got right what you want, but I'll give it a try.
The general steps are the fowllowing:
- Take your image (which is of too low quality for a good texture) and create from it a gray-image that you can use as bump-map. Bright spots are higher and black is flat. Additionally, we use the original image as texture
- Create an interpolation function from the pixel-data of the bump-map where you take care that it does the transformation from image coordinates to ellipsoid parameters
- Create a custom parametric function for the ellipsoid that includes the bump-map that can be scaled with a factor. When the factor is zero, it would give a normal ellipsoid and the higher the factor, the more visible the bumps get.
- Use
ParametricPlot3D
to plot your custom ellipsoid and use your image as a texture.
Most of the fiddling is to get the coordinate-system of interpolating function and the texture right and I didn't try hard to clean this up. First, I import your image and I use a combination of the brightness and the saturation channel as bump-map. Additionally, I smooth the bump-map a bit to prevent pixel artifacts.
img = Import["https://i.sstatic.net/m7YSX.png"];
{h, s, b} = ColorSeparate[img, "HSB"];
height = GaussianFilter[
ImageData[ImageAdjust[ImageAdd[s, ColorNegate[b]]], "Real"], 2];
Image[height]
Now we turn the height
data into a function that can be used with the parametric form of an ellipsoid. The transformations are necessary because you probably want the center of the image at one end of the ellipse.
With[{ip =
ListInterpolation[height, {{-Pi/2, Pi/2}, {-Pi/2, Pi/2}}]},
bumpMap[theta_?NumericQ, phi_?NumericQ] :=
ip @@ ((Pi/2 - theta)*{Cos[phi], Sin[phi]}) /; 0 <= theta <= Pi/2 && 0 <= phi <= 2 Pi;
bumpMap[___] := 0.0
]
The parametric function of the ellipsoid takes the two angles and the ratios a, b, and c as defined on the wiki page. In addition, we make the bump-map stick out normal to the surface of the ellipsoid.
ellipsiod[theta_, phi_, a_, b_, c_, factor_] :=
With[{pt = {a Cos[theta]*Cos[phi], b Cos[theta] Sin[phi],
c Sin[theta]}},
pt + bumpMap[theta, phi]*factor*pt/Norm[pt]
]
Finally, you can make a parametric plot and grab a tea in the meantime because this takes long if you want a bit of quality
ParametricPlot3D[
ellipsiod[theta, phi, 1, 1, 2, 0.07], {theta, 0, Pi/2}, {phi, 0, 2 Pi},
PlotPoints -> 100,
MaxRecursion -> 5,
PlotStyle -> Texture[img],
TextureCoordinateFunction ->
Function[{x, y, z, u, v}, ((Pi/2 - u)/(Pi))*{Cos[v - Pi/2], Sin[v - Pi/2]} + 1/2],
TextureCoordinateScaling -> False, Mesh -> None, Ticks -> None,
Lighting -> "Neutral"
]
Plot3D[Sqrt[1 - x^2 - y^2], {x, -1, 1}, {y, -1, 1}, Mesh -> None, BoxRatios -> {1, 1, 1/2}]
, i.e. one hemisphere is mapped onto the circular plot from the OP. $\endgroup$