![3D дижитал зураглалын үндсэн 3D сканнер: 5 алхам 3D дижитал зураглалын үндсэн 3D сканнер: 5 алхам](https://i.howwhatproduce.com/images/006/image-16147-j.webp)
Агуулгын хүснэгт:
2025 Зохиолч: John Day | [email protected]. Хамгийн сүүлд өөрчлөгдсөн: 2025-01-23 15:00
![3D дижитал зураглалын үндсэн 3D сканнер 3D дижитал зураглалын үндсэн 3D сканнер](https://i.howwhatproduce.com/images/006/image-16147-1-j.webp)
Энэхүү төсөлд би 3D сканнердах, сэргээн босгох үндсэн суурийг тайлбарлаж, жижиг хавтгай объектуудыг сканнердахад ашигладаг бөгөөд үйл ажиллагааг нь алсын удирдлагатай нисэх онгоцонд суурилуулах боломжтой сканнердах, сэргээн босгох системд өргөтгөх боломжтой болно. 3D загвар. тэднийг авч явдаг онгоц нисдэг газруудын тухай
Эцсийн санаа бол гаднах эсвэл дотор талын аль нэг газар, талбайг 3D сканнердах замаар дижитал газрын зураг болгон ашиглах явдал юм (Prometeus киноны нэгэн адил).
1-р алхам:
![Зураг Зураг](https://i.howwhatproduce.com/images/006/image-16147-2-j.webp)
Энэхүү санаа нь 3d сканнердах системийг бүхэлд нь алсын удирдлагатай онгоцонд суурилуулж, 3d дээгүүр нисч буй аль ч хэсгийн виртуал газрын зургийг дижитал хэлбэрт оруулах явдал юм, гэхдээ үүний тулд бид лазер гурвалжинг ажиллуулж эхэлжээ. Лазер триангуляци ашиглан сканнердах эсвэл 3d сэргээн босголт нь үндсэндээ лазер туяаг призмээр дамжуулж, сканнердах объект дээр тусгах лазер туузыг бүхэлд нь авахын тулд лазер туяа дамжуулахаас бүрдэх бөгөөд энэхүү лазер проекцийг дэлгэц дээр авсны дараа бүрдэнэ. Гадаргуугийн гадаргууг сканнердах газраас эхлээд ямар нэг төрлийн камераар авсан байх ёстой бөгөөд ялгарч буй лазер туузны проекцийн өнцгийн өнцгийг мэдэж байх ёстой, учир нь эдгээр зураг тус бүр нь төлөвлөсөн лазер туузыг авдаг. Объектын гадаргуу дээр тэдгээрийг сканнердах объектын хэмжээст шинж чанарыг гаргаж авахын тулд урьдчилан боловсруулж, объектын хөндлөн сегмент дэх түүний гадаргуугийн профайлыг олж авахын тулд зурвасаар туузаар скан хийж, дараа нь авах болно. Объектын бүх хөндлөн огтлолын өмнө объектын дараах хөндлөн огтлолын төлөвлөсөн зурвас
Алхам 2:
![Зураг Зураг](https://i.howwhatproduce.com/images/006/image-16147-3-j.webp)
Бид зорилгоо тодорхойлсон тул хөөрөхийн тулд эхлээд хөлөө газар дээр нь чангалсан байх ёстойг мэдэх дараагийн алхам бол үндсэн үйлдлийн зөв эсэхийг баталгаажуулахын тулд шугаман 3d сканнерын туршилтын загварыг ашиглан газар дээр нь эхлэв. 3d сканнер </b> Дээрх зураг дээр харагдаж байгаа шиг би компьютер, OpenCV, Glut of OpenGL, вэбкамер, лазер, лазер фермийн генератор (энэ тохиолдолд эргэлтийн толин тусгалаар) электрон шугаман шилжилтийн системийг (төмөр замаар хийсэн) ашигласан. болон хуучин принтерээс гаргаж авсан систем) сканнердах объект, мод, хуванцар зэргийг компьютер дээр байрлуулсан суурин дээрээс: би OpenGL-аас Glut ашиглан гурван сканнердсан бодит объект дээр үндэслэн хуулбарласан хэмжээст загвар (энэ тохиолдолд тоглоом аалз)
Тиймээс үйл ажиллагааны зарчим нь ажиллагаатай бөгөөд нисдэг системд тохируулан тохируулснаар нисч буй газрынхаа 3d газрын зургийг сканнердах, хуулбарлах боломжтой болох нь тодорхой байна.
Гэхдээ энэ систем нь нисч буй газрынхаа гаднах гадаргуугийн 3D газрын зургийг авахад л туслах болно.…
Алхам 3:
![Зураг Зураг](https://i.howwhatproduce.com/images/006/image-16147-4-j.webp)
Агуй, сувгийн дотор талын зураглалыг (яг л Prometeus кинон дээр гардаг шиг) энэхүү 3D сканнердах систем нь агуй, барилга, хонгил гэх мэт том, хөндий объектуудын дотор талын гурван хэмжээст загварыг сэргээн засварлахад үйлчилдэг. Өмнө дурдсантай яг ижил бөгөөд үндсэндээ дараахь зүйлээс бүрдэнэ.
- сканнердах гадаргуу дээрх лазер зурвасын проекц бүрийн зургийг авах
- зурагнаас өнгийг шүүж, арилгана
- динамик зургийн босго бүхий өнгийг бинаризац хийх
- лазер проекцийн хөндлөн огтлол бүрийн авсан профайлыг танихын тулд ирмэг илрүүлэгчийг ашиглана уу
- мөн сегментчилэл ашиглан виртуал 3D газрын зураг дээр сканнердаж, сэргээн засварлах объектын хөндлөн огтлолын 3d дүрслэлд тохирох хил хязгаарыг сонгоно уу.
- Дараа нь эдгээр хэсгүүдийг дэд хэсэгт дэд хэсгээр тасралтгүй тусгасан лазер зурвасын дэд хэлбэрээр авсан зураг бүрийн хувьд эдгээр алхмуудыг давтана.
Зураг авах объектын хөндлөн огтлолын олон дүрслэлээс үүссэн цэгийн үүлийг олж авах хүртэл хөндлөн огтлолын дүрслэлийг үе үе нэмж оруулна
Алхам 4:
![Зураг Зураг](https://i.howwhatproduce.com/images/006/image-16147-5-j.webp)
Дараа нь би өнгөц лазер туузны проекцийг дүрс боловсруулах програмуудыг дамжуулдаг. Гурван хэмжээст газрын зургийн боловсруулсан загварт эдгээр хөндлөн огтлолын дүрслэлийг виртуал 3d хэлбэрээр сэргээн засварлах.
зураг боловсруулах:
n
#include #include "cv.h" #include "highgui.h" #include // #include #include #include #include
char f = 0; char нэр = {"0.jpg"}; int n = 0, s, x, y; CvScalar sp; Файл *NuPu;
хүчингүй Writepoints () {char bufferx [33], буфер [33]; itoa (x, bufferx, 10); itoa (y, buffery, 10); fprintf (NuPu, bufferx); fprintf (NuPu, "\ t"); fprintf (NuPu, буфер); fprintf (NuPu, "\ n"); }
хүчингүй noteblockInit () {NuPu = fopen ("NuPu.txt", "w"); fseek (NuPu, 0, 0); fprintf (NuPu, "NP:"); fprintf (NuPu, "\ n"); }
int main () {char argstr [128]; noteblockInit (); cout << "Teklea!…:" f; нэр [0] = f; cout <
IplImage* img0 = cvLoadImage ("00.jpg", 0); if (f == '0') {for (y = 1; yheight-2; y ++) {for (x = 1; xwidth-2; x ++) {sp = cvGet2D (img0, y, x); if (sp.val [0]> 50) {Writepoints (); n ++;}}}} else {for (y = 1; yheight-2; y ++) {for (x = 1; xwidth-2; x ++) { sp = cvGet2D (img1, y, x); if (sp.val [0]> 50) {Writepoints (); n ++;}}}} char буфер [33]; itoa (n, буфер, 10); fprintf (NuPu, "Fin:"); fprintf (NuPu, буфер); fprintf (NuPu, "\ n"); fclose (NuPu);
cvWaitKey (0); //_execlp("calc.exe "," calc.exe ", аргстр, NULL); cvDestroyAllWindows (); cvReleaseImage (& зураг); cvReleaseImage (& img); cvReleaseImage (& img0); cvReleaseImage (& img1); cvReleaseImage (& img2); буцаах 0; }
3D сэргээн босголт:
#оруулах/
#violeta glColor3f (1, 0, 1) #azul glColor3f (0, 0, 1) #define turkeza glColor3f (0, 1, 1), 1, 0) #define naranja glColor3f (1,.3, 0) #define rojo glColor3f (1, 0, 0) нэрийн талбарыг ашиглан std; int s, Boton = 1, Pulbut = 1; float mx = 0, my = 0, mtx = 0, mty = 0, mtz = -5.0; const int Avance = 1; мөрийн шугам, Aux; char Caracter = 'H'; Файл *NuPu; int NP, h, w; float G = 0, n = 0, cx [5000], cy [5000], x, y, ax, ay, az; int фонт = (int) GLUT_BITMAP_8_BY_13; статик тэмдэглэгээ [100]; char буфер [3]; GLfloat anguloCuboX = 0.0f; GLfloat anguloCuboY = 0.0f; GLfloat anguloEsfera = 0.0f; GLint зангуу = 500; GLint alto = 500; int hazPerspectiva = 0; хүчингүй хэлбэрийг өөрчлөх (int өргөн, int өндөр) {glViewport (0, 0, өргөн, өндөр); glMatrixMode (GL_PROJECTION); glLoadIdentity (); хэрэв (hazPerspectiva) gluPerspective (23.0f, (GLfloat) өргөн/(GLfloat) өндөр, 1.0f, 20.0f); өөр glOrtho (-1, 1, -1, 1, -10, 10); glMatrixMode (GL_MODELVIEW); зангуу = өргөн; alto = өндөр; } хүчингүй Kolorear (int K) {float Hip; x = (cx [s] -320)/480; y = (cy [s] -240)/640; Хип = sqrt (pow (x, 2)+pow (y, 2)); if ((Hip> = 0) && (Hip =.07) && (Hip =.14) && (Hip =.21) && (Hip =.28) && (Hip =.35) && (Hip =.42) && (Хип <=. 49)) {violeta;}} void drawNuPu (void) {glColor3f (1, 1, 1); glBegin (GL_LINES); glVertex3f (.2, 0, 0); glVertex3f (-. 2, 0, 0); glVertex3f (0,.2, 0); glVertex3f (0, -.2, 0); glEnd (); рожо; glBegin (GL_POINTS); for (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); glMatrixMode (GL_MODELVIEW);} void renderBitmapString (float x, float y, void *font, char *string) {char *c; glRasterPos2f (x, y); for (c = string; *c! = '\ 0'; c ++) {glutBitmapCharacter (фонт, *c);}} void display () {// mx = 468; itoa (mx, buffer, 10)); glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // glLoadIdentity (); glColor3f (1.0, 1.0, 1.0); glRasterPos2f (-1,.9); // glutBitmapString (GL_TIM); s <3; s ++) {glutBitmapCharacter (GLUT_BITMAP_TIMES_ROMAN_24, буфер [s]);} glTranslatef (mty, -mtx, mtz); glRotatef (mx, 1.0f, 0.0f, 0.0f); glRotatef (миний, 0.0f, 1.0F, 0.0f); drawNuPu (); /*glColor3f (1.0, 1.0, 1.0); glRasterPos2f (.5,.5); // glutBitmapString (GLUT_BITMAP_TIMES_ROMAN_24, "Сайн байна уу"); glutBitmapCARIT 'GLUT_ * / /*glColor3f (1. 0f, 1.0f, 1.0f); setOrthographicProjection (); glPushMatrix (); glLoadIdentity (); renderBitmapString (30, 15, (void *) фонт, "GLUT заавар ---_ ------ _@ 3D Tech"); */ glFlush (); glutSwapBuffers (); anguloCuboX+= 0.1f; anguloCuboY+= 0.1f; anguloEsfera+= 0.2f; } void init () {glClearColor (0, 0, 0, 0); glEnable (GL_DEPTH_TEST); зангуу = 500; альто = 500; } void 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"); if (myfile.is_open ()) {s = 0; while (getline (myfile, line)) {if ((мөр [0]! = 'N') && (шугам [0]! = 'F')) {Aux = мөр; мөр [0] = 48; мөр [1] = 48; мөр [2] = 48; мөр [3] = 48; cy [s] = atoi (line.c_str ()); Туслах [4] = 48; Туслах [5] = 48; Туслах [6] = 48; // Туслах [7] = 48; cx [s] = atoi (Aux.c_str ()); s ++; }} myfile.close (); } else cout <1780) NP = 1700; cout <void idle () {display (); } хүчингүй гар (гарын үсэггүй char түлхүүр, int x, int y) {шилжүүлэгч (түлхүүр) {case 'p': case 'P': hazPerspectiva = 1; дахин хэлбэржүүлэх (зангуу, альто); завсарлага; тохиолдол 'o': тохиолдол 'O': hazPerspectiva = 0; дахин хэлбэржүүлэх (зангуу, альто); завсарлага; тохиолдол 27: // гарах гарц (0); завсарлага; }} void raton (int button, int state, int x, int y) { / * GLUT_LEFT_BUTTON 0 GLUT_MIDDLE_BUTTON 1 GLUT_RIGHT_BUTTON 2 GLUT_DOWN 0 GLUT_UP 1 * / Boton = товчлуур; Pulbut = төлөв; // mx = y; дэлгэц (); } void ratmov (int x, int y) {if ((Boton == 0) & (Pulbut == 0)) {mx = y; миний = x; } if ((Boton == 2) & (Pulbut == 0)) {mtx = (y/200) -1; mty = (x/200) -1; } if ((Boton == 1) & (Pulbut == 0)) {mtz =-(y/40) -5; } дэлгэц (); } int main (int argc, char ** argv) { /*glutAddMenuEntry () glutAddSubMenu () glutAttachMenu () glutCreateMenu () glutSetMenu () glutStrokeCharacter () glutStrokeLength ()* / /*glReadPixels -ээс хүрээ буфер glGetPixelMapfv () заасан пикселийн зургийг буцаана glGetPixelMapuiv () заасан пикселийн газрын зургийг буцаана glGetPointerv () Заасан заагчийн хаягийг буцаана.*/ Init (); leer (); glutInit (& argc, argv); glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB); glutInitWindowPosition (50, 50); glutInitWindowSize (зангуу, өндөр); glutCreateWindow ("Cubo 1"); үүн дотор(); glutDisplayFunc (дэлгэц); glutReshapeFunc (дахин хэлбэржүүлэх); glutIdleFunc (идэвхгүй); glutMouseFunc (raton); glutMotionFunc (ratmov); glutKeyboardFunc (гар); glutMainLoop (); буцаах 0; }
Алхам 5:
![Зураг Зураг](https://i.howwhatproduce.com/images/006/image-16147-6-j.webp)
яг одоо би зогсоох ёстой! … Гэхдээ дараагийн бүлэгт би үүнийг бөөрөлзгөнө pi 3 эсвэл алсын удирдлагатай зарим онгоцонд суурилуулсан, эсвэл аалзны робот дээр агуйн дотор скан хийх зориулалттай нанобоард дээрээ хэрэгжүүлэх болно гэдгээ амлаж байна.
Зөвлөмж болгож буй:
PyCon дээр OpenCV -ийг ашигладаг QR код сканнер: 7 алхам
![PyCon дээр OpenCV -ийг ашигладаг QR код сканнер: 7 алхам PyCon дээр OpenCV -ийг ашигладаг QR код сканнер: 7 алхам](https://i.howwhatproduce.com/images/001/image-2256-j.webp)
PyRon-д OpenCV ашигладаг QR код сканнер: Өнөөгийн ертөнцөд бид бүтээгдэхүүний сав баглаа боодолоос эхлээд онлайн төлбөр тооцоо хүртэл бараг бүх цаг үед QR код, бар кодыг ашиглаж байгаа бөгөөд цэсийг үзэхийн тулд ресторанд хүртэл QR кодыг харж байна. одоо энэ бол том бодол гэдэгт эргэлзэж байна. Гэхдээ та хэзээ нэгэн цагт санаа зовж байсан уу
Дижитал диаметр хэмжигчийг хэрхэн яаж нураах вэ, дижитал диаметр нь хэрхэн ажилладаг вэ: 4 алхам
![Дижитал диаметр хэмжигчийг хэрхэн яаж нураах вэ, дижитал диаметр нь хэрхэн ажилладаг вэ: 4 алхам Дижитал диаметр хэмжигчийг хэрхэн яаж нураах вэ, дижитал диаметр нь хэрхэн ажилладаг вэ: 4 алхам](https://i.howwhatproduce.com/images/006/image-15293-j.webp)
Дижитал диаметр хэмжигчийг хэрхэн яаж нураах вэ, дижитал диаметр нь хэрхэн ажилладаг вэ: Олон хүмүүс хэмжихэд диаметр хэмжигчийг хэрхэн ашиглахаа мэддэг. Энэхүү заавар нь дижитал диаметр хэмжигчийг хэрхэн яаж нураахыг зааж өгөх бөгөөд дижитал диаметр хэмжигч хэрхэн ажилладаг талаар тайлбарлах болно
Нислэгийн зураглалын өгөгдлийг ашиглан бөөрөлзгөнө PI гүйлтийн зурвасын гэрэл: 14 алхам (зурагтай)
![Нислэгийн зураглалын өгөгдлийг ашиглан бөөрөлзгөнө PI гүйлтийн зурвасын гэрэл: 14 алхам (зурагтай) Нислэгийн зураглалын өгөгдлийг ашиглан бөөрөлзгөнө PI гүйлтийн зурвасын гэрэл: 14 алхам (зурагтай)](https://i.howwhatproduce.com/images/001/image-1245-36-j.webp)
Нислэгийн зураглалын өгөгдлийг ашиглан бөөрөлзгөнө PI гүйлтийн зурвасын гэрэл: Энэ чийдэн нь хэд хэдэн шалтгаанаас үүдэлтэй бөгөөд би дээгүүрээ нисдэг онгоцыг үргэлж сонирхож, зуны улиралд амралтын өдрүүдэд эргэн тойронд нисдэг нэлээд сонирхолтой онгоцнууд байдаг. Хэдийгээр та тэднийг өнгөрч байхад нь л сонсох хандлагатай байдаг
Ciclop 3d сканнер Алхам алхамаар: 16 алхам (зурагтай)
![Ciclop 3d сканнер Алхам алхамаар: 16 алхам (зурагтай) Ciclop 3d сканнер Алхам алхамаар: 16 алхам (зурагтай)](https://i.howwhatproduce.com/images/001/image-177-97-j.webp)
Алхам алхмаар Ciclop 3d сканнер: Сайн байна уу, би алдарт Ciclop 3D сканнерыг хэрэгжүүлэх болно. Анхны төсөл дээр сайн тайлбарласан бүх алхам байхгүй байна. Би суурийг хэвлэж, ПХБ -ийг дахин боловсруулж, үргэлжлүүлээрэй
USB C дижитал дижитал Bluetooth тэжээлийн хангамж: 8 алхам (зурагтай)
![USB C дижитал дижитал Bluetooth тэжээлийн хангамж: 8 алхам (зурагтай) USB C дижитал дижитал Bluetooth тэжээлийн хангамж: 8 алхам (зурагтай)](https://i.howwhatproduce.com/images/001/image-2052-55-j.webp)
Дижитал USB C -ээр ажилладаг Bluetooth тэжээлийн хангамж: Ойролцоох хананы залгуургүй байсан ч гэсэн та явж байхдаа ашиглах боломжтой цахилгаан хангамжийг хүсч байсан уу? Хэрэв энэ нь маш нарийвчлалтай, дижитал, компьютер болон утсаараа хянагдах боломжтой байсан бол сайхан биш гэж үү? Энэхүү зааварчилгаанд би яг хэрхэн яаж барихыг үзүүлэх болно