Arxiu mensual: gener de 2020

OpenCV: detectar cercles

Un cop ja sabem detectar les rectes, ara fem la part de detectar els cercles. El OpenCV ens dóna el cercle de millor ajustament, amb el seu centre i radi. Per tant només ens cal aplicar l’algorisme de calcular l’error d’ajustament, com s’explica en l’anterior post.

Com a fitxer d’entrada tenim un CSV amb el nom dels participants, el nom del fitxer de les rectes, i el nom del fitxer dels cercles. Com a sortida tenim el fitxer resultats.txt amb les puntuacions obtingudes per cadascun dels participants.

Així doncs, ara només cal portar-ho a la pràctica. Espero que sigui aviat.

Mesurar la rodonesa d’un cercle

Després de resoldre el problema de mesurar la linialitat d’una recta, ara toca mesurar la rodonesa d’un cercle. En la imatge hi ha una captura de la solució que hem implementat.

Hi ha bastanta literatura sobre el tema, però he preferit cercar la solució pel meu compte. Donat un cercle, openCV ens dóna ja el cercle de millor ajustament, amb el centre i el radi. La primera idea és recórrer tots els punts del cercle i fer el sumatori de totes les diferències entre el punt i el radi. El valor dóna una bona idea de com de bo és el cercle, en termes absoluts. Però si ara escalem x2 o per x0.5 el nostre cercle, els resultats seran diferents. Per tant, no he de cercar un error absolut, sinó un error relatiu.

La segona idea és mesurar àrees. Concretament, el quocient entre la diferència d’àrees entre el cercle dibuixat i el cercle aproximat, dividit per l’àrea del cercle. Com es veu en el paper, ara sí que obtenim un valor relatiu de la rodonesa del cercle. Una cosa que hem de tenir en compte és que quan sumem àrees, hem d’agafar el valor absolut de la diferència, per tal de què no hi hagi cancel·lacions.

Com més s’aproxima a 0 el valor, més bo és el cercle. Si el valor el resto de 1, aleshores el cercle perfecte val R=1, i R=0.98 no seria tan bo. Ara falta implementar-ho en el meu programa.

Tornem amb el OpenCV: detectar rectes

Després d’un temps sense fer res amb OpenCV, reprenc el projecte antic de l’aplicació de les rectes i cercles. M’explico, es tracta de fer un concurs per a nens per avaluar si són capaços de fer rectes i cercles perfectes. El problema és que ara la Maria i el Pere ja tenen 14 i 10 anys, potser ja són una mica ganàpies per això. Però cap problema, ho farem igualment amb d’altres nens més petits que tenim pel voltant.

Continuaré programant amb C++, per allò de programar més ràpid, però sóc conscient de què la mateixa aplicació la podríem fer amb Python, llenguatge amb què he programat bastant últimament.

Mostrem una captura on es veu clarament com detectem les rectes, dibuixem la recta de millor ajustament, i mostrem el valor de la correlació que ens dóna el valor de com és de bona la recta dibuixada. El següent pas serà fer el mateix amb cercles.

Block (or book) stacking problem

Aquest matí he fet el problema d’apilar llibres (o blocs). Es tracta d’estudiar sota quines condicions puc apilar blocs (de longitud L) de manera que els vagi desplaçant un respecte l’anterior, de manera que no caiguin. Quina és la condició límit per tal de què no caiguin? Amb blocs de longitud L puc aconseguir un desplaçament de longitud L?

Aquest problema recordo haver-m’hi barallat (i crec que en el seu dia no el vaig solucionar) l’estiu de 1989 a Bagà, doncs el problema estava enunciat en el Schaum de Mecànica Teòrica (Murray R, Spiegel). He cercat el llibre (l’he trobat en pdf a la xarxa, segur que el tinc en una estanteria), i a la foto es veu l’enunciat del llibre en la pàg 249. NOTA: Val a dir que la figura que ensenya el llibre està malament i que genera confusió: és al revés, el bloc de dalt és el que sobresurt la meitat, i els blocs de baix són els que estan més junts (la figura del llibre té un apilament clarament inestable, els blocs segur que cauen perquè el centre de gravetat està fora del bloc de més a sota).

En aquella època no existia Internet, o sigui que m’hi vaig barallar sense poder demanar ajuda. Ara l’he resolt (tot sol, va a dir, veure el pdf en els enllaços de sota), i després de resoldre’l he cercat informació complementària que he trobat d’allò més interessant (videos de Youtube inclosos), veure els enllaços.

La solució. Tot el sistema dels blocs 1…N-1 que estan sobre el bloc N no cauen si el seu centre de masses cau just en l’extrem del bloc N. Es pot resoldre de forma iterativa: el bloc 1 s’aguanta sobre el bloc 2 si el posem a la meitat, L/2. El sistema blocs 1+2 s’aguanta sobre el bloc 3 si el centre de masses dels blocs 1+2 està just en l’extrem del bloc 3. Anem posant blocs, i anem calculant els centres de masses, i anem veient quina és la condició d’equilibri. I al final (veure la solució) es troba que el centre de masses és una sèrie harmònica:

Xi+1cm = L/2 * (1 + 1/2 + 1/3 + … + 1/i)

I ara una mica de matemàtiques: la sèrie harmònica és divergent (encara que divergeix molt lentament). La qual cosa significa que es pot aconseguir un desplaçament teòric tan gran com es vulgui (veure el video de l’enllaç, on s’aconsegueix un desplaçament bastant gran).

Ara només em falta fer l’experiència amb la Maria i el Pere, a veure si ho podem fer aquest mes. Si ho aconseguim, penjarem també el video.

Enllaços:

Visualización de rutas GPX con Relive. Bagà-Gréixer-Empedrats

El Jordi m’ha comentat aquesta aplicació molt xul·la per visualitzar amb 3D les rutes de bici: relive. Vull mirar en aquest post si és fàcil incrustar el video que es genera de la ruta dins d’una pàgina web com ara és aquest bloc. Doncs sí, és fàcil. El contenidor senzillament és un iframe com quan incrusto un video de Youtube. I d’altra banda es necessita la URL del video. Aquesta url s’aconsegueix mirant el codi font de la pàgina de Relive, i cercar per contentURL. Per exemple:

itemProp=”contentURL” content=”https://www.relive.cc/view/vXOnEkVyQBv/mp4?x-ref=sc”

i obtinc la url:

https://www.relive.cc/view/vXOnEkVyQBv/mp4?x-ref=sc

El resultat és molt espectacular. En aquest cas es tracta d’una excursió que vaig fer el 2013, i la gràcia estava en baixar en bici pels Empedrats. Com que era Setmana Santa i baixava molta aigua de la fosa de neu, va ser una bona aventura. No cal dir que baixar en bici pels Empedrats era impracticable i vaig haver de fer molts equilibris per no mullar-me.