void assign_view(ViewT1 sv) { // processor 0 will distribute data to all other procs vsip::Vector<vsip::processor_type> pvec_in(1);pvec_in(0)=(0); vsip::Map<> root_map(pvec_in); dst_block root_block(sv.size(),root_map); dst_view root_view(root_block); // Ok, now move the vector to the distributed view vsip::impl::assign_local(root_view,sv); view = root_view; };
/* TODO - label_contour is called two times; only once suffices */ AnimalExport ImgPUInt32 * msskl_difference(ann_img *aimg) { ImgPUInt32 *imcont, *immsskel, *imseed, *imperim; puint32 *seed, *cont, *perim, *pred, *label, *msskel, maxd1, maxd2, MaxD; int r,c,i,j,k,qx,qy,p,q, d1,d2, *idxlut,n; r = aimg->label->rows; c = aimg->label->cols; n = r*c; idxlut = aimg->label->lut; imcont = label_contour(aimg->img); imperim = perimeter(aimg->img); immsskel = new_img_puint32(r,c); imseed = root_map(aimg->pred); seed = imseed->data; cont = imcont->data; perim = imperim->data; msskel = immsskel->data; pred = aimg->pred->data; label = aimg->label->data; MaxD = 0; for (i=0; i<r; i++) for (j=0; j<c; j++) { p = index1(i,j,idxlut); // @@@ why eliminate the contours?? if (pred[p] != (unsigned)p) {/* Eliminates the contours and considers the side option */ maxd1 = maxd2 = 0; for (k=0; k < 4; k++) { qy = n4[k][0] + i; qx = n4[k][1] + j; if (valid_pixel(r,c,qx,qy)) { q = index1(qy,qx,idxlut); if (cont[seed[p]] == cont[seed[q]]) { // not a SKIZ d2 = label[q] - label[p]; if (d2 > (int)perim[seed[p]]-d2) d2 = (int)perim[seed[p]]-d2; if (d2 > (int)maxd2) maxd2 = (unsigned)d2; } else { // a SKIZ d1 = cont[seed[q]] - cont[seed[p]]; if (d1 > (int)maxd1) maxd1 = (unsigned)d1; } } } if (maxd1 > 0) msskel[p] = UINT_MAX; else { msskel[p] = maxd2; if (msskel[p] > MaxD) MaxD = msskel[p]; } } } for (p=0; p < n; p++) if (msskel[p] == UINT_MAX) msskel[p] = MaxD + 1; imfree_puint32(&imcont); imfree_puint32(&imperim); imfree_puint32(&imseed); return immsskel; }