75 void apline(ap_t *ap,
float dat[],
float conf[],
float smoothed[],
76 float smoothedc[],
int j,
unsigned char *bpm) {
81 float i2compare,icompare;
84 i2compare = ap->thresh;
85 icompare = i2compare * ap->multiply;
88 for (i = 0; i < ap->lsiz; i++) {
89 if (smoothedc[i] > icompare && conf[i] != 0) {
94 ip = ap->lastline[i + 1];
103 ip = ap->pstack[ap->ipstack++];
104 ap->parent[ip].first = ap->bstack[ap->ibstack];
105 ap->parent[ip].pnop = 0;
106 ap->parent[ip].pnbp = 0;
107 ap->parent[ip].growing = 0;
112 ap->parent[ip].touch = 1;
114 ap->parent[ip].touch = 0;
126 }
else if ((ip > 0 && is > 0) && (ip != is)) {
130 ap->blink[ap->parent[ip].last] = ap->parent[is].first;
134 ap->parent[ip].last = ap->parent[is].last;
135 ap->parent[ip].pnop += ap->parent[is].pnop;
136 ap->parent[ip].pnbp += ap->parent[is].pnbp;
140 ib = ap->parent[is].first;
143 i1 = ap->plessey[ib].x;
144 if (ap->lastline[i1 + 1] == is)
145 ap->lastline[i1 + 1] = ip;
146 if (ap->parent[is].last == ib)
154 ap->parent[is].pnop = -1;
155 ap->parent[is].pnbp = -1;
159 ap->pstack[--ap->ipstack] = is;
164 ib = ap->bstack[ap->ibstack++];
168 if (ap->parent[ip].pnop > 0)
169 ap->blink[ap->parent[ip].last] = ib;
173 ap->parent[ip].last = ib;
177 ap->plessey[ib].x = i;
178 ap->plessey[ib].y = j;
179 ap->plessey[ib].z = dat[i];
181 if (mflag[nn] != MF_SATURATED)
182 ap->plessey[ib].zsm = MIN(ap->saturation,smoothed[i]);
184 ap->plessey[ib].zsm = ap->saturation;
185 mflag[nn] = MF_POSSIBLEOBJ;
189 ap->parent[ip].pnop++;
191 ap->parent[ip].pnbp += bpm[i];
195 ap->lastline[i + 1] = ip;
201 ap->lastline[i + 1] = 0;
208 if(ap->lastline[1] > 0 )
209 ap->parent[ap->lastline[1]].touch |= 2;
210 if(ap->lastline[ap->lsiz] > 0)
211 ap->parent[ap->lastline[ap->lsiz]].touch |= 4;
void apline(ap_t *ap, float dat[], float conf[], float smoothed[], float smoothedc[], int j, unsigned char *bpm)
Detect objects on a line of data.