Hoe maak ik een grafiek van een foto?

Moderators: jkien, Xilvo

Gebruikersavatar
Berichten: 9.240

Hoe maak ik een grafiek van een foto?

Ik heb een afbeelding, ik weet ook de resolutie van de foto, dus hoe groot elke pixel is.

Op de afbeelding staat een object, om het makkelijk te maken: een balk.

De balk is echter niet perfect recht, er zit variatie in de dikte van de balk. En die variatie wil ik weten, sterker nog, ik wil er statistiek op uitvoeren.

Hoe kan ik het beste van een lijn die over mijn foto loopt een grafiek maken? Ofwel, ik wil de coordinaten van de rand van het object in een x,y grafiek plotten.

Iemand een ideetje?

Berichten: 119

Re: Hoe maak ik een grafiek van een foto?

Hoe wil je de grafiek hebben, met waardes?

Want je zou met microsoft visio de afbeelding kunnen plakken en de grafiek overtrekken
A person who never made a mistake never tried anything new

Make everything as simple as possible, but not simpler.

Albert Einstein

Gebruikersavatar
Moderator
Berichten: 4.096

Re: Hoe maak ik een grafiek van een foto?

Moeilijke vraag!

Heb je RGB waarden van elke pixel? Dan kan ik me het volgende voorstellen. Stel je balk is donker en je achtergrond is licht. Per pixel hou je in een matrix de lichtsterkte bij (dus iets van R+G+B). Stel, je balk loopt onder een hoek van 30 graden t.o.v. horizontaal. Dan maak je per verticale kolom in je matrix een nieuwe verticale kolom met daarin het verschil met de voorgaande. Daar waar je balk begint, is het contrast het hoogst. Nu zoek je op waar in je nieuwe kolom de hoogste waarde komt, dat is de y-coordinaat van waar je balk begint bij de bijbehorende x-coordinaat van de kolom. Bij de laagste waarde heb je de y-coordinaat van het einde van de balk.

Gebruikersavatar
Berichten: 9.240

Re: Hoe maak ik een grafiek van een foto?

Ja, iets in die richting, het is zwart-wit, dus dat maakt het al makkelijker. En verder zijn er wel een aantal technieken om de rand van de balk scherper te maken: http://en.wikipedia.org/wiki/Edge_detection.

Dus als de balk horizontaal is gefotografeerd, per kolom het rij-nummer van de twee randen nemen en die van elkaar aftrekken, daarna de resolutie coefficient toevoegen.

Zoiets had ik in gedachten, maar ik vroeg me af of dit de beste manier is..

Berichten: 389

Re: Hoe maak ik een grafiek van een foto?

Importeren in autocad en met een lijntje overtrekken? Vervolgens kunt ge dan de X-Y coordinaten van die polygoon exporteren en gaan verwerken.

Gebruikersavatar
Berichten: 7.224

Re: Hoe maak ik een grafiek van een foto?

DePurpereWolf schreef:Ja, iets in die richting, het is zwart-wit, dus dat maakt het al makkelijker. En verder zijn er wel een aantal technieken om de rand van de balk scherper te maken: http://en.wikipedia.org/wiki/Edge_detection.

Dus als de balk horizontaal is gefotografeerd, per kolom het rij-nummer van de twee randen nemen en die van elkaar aftrekken, daarna de resolutie coefficient toevoegen.

Zoiets had ik in gedachten, maar ik vroeg me af of dit de beste manier is..
Als je het wiskundig wil aanpakken, dan is edge-detection de manier. Er zijn verschillende algoritmes. Een van de betere technieken is de Canny Edge algoritme. Zie bijvoorbeeld hier: http://www.pages.drexel.edu/~weg22/can_tut.html en http://marathon.csee.usf.edu/edge/edge_detection.html
If I have seen further it is by standing on the shoulders of giants.-- Isaac Newton

Gebruikersavatar
Berichten: 9.240

Re: Hoe maak ik een grafiek van een foto?

De software die ik gebruik is Gwyddion, want een gratis te verkrijgen pakket is. Ik heb het beste resultaat niet met canny maar met Zero crossing edge detection.

