PER MØLDRUP-DALUM

Home • Articles • Reading • CV • About

Surfer dude

perdalum, 14. juni 2019
Billede fra Toke Eskildsen (ekot.dk)
dude=
;
In[]:=
Udtræk surfer dude med ML?
ImageContents@dude
Image
Concept
BoundingBox
Probability
person
Rectangle[{779.198,346.119},{814.62,442.55}]
0.574959
Out[]=
Nah, kun en dude. En anden funktion?
ImageCases@dude
In[]:=

person


Out[]=
Ikke bedre.
Hvad så med at finde nøgle punkter?
ImageKeypoints@dude
In[]:=
116.084,516.327,1174.04,537.411,1205.58,628.165,1132.01,536.276,
⋯6293⋯
,28.6948,619.901,34.5357,633.852,26.3427,631.463
large output
show less
show more
show all
set size limit...
Out[]=
HighlightImage[dude,%]
In[]:=
Out[]=
Okay, det kræver vildsomme tweaks, og jeg har en deadline.
Så er prøver jeg at detektere linier i billedet.
HighlightImage[dude,ImageLines@dude]
In[]:=
Out[]=
Masser af fine linier, men ikke den vigtigste: snoren!
Så kan jeg heldigvis ty til manuelt af klikke på de punkter, som jeg er interesseret i. Dette gøres ved at klikke på billedet, vælger Point tool og klikke på ansigtet af de syv surfer-dudes
dude
In[]:=
Koordinaterne til disse valgte punkter er:
head={{1344.90220323741`,352.13676558753014`},{1134.479916067146`,424.19162170263814`},{934.1558003597121`,444.3411270983215`},{778.4584832134292`,428.510041966427`},{622.4333033573141`,366.8156474820146`},{432.4883842925659`,266.89246103117534`},{232.77315647482015`,243.06152577937678`}};
In[]:=
Og de er placeret her:
HighlightImage[dude,head]
In[]:=
Out[]=
Hvis vi bare vil se dem uden det forstyrrende billeder, ser det således ud:
Graphics[Point@head]
In[]:=
Out[]=
Nu er det nemt at udtrække Δx:
deltaX=Differences[head[[All,1]]]
In[]:=
{-210.422,-200.324,-155.697,-156.025,-189.945,-199.715}
Out[]=
For at gøre det nemmere at vurdere resultatet, tilføjer jeg enheder:
deltaXUnit=Quantity[deltaX,"Pixels"]
In[]:=

-210.422
pixels
,
-200.324
pixels
,
-155.697
pixels
,
-156.025
pixels
,
-189.945
pixels
,
-199.715
pixels

Out[]=
Okay, så skal vi have fundet omregningsfaktoren mellem billedets pixels og den virkelige verden. Umiddelbart vil jeg mene at det der er nemmest at vurdere er afstanden mellem surfer-dudes fødder.
Jeg finder koordinaterne til to fødder som med ansigterne:
HighlightImage[dude,{{471.7663369304556`,190.38803956834556`},{433.0972721822542`,176.87072841726638`}}]
In[]:=
Out[]=
surfFooting={{471.7663369304556`,190.38803956834556`},{433.0972721822542`,176.87072841726638`}}[[All,1]]
In[]:=
{471.766,433.097}
Out[]=
footDistancePixels=Quantity[Abs@Differences@surfFooting//First,"Pixels"]
In[]:=
38.6691
pixels
Out[]=
Okay, hvor stor en afstand har han så i meter? Jeg stillede mig op i surfer-dude position og målte afstanden med min laser måler :-)
footDistanceEstimated=Quantity[0.6,"Meters"]
In[]:=
0.6
m
Out[]=
Så nu er det nemt at beregne omregningsfaktoren
scale=footDistanceEstimated/footDistancePixels
In[]:=
0.0155163
m/
pixels
Out[]=
Den ganger vi på Δx
deltaXUnit*scale
In[]:=
{
-3.26497
m
,
-3.10828
m
,
-2.41584
m
,
-2.42093
m
,
-2.94724
m
,
-3.09884
m
}
Out[]=
Det første billede er taget xx:27 (minutter:sekunder) og det sidste xx:29. Der er seks ens intervaller, hvilket med en usikkerhed på 0.5s giver:
timeBetweenPicture=Around[
2
s
,
0.5
s
]/6
In[]:=
(0.33±0.08)
s
Out[]=
speed=Abs@(deltaXUnit*scale)/timeBetweenPicture
In[]:=

(9.8±2.4)
m/s
,
(9.3±2.3)
m/s
,
(7.2±1.8)
m/s
,
(7.3±1.8)
m/s
,
(8.8±2.2)
m/s
,
(9.3±2.3)
m/s

Out[]=
UnitConvertspeed,

In[]:=

(35.±9.)
km/h
,
(34.±8.)
km/h
,
(26.±7.)
km/h
,
(26.±7.)
km/h
,
(32.±8.)
km/h
,
(33.±8.)
km/h

Out[]=
Mean[%]
In[]:=
(31.1±3.2)
km/h
Out[]=