У меня есть этот код ниже, и меня попросили изменить его, добавить x [] и y [] и сохранить координаты границы в x [] и y []
кодчитает изображение как матрицу, 2X2, и, если какой-либо объект найден, он вычисляет периметры.Границы найденного объекта.
пс.Цепной код, в основном это Цепной код Фримена
Я добавлю картинку, как это работает,
Может кто-нибудь помочь мне, пожалуйста, я был бы оченьблагодарен,
// compute the chain code of the object begninning at pixel (i,j)
//and return the direction code as NN integers in the array C[] , and coordinates of boundary in x[] and y[]
void chain8 (struct image *x, int *c, int i, int j, int *nn)
{
int val,n,m,q,r, di[9],dj[9],ii,dii;
int lastdir, jj;
/* Table given index offset for each of the 8 directions. */
di[0] = 0; di[1] = -1; di[2] = -1; di[3] = -1;
dj[0] = 1; dj[1] = 1; dj[2] = 0; dj[3] = -1;
di[4] = 0; di[5] = 1; di[6] = 1; di[7] = 1;
dj[4] = -1; dj[5] = -1; dj[6] = 0; dj[7] = 1;
for (ii=0; ii<200; ii++) c[ii] = -1; /* Clear the code table */
val = x->data[i][j]; n = 0; /* Initialize for starting pixel */
q = i; r = j; lastdir = 4;
do {
m = 0;
dii = -1;
for (ii=lastdir+1; ii<lastdir+8; ii++) { /* Look for next */
jj = ii%8;
if (range(x,di[jj]+q, dj[jj]+r))
if ( x->data[di[jj]+q][dj[jj]+r] == val) {
dii = jj; m = 1;
break;
}
}
if (m) { /* Found a next pixel ... */
if (n<200) c[n++] = dii; /* Save direction as code */
q += di[dii]; r += dj[dii];
lastdir = (dii+5)%8;
} else break; /* NO next pixel */
if (n>200) break;
} while ( (q!=i) || (r!=j) ); /* Stop when next to start pixel */
*nn = n;
}