Orodha ya maudhui:
Video: Skana ya Msingi ya 3D kwa Ramani ya Dijitali ya 3D: Hatua 5
2024 Mwandishi: John Day | [email protected]. Mwisho uliobadilishwa: 2024-01-30 12:50
Katika mradi huu, nitaelezea na kuelezea misingi ya skanning ya 3D na ujenzi uliotumika hasa kwa skanning ya vitu vidogo vya ndege, na ambao operesheni yake inaweza kupanuliwa kwa mifumo ya skanning na ujenzi ambayo inaweza kuwekwa kwenye ndege za kudhibiti kijijini kupata mfano wa 3D. ya mahali ambapo ndege ambayo huwachukua inzi zilizowekwa
Wazo la mwisho ni kupata skana ya 3D ya mahali au eneo, iwe nje au ndani, kuitumia kama ramani ya dijiti (kama kwenye sinema ya Prometeus)
Hatua ya 1:
wazo ni kusanikisha mfumo mzima wa skanning ya 3d kwenye ndege inayodhibitiwa na kijijini, ili kuwekea ramani halisi ya eneo lolote ambalo huruka kwa 3d, lakini kwa hili tulianza tangu mwanzo wa operesheni ya njia ya pembe tatu ya laser ya skanning au ujenzi wa 3d na pembetatu ya laser kimsingi inajumuisha kupitisha boriti ya laser kupitia prism ambayo hutengeneza mstari wa laser kupata laini nzima ya laser ambayo itakadiriwa kwenye kitu kinachopaswa kuchunguzwa, na mara tu makadirio haya ya laser yamepatikana kwenye uso wa uso Kutoka mahali pa kuchanganua, picha lazima ichukuliwe na aina fulani ya kamera na ikiwezekana kujua pembe ambayo imeundwa kwa kuzingatia pembe ya makadirio ya laini ya laser iliyotolewa, kwani kila moja ya picha hizi inakamata vipande vya laser vilivyotarajiwa. Juu ya uso wa kitu, zitashughulikiwa ili kutoa sifa za kipengee cha kitu kitakachotafutwa, na tu tambue ukanda kwa mstari juu ya kitu kupata maelezo ya uso wake katika sehemu hiyo ya kitu, na baadaye kukamata ukanda uliopangwa wa sehemu ifuatayo ya kitu, kuongeza kupigwa kwa makadirio pamoja Kabla ya sehemu zote za obto tunapata skana ya pande tatu ya uso wake.
Hatua ya 2:
Kwa kuwa tumetambua dhumuni letu, hatua inayofuata tukijua kuwa kuchukua mguu lazima kwanza uwe na miguu yako chini, kwa hivyo tukaanza chini na mfano wa majaribio ya skana ya laini ya 3d, ili kudhibitisha operesheni sahihi ya msingi Scanner 3d na unavyoona kwenye picha hapo juu, nilitumia PC, OpenCV, Glut ya OpenGL, kamera ya wavuti, laser, jenereta ya shamba la laser (katika kesi hii kupitia kioo cha kuzunguka) mfumo wa elektroniki wa kuhamisha (uliofanywa na reli na mfumo uliotolewa kutoka kwa printa ya zamani) kutoka kwa msingi ambao ninaweka vitu vitakavyotafutwa, kuni na plastiki na kama unaweza kuona kwenye picha, kwenye kompyuta: Niliweza kutengeneza na kuonyesha na Glut kutoka OpenGL tatu- mfano wa kuzalishwa uliozalishwa kwa msingi wa kitu halisi kilichokaguliwa (katika kesi hii buibui ya kuchezea)
kwa hivyo ni dhahiri zaidi kwamba kanuni ya utendaji inafanya kazi, na kwamba pamoja na marekebisho na marekebisho yake kwa mfumo wa kuruka itaweza kuchanganua na kuzaa ramani ya 3d ya eneo ambalo inaruka.
Lakini mfumo huu utatumika tu kupata ramani za 3D za uso wa nje wa maeneo ambayo inaruka juu… ???
Hatua ya 3:
ramani ya mambo ya ndani ya mapango na mifereji ya maji (kama vile kwenye sinema ya Prometeus) Mfumo huu wa utaftaji wa 3D pia hutumikia kujenga vielelezo vitatu vya mambo ya ndani ya vitu vikubwa na visivyo na maana kama mapango, majengo, mahandaki, n.k kanuni yake ya utendaji ni sawa sawa na ilivyoelezwa tayari na ambayo kimsingi ina yafuatayo:
- kunasa picha ya kila makadirio ya mstari wa laser juu ya uso ili kuchunguzwa
- chujio na uondoe rangi kutoka kwenye picha
- paka rangi na kizingiti cha picha chenye nguvu
- weka kigunduzi cha pembeni kutambua maelezo mafupi yaliyokamatwa ya kila sehemu ya msalaba ya makadirio ya laser
- na kutumia segmentation chagua mpaka unaofaa kwa uwakilishi wa 3d wa sehemu hiyo ya msalaba ya kitu kitakachochanganuliwa na kujengwa upya kwenye ramani ya 3D
- basi hatua hizi zinarudiwa tu kwa kila picha iliyochukuliwa kwa njia ndogo ya kupigwa kwa laser inayoendelea kutabiriwa na kila sehemu ndogo katika sehemu ndogo.
safu na safu ya uwakilishi wa sehemu za msalaba zinaongezwa mfululizo hadi kupata wingu la uhakika linaloundwa na viwakilishi vingi vya sehemu za msalaba za kitu kinachopangwa ramani
Hatua ya 4:
Kisha mimi hupitisha programu za usindikaji wa picha ya makadirio ya vipande vya juu vya laser. na ujenzi mpya wa 3d wa uwakilishi huu wa pande zote katika muundo wa ramani wa pande tatu:
usindikaji wa picha:
n
# pamoja na # pamoja na "cv.h" # pamoja na "highgui.h" # pamoja na // # ni pamoja na #jumuisha # pamoja na # pamoja
char f = 0; jina la char = {"0.jpg"}; int n = 0, s, x, y; CvScalar sp; FILE * NuPu;
Utupu wa maandishi () {char bufferx [33], bafa [33]; itoa (x, bufferx, 10); itoa (y, mkate, 10); fprintf (NuPu, bufferx); fprintf (NuPu, "\ t"); fprintf (NuPu, buffery); fprintf (NuPu, "\ n"); }
batili noteblockInit () {NuPu = fopen ("NuPu.txt", "w"); fseek (NuPu, 0, 0); fprintf (NuPu, "NP:"); fprintf (NuPu, "\ n"); }
int kuu () {char argstr [128]; noteblockInit (); cout << "Teklea!…:" f; jina [0] = f; cout <
IplImage * img0 = cvLoadImage ("00.jpg", 0); ikiwa (f == '0') {for (y = 1; yheight-2; y ++) {for (x = 1; xwidth-2; x ++) {sp = cvGet2D (img0, y, x); ikiwa (sp.val [0]> 50) {Writepoints (); n ++;}}}}} mwingine {for (y = 1; yheight-2; y ++) {for (x = 1; xwidth-2; x ++) { sp = cvGet2D (img1, y, x); ikiwa (sp.val [0]> 50) {Writepoints (); n ++;}}}} char bafa [33]; itoa (n, bafa, 10); fprintf (NuPu, "Fin:"); fprintf (NuPu, bafa); fprintf (NuPu, "\ n"); fclose (NuPu);
cvWaitKey (0); //_execlp ("calc.exe", "calc.exe", argstr, NULL); cvDestroyAllWindows (); cvReleaseImage (& picha); cvReleaseImage (& img); cvReleaseImage (& img0); cvReleaseImage (& img1); cvReleaseImage (& img2); kurudi 0; }
Ujenzi wa 3D:
# pamoja # ///////////////// #ifdef _APPLE_ #jumlisha #jingine #jumlisha #jumlisha #isha ikiwa ni pamoja na #jumuisha #pamoja na #jumlisha #jumuisha #jumuisha
#fafanua violeta glColor3f (1, 0, 1) #fafanua azul glColor3f (0, 0, 1) #fafanua turkeza glColor3f (0, 1, 1) #fafanua verde glColor3f (0, 1, 0) #fafanua amarillo glColor3f (1, 1, 0) #fafanua naranja glColor3f (1,.3, 0) #fafanua rojo glColor3f (1, 0, 0) kutumia namespace std; int s, Boton = 1, Pulbut = 1; kuelea mx = 0, yangu = 0, mtx = 0, mty = 0, mtz = -5.0; Const int Avance = 1; mstari wa kamba, Aux; char Tabia = 'H'; FILE * NuPu; int NP, h, w; kuelea G = 0, n = 0, cx [5000], cy [5000], x, y, shoka, ay, az; fonti ya ndani = (int) GLUT_BITMAP_8_BY_13; lebo ya static char [100]; bafa ya char [3]; GLfloat anguloCuboX = 0.0f; GLfloat anguloCuboY = 0.0f; GLfloat anguloEsfera = 0.0f; GLint ancho = 500; GLint alto = 500; int hazPerspectiva = 0; urekebishaji batili (upana wa int, urefu wa int) {glViewport (0, 0, upana, urefu); glMatrixMode (GL_PROJECTION); GlLoadIdentity (); ikiwa (hazPerspectiva) gluPerspective (23.0f, (GLfloat) upana / (GLfloat) urefu, 1.0f, 20.0f); mwingine glOrtho (-1, 1, -1, 1, -10, 10); glMatrixMode (GL_MODELVIEW); ancho = upana; alto = urefu; } utupu Kolorear (int K) {kuelea Hip; x = (cx [s] -320) / 480; y = (cy [s] -240) / 640; Kiboko = sqrt (poda (x, 2) + poda (y, 2)); ikiwa ((Hip> = 0) && (Hip =.07) && (Hip =.14) && (Hip =.21) && (Hip =.28) && (Hip =.35) && (Hip =.42) && (Hip <=. 49)) {violeta;}} batili drawNuPu (batili) {glColor3f (1, 1, 1); glBegin (GL_LINES); glVertex3f (.2, 0, 0); glVertex3f (-. 2, 0, 0); glVertex3f (0,.2, 0); glVertex3f (0, -.2, 0); glEnd (); rojo; glBegin (GL_POINTS); kwa (n = 0; n <10; n ++) {for (s = 0; s void setOrthographicProjection () {glMatrixMode (GL_PROJECTION); glPushMatrix (); glLoadIdentity (); gluOrtho2D (0, w, 0, h); glScalef (1, -1, 1); glTranslatef (0, -h, 0);, y); kwa (c = kamba; * c! = '\ 0'; c ++) {glutBitmapCharacter (font, * c);}} onyesho batili () {// mx = 468; glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // glLoadIdentity (); glColor3f (1.0, 1.0, 1.0); glRasterPos2f (-1,.9);; <3; 1.0f, 0.0f); choraNuPu (); /*glColor3f (1.0, 1.0, 1.0); glRasterPos2f (.5,.5); *; / / * glColor3f (1. 0f, 1.0f, 1.0f); kuwekaOrthographicProjection (); glPushMatrix (); GlLoadIdentity (); renderBitmapString (30, 15, (void *) font, "GLUT Tutorial ---_ ------ _ @ 3D Tech"); * / glFlush (); glutSwapBuffers (); anguloCuboX + = 0.1f; anguloCuboY + = 0.1f; anguloEsfera + = 0.2f; } batili init () {glClearColor (0, 0, 0, 0); kuwezeshwa (GL_DEPTH_TEST); ancho = 500; jumla = 500; } leer leer () {ifstream myfile ("A: / Respaldo sept 2016 / D / Respaldos / Respaldo compu CICATA abril 2015 / usb1 / rekostruccion 3D en Especialidad CICATA / Software / Reconstruccion 3D / R3d_0 / bin / Debug / NuPu.txt"); ikiwa (myfile.is_open ()) {s = 0; wakati (getline (myfile, line)) {if ((line [0]! = 'N') && (line [0]! = 'F')) {Aux = line; mstari [0] = 48; mstari [1] = 48; mstari [2] = 48; mstari [3] = 48; cy [s] = atoi (mstari.c_str ()); Aux [4] = 48; Aux [5] = 48; Aux [6] = 48; // Aux [7] = 48; cx [s] = atoi (Aux.c_str ()); s ++; }} faili yangu. karibu (); } mwingine cout <1780) NP = 1700; cout <utupu wavivu () {onyesha (); } kibodi tupu (kitufe cha saini ambacho hakijasainiwa, int x, int y) {kubadili (ufunguo) {kesi 'p': kesi 'P': hazPerspectiva = 1; kuunda upya (ancho, alto); kuvunja; kesi 'o': kesi 'O': hazPerspectiva = 0; kuunda upya (ancho, alto); kuvunja; kesi 27: // kutoroka kutoka (0); kuvunja; }} raton batili (kitufe cha int, hali ya int, int x, int y) {/ * GLUT_LEFT_BUTTON 0 GLUT_MIDDLE_BUTTON 1 GLUT_RIGHT_BUTTON 2 GLUT_DOWN 0 GLUT_UP 1 * / Boton = kifungo; Pulbut = hali; // mx = y; onyesha (); } batili ratmov (int x, int y) {if ((Boton == 0) & (Pulbut == 0)) {mx = y; yangu = x; } ikiwa ((Boton == 2) & (Pulbut == 0)) {mtx = (y / 200) -1; mty = (x / 200) -1; } ikiwa ((Boton == 1) & (Pulbut == 0)) {mtz = - (y / 40) -5; } onyesha (); } int kuu (int argc, char ** argv) {/ * glutAddMenuEntry () glutAddSubMenu () glutAttachMenu () glutCreateMenu () glutSetMenu () glutStrokeCharacter () glutStrokeLength () * / / * glReadPixels () soma kizuizi cha saizi kutoka kwa saizi kutoka kwa saizi kutoka kwa saizi kutoka kwa saizi fremu bafa ya glGetPixelMapfv () rudisha ramani maalum ya pikseli glGetPixelMapuiv () rudisha ramani maalum ya pikseli glGetPointerv () Inarudisha anwani ya kiashiria kilichoainishwa. * / Init (); leer (); glutInit (& argc, argv); glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB); Nafasi ya GlitInitWindow (50, 50); glutInitWindowSize (ancho, alto); GlindCreateWindow ("Cubo 1"); ndani yake(); glutDisplayFunc (onyesha); glutReshapeFunc (reshape); glutIdleFunc (wavivu); glutMouseFunc (panya); glutMotionFunc (ratmov); glutKeyboardFunc (kibodi); glutMainLoop (); kurudi 0; }
Hatua ya 5:
kwa sasa lazima nisitishe! … Lakini katika sura inayofuata nakuahidi kwamba nitaitekeleza kwenye rasipiberi yangu pi 3 au jetson nanoboard yangu, ambayo tayari imewekwa kwenye ndege zinazodhibitiwa na kijijini, au kwenye roboti ya buibui ili kuchunguza mambo ya ndani ya mapango
Ilipendekeza:
Chafu ya Moja kwa Moja ya Ndani Kwa msingi wa Ikea Socker: Hatua 5
Chafu ya ndani ya ndani kulingana na Ikea Socker: Halo, hii ndio mafunzo yangu ya kwanza. Nilijifunza mengi na ushirika huu, na nadhani ni wakati wa kurudisha maoni yangu ya unyenyekevu. Samahani juu ya Kiingereza changu, ni duni, lakini nitafanya kila niwezalo. Wazo lilikuwa kutengeneza chafu ya dawati ambayo iniruhusu kupanda mbegu na
Tengeneza Kitabu cha Ramani Kutumia Ramani za Google: Hatua 17 (na Picha)
Tengeneza Kitabu cha Ramani Kutumia Ramani za Google: Siku nyingine nilikuwa nikitafuta duka la vitabu kwa Mwongozo wa Mtaa wa Kaunti ya DuPage, IL kwani rafiki yangu wa kike anaishi hapo na anahitaji ramani ya barabara ya kina. Kwa bahati mbaya, moja tu ambayo walikuwa nayo ambayo ilikuwa karibu ilikuwa moja ya Kaunti ya Cook (kama hii o
Ongeza Ramani za Google kwa urahisi kwenye Majedwali Yako ya Google Moja kwa Moja na Bure: Hatua 6
Ongeza Ramani za Google kwa urahisi kwenye Majedwali Yako ya Google Moja kwa Moja na Bure: Kama watengenezaji wengi, niliunda miradi michache ya tracker ya GPS. Leo, tutaweza kuibua haraka alama za GPS moja kwa moja kwenye Majedwali ya Google bila kutumia wavuti yoyote ya nje au API. Juu ya yote, ni BURE
Mtoaji wa Moja kwa Moja wa Pet Kutumia Saa ya Zamani ya Dijitali: Hatua 10 (na Picha)
Mtoaji wa Moja kwa Moja wa Pet Kutumia Saa ya Zamani ya Dijiti: Halo hapa, katika hii inayoweza kufundishwa nitakuonyesha jinsi nilivyotengeneza Kinywaji cha Pet Moja kwa Moja kwa kutumia Saa ya zamani ya dijiti. Pia nimeingiza video juu ya jinsi nilivyotengeneza feeder hii. Hii inayoweza kufundishwa itaingizwa kwenye mashindano ya PCB na kama neema ningependa
Jinsi ya Kuunganisha DeLorme Earthmate GPS LT-20 kwa Google Earth yako kwa Ramani nzuri ya Ufuatiliaji wa GPS
Jinsi ya Kuunganisha DeLorme Earthmate GPS LT-20 kwa Google Earth yako kwa Ramani nzuri ya Ufuatiliaji wa GPS. Nitaonyesha jinsi ya kuunganisha kifaa cha GPS kwenye mpango maarufu wa Google Earth, bila kutumia Google Earth Plus. Sina bajeti kubwa kwa hivyo ninaweza kuhakikisha kuwa hii itakuwa rahisi iwezekanavyo