コード例 #1
0
ファイル: saliency.cpp プロジェクト: desaic/MeshPlane
void saliency_map(const char * filename, Mesh & m)
{
    int width, height;
    unsigned char * buf = imageio_load_image(filename, &width, &height);
    m.adjlist();
    MaxMapper mapper(buf,width,height);
    for(size_t tidx=0; tidx<m.t.size(); tidx++) {
        mapper.max=0;
        for(size_t jj=0; jj<m.adjMat[tidx].size(); jj++) {
            int nbr=m.adjMat[tidx][jj];
            int kk=0;
            bool foundExclude=false;
            for(kk=0; kk<3; kk++) {
                int vidx=m.t[tidx][kk];
                if(!contains(m.t[nbr].x, vidx,3)) {
                    foundExclude=true;
                    break;
                }
            }
            if(!foundExclude) {
                //shouldn't really happen
                continue;
            }
            trace_edge(m,tidx,(kk+1)%3,(kk+2)%3,mapper);
            trace_edge(m,nbr,(kk+1)%3,(kk+2)%3,mapper);
            m.saliency[EdgeId(tidx,nbr)]=mapper.max/255.0;
        }
    }
    delete []buf;
}
コード例 #2
0
ファイル: edges.c プロジェクト: bashrc/visionutils
/* traces along a set of edges and returns the edge members and the perimeter */
void trace_edges(unsigned char * edgesImage,
                 int width, int height,
                 struct line_segments * segments)
{
    int x,y,n,index=0,max;
    int tx = segments->image_border;
    int ty = segments->image_border;
    int bx = width - segments->image_border - 1;
    int by = height - segments->image_border - 1;
    int border_tx,border_ty,border_bx,border_by;
    int * memb,no_of_memb=0;

    segments->no_of_segments = 0;

    for (y=ty; y<=by; y++) {
        for (x=tx; x<=bx; x++) {
            n = y*width + x;
            if (edgesImage[n]==0) {
                border_tx = width;
                border_ty = height;
                border_bx = 0;
                border_by = 0;

                memb = &(segments->members[index*2]);
                max = segments->max_members - index - 1;
                trace_edge(edgesImage, width, height,
                           x, y, segments->image_border,
                           &border_tx, &border_ty,
                           &border_bx, &border_by,
                           segments->ignore_periphery,
                           max,memb,
                           &no_of_memb);
                segments->no_of_members[segments->no_of_segments] =
                    no_of_memb;

                if (segments->no_of_members[segments->no_of_segments] >
                        segments->minimum_segment_length) {
                    index +=
                        segments->no_of_members[segments->no_of_segments];
                    segments->no_of_segments++;
                    if (segments->no_of_segments >=
                            segments->max_segments) return;
                }

            }
        }
    }
}