2015-08-03 26 views
6

Próbuję zbudować środowisko światła strukturalnego do skanowania 3D.Światło strukturalne - jak zrobić, gdy rozdzielczość projektora jest mniejsza niż w przypadku wzorów?

O ile wiem, jeśli wybiorę użycie szarego kodu do rekonstrukcji modelu 3D, muszę zaimplementować określone wzorce, które kodowały w potędze 2 (2^x, x = 0 ~ 10).

enter image description here

To jest powiedziane, wzorce musi wynosić co najmniej 1024 x 1024 w rozmiar.

Co zrobić, jeśli projektor DLP obsługuje tylko rozdzielczość do 800 x 480? Projektuje wzór mory, gdy rozdzielczość szarego wzoru kodu staje się zbyt wysoka (próbowałem). Co powinienem zrobić?

Moi przyjaciele sugerują, że tworzę 1024 x 1024 wzorów, a „crop” je do 800 x 480,

ale myślałem kod szary powinien podążać określoną sekwencję i wzorców, moi przyjaciele sugestia będzie tworzyć kilka obraz nie jest symetria.

Czy ktoś ma takie samo doświadczenie jak ja?

---------- 04.08.2015 Aktualizacja Pytanie ----------

Myślałam, że jeśli mój projektor nie może doskonale projektów wysokiej rozdzielczości wzorów, mogą Po prostu pozwoliłem, aby projektował wzory o niskiej rozdzielczości, na przykład od 2^0 do 2^6?

Albo szary kod wymaga ściśle wzorców od 2^0 do 2^10? W przeciwnym razie szary kod jest niedostępny?

+0

Przytnij do 800 x 480, nie przeskaluj. Nie sądzę, że brakujący obszar będzie problemem (chyba że twoje oprogramowanie wymaga pasków 1024, w co wątpię). –

+0

Sprawdź również, czy obiektyw jest wystarczająco dobry, aby utrzymać tę częstotliwość przestrzenną (krzywa MTF). A co z rozdzielczością skanera/kamery? –

Odpowiedz

3

nie można bezpośrednio skalowanie w dół do rozdzielczości

bo to zakłóca wzór uczynić go bezużytecznym

zamiast można:

  1. wole go rozdzielczość

    ale musisz sobie z tym poradzić podczas skanowania ning część też dlatego, że nie będzie miał pełny wzór dostępny

  2. użycie najbliższy użytecznej mocy 2 uchwały

    jak 512x256 i stworzyć wzorzec dla niego.Reszta przestrzeni jest nieużywane (piksele marnować) 512x256

  3. użycie kula nr 2 + skalowanie w górę, aby dopasować rozdzielczość lepiej

    więc stworzyć wzór 512x256 i liniowo przeskalować aby pasowały do ​​800x480 jak można tak:

    800/512 = 1.5625 
    480/256 = 1.8750 
    

    użycie mniejsza skala (512x256 * 1.5625 -> 800x400), więc skala wzoru przez 1.5625 i użyć jej jako obraz wzoru

    800x400

    ten jest skalowany przez najbliższego sąsiada, aby uniknąć subpiksel barwy szarości, które są trudniejsze do wykrycia. Spowoduje to zmniejszenie liczby pikseli, ale może obniżyć precyzję skanowania 3D !!!

ten sposób wygenerować mój wzór w C++ i VCL:

// [generate pattern xs*ys power of 2 resolution] 
// clear buffer 
bmp->Canvas->Brush->Color=clBlack; 
bmp->Canvas->FillRect(TRect(0,0,xs,ys)); 
int x,y,a,da; 
for (da=0;1<<da<xs;da++);     // number of bits per x resolution 
for (a=0,y=0;y<ys;y++,a=(y*da)/ys) 
for (x=0;x<xs;x++) 
    if (int((x>>a)&1)==0) pyx[ys-1-y][x]=0x00FFFFFF; 
bmp->SaveToFile("3D_scann_pattern0.bmp"); 
  • bmp jest VCL bitmapy
  • xs,ys jest rozdzielczość bitmapy
  • p[ys][xs] jest bezpośredni dostęp do mapy bitowej o wielkości 32-bitowego piksela:

To jest trochę inaczej zakodowane niż twój wzór !!!

[Uwagi]

  • Jeśli potrzebujesz precyzyjne użycie kuli # 2
  • Jeśli trzeba pokryć większe użycie obszar kula nr 3
  • Można również skalować w y oś różnie potem w osi x, ponieważ jest to kodowanie 1D
+0

Przypuszczam, że masz na myśli "rozdzielczość projektora" w pierwszym wierszu i punktor 1, prawda? lub masz na myśli moją rozdzielczość na PC (NB)? – APU

+0

@APU tak z rozdzielczością zgrubnych projektorów ... urządzenie do wizualizacji nie ma nic wspólnego ze skanowaniem. Jedyne rozwiązania, które musisz uwzględnić, to projektory i kamera (-y) ... – Spektre