Vandaar sla ik het op en importeer ik het in originlab. Originlab heeft de mogelijkheid om scripts uit te voeren en ik kan dan makkelijk de waardes opzoeken en in een grafiek planten.

Berichten: 473

Re: Hoe maak ik een grafiek van een foto?

Perssonlijk zou ik volgende stappen uitvoeren om tot de dikte van de balk te komen in iedere kolom:

1) Threshold level bepalen uit het histogram van de grijswaarden van het beeld

2) Alle pixels met een waarde boven die threshold zou ik een waarde 255 toewijzen

3) Alle pixels met een waarde onder die threshold zou ik een waarde 0 toewijzen

4) Per kolom de bovenste edge zoeken

5) Per kolom de onderste edge zoeken

6) Per kolom de waardes uit 4 en 5 van elkaar aftrekken

Zo heb je per kolom de dikte van je balk ;)

Dit is in LabVIEW met vision een koud kunstje :)

Alle hierboven beschreven algo's heb ik in de IMAQ lib van NI, ik moet ze enkel gebruiken :)

Is dit een éénmalig iets of moet je finaal tot een exe komen die live beelden verwerkt?

Als je mij een paar beelden kunt bezorgen (BMP formaat) wil ik dat wel even uitproberen zodanig dat je je eigen code kunt toetsen aan de algo's van NI.

Ik heb ooit iets dergelijks gemaakt om de hoogte van de tandjes tijdens de productie van lintzagen te meten.

Lintzaag kwam wel voorbij aan 30m/min ;)

Gebruikersavatar
Berichten: 9.240

Re: Hoe maak ik een grafiek van een foto?

Nou ken ik wel een beetje Labview, maar had ik er nooit aangedacht om dat er voor te gebruiken, ik ben eigenlijk best geinteresseerd in hoe je dat zou doen.

Ik geloof dat ik Vision heb geinstalleerd op deze pc.

Labview zal wel vele malen sneller zijn dan de methode die ik toepas.

Ik heb twee afbeeldingen bijgevoegd.

Resolutie is:

20x Horizontal 0.3247

20x Vertical 0.3226

Dus 0.3247 micron per pixel.
NAP163.zip
(518.93 KiB) 79 keer gedownload

Gebruikersavatar
Berichten: 5.679

Re: Hoe maak ik een grafiek van een foto?

Aangezien het een grayscale en geen strikt zwart/wit plaatje is, gooi je veel informatie weg door alleen maar botweg te kijken naar "naar groter of kleiner dan de grenswaarde". Je kunt in dit soort plaatjes de grens ook op sub-pixelniveau bepalen, door te kijken waar hij van zijde wisselt (d.w.z. de ene pixel is groter en de andere kleiner dan de grenswaarde) en mee te wegen hoe ver hun waarde ervandaan ligt om de precieze rand-coördinaat er tussenin te schatten.

Je krijgt dan bijvoorbeeld zoiets.

(zorg overigens dat je het plaatje op de juiste resolutie bekijkt, en niet laat verkleinen door je browser, anders zien de gladde randen van de grafiek er juist verrot uit)
In theory, there's no difference between theory and practice. In practice, there is.

Gebruikersavatar
Berichten: 9.240

Re: Hoe maak ik een grafiek van een foto?

Die afbeelding ziet er wel beter uit, maar door de grijswaarden is het moeilijk te bepalen waar de grens ligt, dat maakt dus de afstandsmeeting veel moeilijker. Hoe los je dat dan op?

Gebruikersavatar
Berichten: 5.679

Re: Hoe maak ik een grafiek van een foto?

Die grafiek met grijswaarden is een anti-aliased representatie van de waarde die je in eerste instantie bepaalt, dus die hoef je niet achteraf weer uit de grafiek te halen. De grafiek is alleen om te visualiseren dat er een nauwkeurige continue waarde uitkomt.
In theory, there's no difference between theory and practice. In practice, there is.

Gebruikersavatar
Berichten: 9.240

Re: Hoe maak ik een grafiek van een foto?

Ik zal het anders zeggen. De eerste methode, om een pixel een waarde van 0 of 255 te geven is makkelijker naderhand te bewerken. Je hebt immers dan een matrix met enkel twee cellen die 'true' zijn.

