algorithm - Structured Light - How to do when the projector's resolution is lower than patterns? -
i try build structured light environment 3d scanning.
as far know, if choose use gray code reconstruct 3d model, have implement specific patterns encode in power 2(2^x, x = 0 ~ 10).
that said, patterns must @ least 1024 x 1024 in resolution.
what if dlp projector support resolution 800 x 480? projects moire pattern when gray code pattern resolution becomes high(i tried). should do?
my friends suggest create 1024 x 1024 patterns, , "crop" them 800 x 480,
but thought gray code should follow specific sequence , patterns, friends suggestion create several image not symmetry.
does have same experience me?
----------2015.8.4 update question----------
i thinking if projector can't projects high resolution patterns, can let projects patterns low resolution, instance, 2^0 2^6?
or gray code strictly demands patterns 2^0 2^10? otherwise gray code not available?
you can not directly scale down resolution
because distort pattern make useless
instead can:
crop resolution
but need handle in scanning part because not have full pattern available
use nearest usable power of 2 resolution
like
512x256
, create pattern it. rest of space unused (wasting pixels)use bullet #2 + scale fit resolution better
so create pattern
512x256
, linearly scale fit800x480
as can so:800/512 = 1.5625 480/256 = 1.8750
use smaller scale (
512x256 * 1.5625 -> 800x400
) scale pattern1.5625
, use pattern imagethis scaled nearest neighbor avoid subpixel grayscale colors harder detect. this waste less pixels can lower precision of 3d scan !!!
this how generate pattern in c++ , 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; (da=0;1<<da<xs;da++); // number of bits per x resolution (a=0,y=0;y<ys;y++,a=(y*da)/ys) (x=0;x<xs;x++) if (int((x>>a)&1)==0) pyx[ys-1-y][x]=0x00ffffff; bmp->savetofile("3d_scann_pattern0.bmp");
bmp
vcl bitmapxs,ys
resolution of bitmapp[ys][xs]
direct 32bit pixel access bitmap
this slight differently encoded pattern !!!
[notes]
- if need precision use bullet #2
- if need cover bigger area use bullet #3
- you can scale in
y
axis differently inx
axis 1d encoding
Comments
Post a Comment