Stereogram Algorithms - Oversampling
Stereograms created by this basic code are fun to view, but suffer from several
visual shortcomings - primarily the apparent layering of the object being viewed.
Other visual issues (echoes, artifacts, holes, ...) can also be seen in the results of
the basic code.
Basic Stereogram with Oversampling Algorithm
In this example, two pictureboxes are used - one to provide the depth information
(picDepth) and one to display the stereogram (picOut).
1 Dim x As Long, y As Long, maxX As Long, maxY As Long, same() As Long 'basic
2 Dim z() As Single, mu As Single, E As Long, DPI As Long, s As Long 'basic
3 Dim right As Long, left As Long, w As Single 'basic
4 Dim L As Long 'smart links
5 Dim zt As Single, t As Long, visible As Long 'hidden surface removal
6 Dim R As Long, G As Long, B As Long, i As Long 'oversampling
7 Dim p() As Long, oversample As Long 'oversampling
8 oversample = 2: DPI = 72: E = 2.5 * DPI * oversample: mu = 0.2: w = 0.5
9 maxX = picDepth.ScaleWidth * oversample: maxY = picDepth.ScaleHeight
10 ReDim same(maxX), z(maxX, maxY), p(maxX, maxY): Randomize
11 For y = 0 To maxY
12 For x = 0 To maxX - 1 '1 scanline
13 z(x, y) = picDepth.Point(x / oversample, y) / 16777215 'initialize
14 same(x) = x 'initialize
15 s = (1 - mu * z(x, y)) * E / (2 - mu * z(x, y)) 'image plane separation
16 left = x - (s / 2) 'left link position
17 right = left + s 'right link position
18 If 0 <= left And right < maxX Then same(left) = right 'create link
19 Next x
20 For x = maxX - 1 To 0 Step -1 'set colors
21 If same(x) = x Then
22 p(x, y) = Int(Rnd + w) * vbWhite 'Rnd*vbwhite for color
23 Else
24 p(x, y) = p(same(x), y) 'link color
25 End If
26 Next x
27 Next y
28 For y = 0 To maxY: For x = 0 To maxX - 1 Step oversample 'average pixel colors
29 R = 0: G = 0: B = 0
30 For i = 0 To oversample - 1
31 R = R + p(x + i, y) Mod 256
32 G = G + (p(x + i, y) \ 256) Mod 256
33 B = B + (p(x + i, y) \ 256 \ 256) Mod 256
34 Next i
35 picOut.PSet (x / oversample, y), RGB(R / oversample, G / oversample, B / oversample)
36 Next x: Next y
|