In plaats van een matrix waarbij je per kolom twee maxima moet vinden, en daaruit de afstand moet interpoleren.

Verder vraag ik me af of je wel natuurkundig gezien de juiste aannamens maakt voor deze geinterpoleerde lijn. De scherpte van de rand hangt namelijk ook af van hoe goed ik gefocused heb, en diffractie effecten.

Dit is natuurlijk altijd het probleem, dus vraag ik me af of met de meetafwijking van deze methode een meer accurate edge bepaling wel nodig is. Dus of de verbetering van de afstandbepaling kleiner is dan de meetfout van de gehele meetmethode.

Berichten: 473

Re: Hoe maak ik een grafiek van een foto?

Hierbij de dikte van jouw product in PIXELS met een threshold level van 40.

Vertrekkend van boven- en onderkant van het beeld wordt de eerste pixel met een grijswaarde lager dan 40 wordt aanzien als de edge.

Verwerkingstijd: een fractie van een seconde ;)
Bijlagen
SPE_1TopC20x.xls
(61 KiB) 89 keer gedownload

Gebruikersavatar
Berichten: 5.679

Re: Hoe maak ik een grafiek van een foto?

DePurpereWolf schreef:Ik zal het anders zeggen. De eerste methode, om een pixel een waarde van 0 of 255 te geven is makkelijker naderhand te bewerken. Je hebt immers dan een matrix met enkel twee cellen die 'true' zijn.

In plaats van een matrix waarbij je per kolom twee maxima moet vinden, en daaruit de afstand moet interpoleren.
Nogmaals, dat plaatje dat ik gepost had was alleen ter illustratie om de berekende grens grafisch weer te geven. Zo'n plaatje moet je verder niet bewerken of daaruit proberen de dikte weer terug te lezen ofzo.
Verder vraag ik me af of je wel natuurkundig gezien de juiste aannamens maakt voor deze geinterpoleerde lijn. De scherpte van de rand hangt namelijk ook af van hoe goed ik gefocused heb, en diffractie effecten.
Dat is een ander prettig aspect van deze benadering: daar hangt het juist nauwelijks vanaf. Focus en scherpte doet er niet zoveel toe, ook dan ligt de berekende grenswaarde nagenoeg op dezelfde hoogte. Tenzij het natuurlijk zó onscherp is dat kleine variaties er niet meer uit te halen zijn, maar dat is dan een mankement van de foto en niet van de techniek want die informatie zit dan simpelweg niet meer in het plaatje (en krijg je dus met geen enkele methode meer terug).

En diffractie effecten zorgen juist bij de 0/255 methode voor problemen, daar kun je soms ineens een piekje krijgen in je gegevens die in het plaatje eigenlijk helemaal niet aanwezig is (omdat door diffractie een waarde nét wel boven de grenswaarde zit en die ernaast net niet). Met interpolatie treden dat soort effecten niet op.
Dit is natuurlijk altijd het probleem, dus vraag ik me af of met de meetafwijking van deze methode een meer accurate edge bepaling wel nodig is. Dus of de verbetering van de afstandbepaling kleiner is dan de meetfout van de gehele meetmethode.
Hangt er vanaf hoe nauwkeurig je de gegevens uberhaupt nodig hebt, en wat voor analyse je er precies mee doet. Maar als je de 'lompe' methode gebruikt krijg je dit soort gegevens: (even ingezoomd op een paar denkbeeldige pixels)

Afbeelding in plaats van: Afbeelding

En afgaand op je plaatje denk ik dat het dusdanig scherp c.q. nauwkeurig is dat het meer significante informatie bevat dan je verkrijgt met afronden.

Zelfs al zou het geïnterpoleerde geval niet helemaal exact zijn, het ligt er in ieder geval veel dichter bij en geeft bovendien niet allerlei (op die schaal best grote) pieken die er in werkelijkheid helemaal niet zijn.
Hierbij de dikte van jouw product in PIXELS met een threshold level van 40.
Hier hetzelfde met mijn methode: (eveneens in pixels, maar dan dus met floating point waarden)
Bijlagen
dikte.xls
(57.5 KiB) 76 keer gedownload
In theory, there's no difference between theory and practice. In practice, there is.

Reageer