Képfeldolgozási módszerek – Diva3D kódolás
Kép mérete:
[0][0] (bal felső)
|
|
[height-1][width-1] (jobb alsó)
Képpontok
koordinátájának hivatkozása:
|
[j-2][i-2] |
[j-2][i-1] |
[j-2][i] |
[j-2][i+1] |
[j-2][i+2] |
|
[j-1][i-2] |
[j-1][i-1] |
[j-1][i] |
[j-1][i+1] |
[j-1][i+2] |
|
[j][i-2] |
[j][i-1] |
[j][i] |
[j][i+1] |
[j][i+2] |
|
[j+1][i-2] |
[j+1][i-1] |
[j+1][i] |
[j+1][i+1] |
[j+1][i+2] |
|
[j+2][i-2] |
[j+2][i-1] |
[j+2][i] |
[j+2][i+1] |
[j+2][i+2] |
Képpont elérése:
Volume->mem.ucval[color][frame][coordy][coordx]
color: az RGB
színcsatorna, értékkészlete: 0..2
(0=R(ed), 1=G(reen), 2=B(lue))
frame: a
videoframe száma (indexe), értékkészlete: 0..
Vol->depth-1
coordy: a
képpont függőleges koordinátája, értékkészlete: 0..
Vol->height-1
coordy: a
képpont vízszintes koordinátája, értékkészlete: 0..
Vol->width-1
Volume->mem.ucval[color][frame][coordy][coordx]
értékkészlete: 0..255 (8
bites grayscale/24 bites RGB)
MessageBox
használata (hibakereséshez):
MessageBox
(NULL,"Message","Title", MB_OK);
Vagy:
char
demo_string[100];
int x;
...
sprintf(demo_string,"%d
",x);
MessageBox
(NULL,demo_string,"Title", MB_OK);
Mai:
int
cont_dir=0; /* 0 up, 1 left, 2 down, 3 right */
acti=sti;
actj=stj;
cont_dir=0;
reduction_rate=4;
// startin pixel is highlited and marked as
visited
outSil->mem.ucval[0][ks][actj][acti]=255;
outSil->mem.ucval[1][ks][actj][acti]=255;
outSil->mem.ucval[2][ks][actj][acti]=255;
visited[actj][acti]=1;
reduce_counter=1; //starting the counter
for reduction rate
while (cont_finish==0) //while we do not
reach the starting point
{
if (reduce_counter==reduction_rate)
(reduce_counter=0);
switch (cont_dir)
{
case 0: // UP direction for the
boundary vector
if
(inSil->mem.ucval[0][ks][actj-1][acti-1]!=0) // checking upper left
neighbour
{
actj=actj-1;
acti=acti-1;
cont_dir=1;
if
((reduce_counter==0) && (visited[actj][acti]==0))
{
outSil->mem.ucval[0][ks][actj][acti]=255;
outSil->mem.ucval[1][ks][actj][acti]=255;
outSil->mem.ucval[2][ks][actj][acti]=255;
}
if ((actj==stj)
&& (acti==sti)) (cont_finish=1); // we reached the starting point and
STOP
if
(visited[actj][acti]==0) (reduce_counter=reduce_counter+1); // increasing the
reduction counter
visited[actj][acti]=1;
//mark the pixel as visited
}
else if
(inSil->mem.ucval[0][ks][actj-1][acti]!=0) // checking upper neighbour
{
actj=actj-1;
acti=acti;
cont_dir=0;
if
((reduce_counter==0) && (visited[actj][acti]==0))
{
outSil->mem.ucval[0][ks][actj][acti]=255;
outSil->mem.ucval[1][ks][actj][acti]=255;
outSil->mem.ucval[2][ks][actj][acti]=255;
}
if ((actj==stj)
&& (acti==sti)) (cont_finish=1); // we reached the starting point and
STOP
if
(visited[actj][acti]==0) (reduce_counter=reduce_counter+1); // increasing the
reduction counter
visited[actj][acti]=1;
//mark the pixel as visited
}
else
{
cont_dir=3; // turn
right simply (this pixel has been processed yet)
}
break;
case 1: // LEFT direction for the
boundary vector
if
(inSil->mem.ucval[0][ks][actj+1][acti-1]!=0)
{
actj=actj+1;
acti=acti-1;
cont_dir=2;
if
((reduce_counter==0) && (visited[actj][acti]==0))
{
outSil->mem.ucval[0][ks][actj][acti]=255;
outSil->mem.ucval[1][ks][actj][acti]=255;
outSil->mem.ucval[2][ks][actj][acti]=255;
}
if ((actj==stj)
&& (acti==sti)) (cont_finish=1); // we reached the starting point and
STOP
if
(visited[actj][acti]==0) (reduce_counter=reduce_counter+1); // increasing the
reduction counter
visited[actj][acti]=1;
//mark the pixel as visited
}
else if
(inSil->mem.ucval[0][ks][actj][acti-1]!=0)
{
actj=actj;
acti=acti-1;
cont_dir=1;
if
((reduce_counter==0) && (visited[actj][acti]==0))
{
outSil->mem.ucval[0][ks][actj][acti]=255;
outSil->mem.ucval[1][ks][actj][acti]=255;
outSil->mem.ucval[2][ks][actj][acti]=255;
}
if ((actj==stj)
&& (acti==sti)) (cont_finish=1); // we reached the starting point and
STOP
if (visited[actj][acti]==0)
(reduce_counter=reduce_counter+1); // increasing the reduction counter
visited[actj][acti]=1;
//mark the pixel as visited
}
else
{
cont_dir=0;
}
break;
case 2: // DOWN direction for
the boundary vector
if
(inSil->mem.ucval[0][ks][actj+1][acti+1]!=0)
{
actj=actj+1;
acti=acti+1;
cont_dir=3;
...