Triangles of neck
triangles of the neck anterior and posterior triangle diagram
"neck"[MeSH Terms] AND "anatomy"[MeSH Terms] AND triangle

| Triangle | Boundaries | Main contents |
|---|---|---|
| Submental (single, unpaired) | Hyoid body (inferior), anterior bellies of digastric (lateral), mandibular symphysis (apex) | Submental lymph nodes; tributaries forming the anterior jugular vein |
| Submandibular (paired) | Lower border of mandible, anterior and posterior bellies of digastric | Submandibular gland and nodes; hypoglossal nerve; nerve to mylohyoid; facial artery and vein |
| Carotid (paired) | Superior belly of omohyoid (anteroinferior), stylohyoid and posterior belly of digastric (superior), anterior border of SCM (posterior) | Common carotid and its bifurcation; internal jugular vein; vagus, hypoglossal and accessory nerves; ansa cervicalis roots; branches of the external carotid artery (superior thyroid, ascending pharyngeal, lingual, facial, occipital) |
| Muscular (paired) | Hyoid (superior), superior belly of omohyoid, anterior border of SCM, midline | Infrahyoid (strap) muscles: sternohyoid, omohyoid, sternothyroid, thyrohyoid; thyroid and parathyroid glands; pharynx |

Mark it
ls -la /tmp/workspace/attachments/0ee15e0e-d4d3-446c-96d7-3f35027123ed/ && python3 -c "from PIL import Image; im=Image.open('/tmp/workspace/attachments/0ee15e0e-d4d3-446c-96d7-3f35027123ed/photo-1793776737074.jpg'); print(im.size)"
mkdir -p /tmp/workspace/neck-triangles && cat > /tmp/workspace/neck-triangles/mark.py <<'EOF' from PIL import Image, ImageDraw, ImageFont src='/tmp/workspace/attachments/0ee15e0e-d4d3-446c-96d7-3f35027123ed/photo-1793776737074.jpg' im=Image.open(src).convert('RGBA') ov=Image.new('RGBA',im.size,(0,0,0,0)); d=ImageDraw.Draw(ov) f=ImageFont.truetype('/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf',30) fs=ImageFont.truetype('/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf',22) polys={ 'Occipital (posterior)':([(335,520),(440,680),(510,830),(560,960),(500,985),(400,1040),(415,900),(410,780),(370,650)],(0,120,255),(430,780)), 'Omoclavicular':([(400,1040),(500,985),(560,960),(600,1120),(395,1120)],(160,0,220),(470,1085)), 'Submandibular':([(585,480),(880,520),(790,600),(650,570)],(0,200,0),(700,530)), 'Carotid':([(620,560),(745,610),(700,790),(640,700)],(255,230,0),(675,670)), 'Muscular':([(750,620),(850,650),(845,940),(800,1040),(745,880),(715,800)],(0,230,230),(790,830)), } for n,(p,c,_) in polys.items(): d.polygon(p,fill=c+(70,)); d.line(p+[p[0]],fill=c+(255,),width=5) im=Image.alpha_composite(im,ov); d=ImageDraw.Draw(im) def lab(t,xy,fill,font=fs): x,y=xy for dx in(-2,2): for dy in(-2,2): d.text((x+dx,y+dy),t,font=font,fill='black') d.text(xy,t,font=font,fill=fill) lab('POSTERIOR TRIANGLE',(40,500),(120,190,255),f) lab('Occipital',(380,760),(120,190,255)) lab('Omoclavicular',(420,1060),(220,150,255)) lab('ANTERIOR TRIANGLE',(640,330),(255,255,255),f) lab('Submandibular',(640,495),(120,255,120)) lab('Carotid',(655,650),(255,240,60)) lab('Muscular',(745,980),(100,255,255)) lab('Submental (at midline,',(860,420),(255,170,170)); lab('cut off by model edge)',(860,446),(255,170,170)) lab('SCM (11)',(560,800),'white') d.line([(600,830),(580,830)],fill='white',width=1) im.convert('RGB').save('/tmp/workspace/neck-triangles/marked_neck_triangles.jpg',quality=92) EOF python3 /tmp/workspace/neck-triangles/mark.py
python3 -c " import matplotlib, os print(os.path.join(os.path.dirname(matplotlib.__file__),'mpl-data/fonts/ttf'))"; ls $(python3 -c "import matplotlib,os;print(os.path.join(os.path.dirname(matplotlib.__file__),'mpl-data/fonts/ttf'))") | grep -i bold | head
cd /tmp/workspace/neck-triangles && sed -i "s#/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf#/opt/amazon/genesis1p-tools/venv/lib64/python3.12/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSans-Bold.ttf#g" mark.py && python3 mark.py && ls -la
cd /tmp/workspace/neck-triangles && python3 -c " from PIL import Image im=Image.open('marked_neck_triangles.jpg'); im.thumbnail((900,1200)); im.save('preview.jpg',quality=80)" && ls -la
marked neck triangles
Image · JPG

