First and foremost, it must be mentioned that in the artist's work, not all possible triangles are drawn from the vertices. There are triangles whose one or more edges consist of more than two vertices; technically they are polygons (disguising as triangles). And in fact, there are also non-disguising 4-gons. Shown below are some of those things.

It would be too difficult for me to write a code that reproduces this artistic judgment. I'll stick to normal triangulation and adapt shrx's code. The explanation is at the very end.
Code
(* parameters *)
standardwidth = 600;
numblocks = 10;
n = 1500;
binarizethreshold = 4 / 10;
edradius = 2;
edthreshold = 1 / 40;
whitethreshold = 7 / 10;
bg = Green;
bgmarker = 1 / Pi;
imglocation = "http://cdn.inquisitr.com/wp-content/uploads/2015/04/Marilyn-Monroe-665x385.jpg";
(* functions *)
h[{v1_, v2_, v3_}] := Module[
{a, b, c, s},
a = EuclideanDistance[v1, v2];
b = EuclideanDistance[v1, v3];
c = EuclideanDistance[v2, v3];
s = (a + b + c) / 2;
2 Sqrt[s (s - a) (s - b) (s - c)] / c
];
shadetri[tri_, col_, f1_:1, fc_:1] := If[
col > whitethreshold,
tri,
Module[
{v, newcol, sf},
v = tri[[1, RandomSample[Range[3]]]];
newcol = Rescale[col, {0, whitethreshold}];
sf = Ceiling @ If[
newcol == 1,
fc h[v],
Min[f1 (1 - newcol) h[v], fc h[v]]
];
Append[Scale[Line @ Rest @ v, #, First @ v] & /@ (Rest @ Most @ Subdivide @ sf), tri]
]
];
turngrey[{r_, g_, b_}] := 0.21 r + 0.72 g + 0.07 b;
(* pre-processing *)
img = Composition[
ImageCrop[#, {standardwidth, Ceiling[Last @ ImageDimensions[#], numblocks]}, Padding -> bg] &,
RemoveAlphaChannel[#, bg] &,
RemoveBackground,
ImageResize[#, standardwidth] &,
Import
] @ imglocation
{x, y} = ImageDimensions[img];
imgintermediate1 = Composition[
Binarize[#, binarizethreshold] &,
ImageMultiply[#, ColorNegate[EdgeDetect[#, edradius, edthreshold]]] &,
ColorConvert[#, "Grayscale"] &,
RemoveAlphaChannel[#, White] &,
RemoveBackground
] @ img
imgptt = Map[
ImageData,
ImagePartition[
ColorNegate @ imgintermediate1, {standardwidth / numblocks, y / numblocks}],
{-1}
];
newones = Composition[
# / Max[Flatten @ #] &,
Map[(Count[#, 0] &) @* Flatten, #, {-3}] &
] @ imgptt;
imgintermediate2 = ImageAssemble[
Map[Image, MapThread[#1 /. {1 -> #2} &, {imgptt, newones}, 2], {-3}]
]
pts = Composition[
Map[Reverse],
RandomChoice[# -> Tuples @ {Range[y, 1, -1], Range[x]}, n] &,
Flatten,
ImageData
] @ imgintermediate2;
Graphics[Point /@ pts]
(* construction *)
m = DelaunayMesh @ pts;
polygons = MeshPrimitives[m, 2];
cols = With[
{colour = ImageValue[img, Mean @@ #]},
If[
colour == List @@ ColorConvert[bg, "RGB"],
bgmarker,
turngrey @ colour
]
] & /@ polygons;
ragged = Select[Transpose[{polygons, cols}], Last @ # != bgmarker &];
finalg = Graphics[
{
EdgeForm[Black],
FaceForm[],
MapThread[shadetri[#1, #2, 2, 3] &, Transpose@ragged]
},
ImageSize -> 2 {x, y}
]
Examples
Here are some images. Also shown are their tuning parameters.
Marilyn Monroe
n = 1500;
binarizethreshold = 4 / 10;
edradius = 2;
edthreshold = 1 / 40;
whitethreshold = 7 / 10;

Audrey Hepburn
n = 1000;
binarizethreshold = 4 / 10;
edradius = 2;
edthreshold = 1 / 40;
whitethreshold = 7 / 10;

Example image from the OP8, with background removed and contrast adjusted (in Photoshop).
n = 5000;
binarizethreshold = 4 / 10;
edradius = 2;
edthreshold = 1 / 10;
whitethreshold = 7 / 10;

Albert Einstein
n = 3000;
binarizethreshold = 6 / 10;
edradius = 2;
edthreshold = 2 / 10;
whitethreshold = 7 / 10;

President Obama
n = 4000;
binarizethreshold = 3 / 10;
edradius = 2;
edthreshold = 1 / 20;
whitethreshold = 5 / 10;

Explanation
Image Size: The width is set to 600px (standardwidth
), and the height rounded up to a multiple of numblocks
(which should be a factor of standardwidth
). This is important later for ImagePartition
.
Point sampling source (imgintermediate1
): The source is chosen to be strictly black and white (i.e. 'Binarized'). Edges are preserved with EdgeDetect
. And for the purpose as a sampling source, the background is changed from bg
to just White
; we don't want any points in the background after all.
Point sampling weights (imgintermediate2
): The generation of points is done by sampling n
points from the 'black' part of the image. All black pixels in the 'Binarized' source have the same weight for RandomChoice
. Sampling more points results in smaller triangles everywhere equally. But a large black patch won't need many small triangles. Points shouldn't be wasted in those areas but flocked in smaller areas to maximise detail. The weight of the black patches should be lowered. The larger the patch, the lower the weight. This is (kinda sloppily) done by 'ImagePartitioning' the sampling source, counting the number of black pixels in each partition, and dumbing down the weight in each partition accordingly.
Background removal: The mesh m
is within a convex hull, so there will always be triangles whose centroid falls on the background. They are unwanted. To mark them for removal, they are shaded with some distinct grey (bgmarker
). It can be any number smaller than one with many random digits really. For easiness I just choose 1 / Pi
.
Making grey (turngrey
): shrx's answer turns a color pixel grey by averaging the three channels. I try another formula.
Triangle shading (shadetri
): shrx's answer draws those shading lines within a triangle by duplicating and scaling that triangle. My method is duplicating and scaling just one randomly chosen edge from the triangle. This should result in at least slightly faster rendering (and a cleaner image).
Shades: The greyness value for triangle shading runs from 0
(black) to 1
(white). Originally, the shading is done up to a certain threshold (called whitethreshold
here) based on the greyness associated to a particular triangle. I also rescale such greyness to whitethreshold
to even out the distribution of shaded triangles. (To see what I mean, put Rescale[col, {0, 1}]
in newcol
instead and work with a generally darker source (like the given Obama or Hepburn). You would want to set low whitethreshold
to get more unshaded triangles. Without rescaling, there would be very few lightly shaded triangles, causing a 'jump' from unshaded to shaded areas.)