Label this diagram
cd /tmp/workspace/neck-triangles && python3 -c " from PIL import Image im=Image.open('/tmp/workspace/attachments/0ee15e0e-d4d3-446c-96d7-3f35027123ed/photo-1793776737074.jpg') im.crop((380,380,980,700)).resize((1200,640)).save('c1.jpg') im.crop((350,560,900,1180)).save('c2.jpg') "
cd /tmp/workspace/neck-triangles && python3 -c " from PIL import Image im=Image.open('/tmp/workspace/attachments/0ee15e0e-d4d3-446c-96d7-3f35027123ed/photo-1793776737074.jpg') im.crop((380,380,980,700)).resize((1200,640)).save('c1.jpg') im.crop((350,560,900,1180)).save('c2.jpg') "; ls -la
cd /tmp/workspace/neck-triangles && cat > label.py <<'EOF' from PIL import Image, ImageDraw, ImageFont src='/tmp/workspace/attachments/0ee15e0e-d4d3-446c-96d7-3f35027123ed/photo-1793776737074.jpg' FP='/opt/amazon/genesis1p-tools/venv/lib64/python3.12/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSans-Bold.ttf' ph=Image.open(src).convert('RGB') W,H=1750,1950 cv=Image.new('RGB',(W,H),(245,245,245)); cv.paste(ph,(0,0)) d=ImageDraw.Draw(cv) F=ImageFont.truetype(FP,27) def txt(xy,t,fill=(0,0,0)): d.text(xy,t,font=F,fill=fill) def ring(p,c): x,y=p; d.ellipse((x-17,y-17,x+17,y+17),outline=c,width=5) def call(tag,pts,label,c,lxy): ring(tag,c) d.line([tag]+pts,fill=c,width=4) txt(lxy,label,c) # right margin R=1120 items=[ ((843,466),[(1000,400),(R-10,400)],'3 Digastric, anterior belly',(0,110,200),(R,384)), ((885,503),[(1000,470),(R-10,470)],'5 Geniohyoid',(150,0,170),(R,454)), ((712,613),[(1000,560),(R-10,560)],'6 Thyrohyoid',(0,130,60),(R,544)), ((733,740),[(1000,670),(R-10,670)],'9 Omohyoid, superior belly',(200,90,0),(R,654)), ((792,755),[(1000,760),(R-10,760)],'8 Sternohyoid',(190,0,0),(R,744)), ((735,843),[(1000,860),(R-10,860)],'7 Sternothyroid',(0,120,120),(R,844)), ] for t,p,l,c,x in items: call(t,p,l,c,x) # top labels on board d.rectangle((0,0,W,200),fill=(245,245,245)) call((772,460),[(772,262)],'4 Mylohyoid',(0,100,0),(790,236)) call((565,468),[(500,262)],'1 Stylohyoid',(160,60,0),(380,215)) call((512,491),[(200,262)],'2 Digastric, posterior belly',(0,60,160),(20,215)) # SCM direct ring((570,885),(0,0,0)); d.rectangle((590,868,590+330,908),fill=(255,255,255)); txt((596,872),'11 Sternocleidomastoid',(0,0,0)) # bottom rows=[((560,1068),'14 Anterior scalene',(190,0,100),1640), ((493,1070),'13 Middle scalene',(0,110,0),1710), ((480,1010),'10 Omohyoid, inferior belly',(200,90,0),1780), ((418,1100),'12 Posterior scalene',(0,70,170),1850)] for tag,l,c,y in rows: ring(tag,c); d.line([tag,(tag[0],y)],fill=c,width=4); txt((tag[0]+10,y-10),l,c) d.text((20,1600),'Right lateral view of the neck (model "2")',font=ImageFont.truetype(FP,24),fill=(60,60,60)) cv.save('labelled_neck_model.jpg',quality=92) p=cv.copy(); p.thumbnail((1000,1200)); p.save('labelled_preview.jpg',quality=80) EOF python3 label.py
cd /tmp/workspace/neck-triangles && python3 - <<'EOF' s=open('label.py').read() s=s.replace("call((512,491),[(200,262)],'2 Digastric, posterior belly',(0,60,160),(20,215))","call((512,491),[(200,262),(200,170)],'2 Digastric, posterior belly',(0,60,160),(210,150))") s=s.replace("d.text((20,1600),","d.text((20,30),") open('label.py','w').write(s) EOF python3 label.py
labelled neck model
Image · JPG

| No. | Structure | Group |
|---|---|---|
| 1 | Stylohyoid | Suprahyoid |
| 2 | Digastric, posterior belly | Suprahyoid |
| 3 | Digastric, anterior belly | Suprahyoid |
| 4 | Mylohyoid | Suprahyoid |
| 5 | Geniohyoid | Suprahyoid |
| 6 | Thyrohyoid | Infrahyoid |
| 7 | Sternothyroid | Infrahyoid |
| 8 | Sternohyoid | Infrahyoid |
| 9 | Omohyoid, superior belly | Infrahyoid |
| 10 | Omohyoid, inferior belly | Crosses the posterior triangle |
| 11 | Sternocleidomastoid | Divides the neck into anterior and posterior triangles |
| 12 | Posterior scalene | Floor of the posterior triangle |
| 13 | Middle scalene | Floor of the posterior triangle |
| 14 | Anterior scalene | Floor of the posterior triangle |