Classes | Macros | Functions
apriltag_quad_thresh.c File Reference
#include <math.h>
#include <assert.h>
#include <string.h>
#include <stdio.h>
#include <stdint.h>
#include "apriltag.h"
#include "common/image_u8x3.h"
#include "common/zarray.h"
#include "common/zhash.h"
#include "common/unionfind.h"
#include "common/timeprofile.h"
#include "common/zmaxheap.h"
#include "common/postscript_utils.h"
#include "common/math_util.h"
Include dependency graph for apriltag_quad_thresh.c:

Go to the source code of this file.

Classes

struct  line_fit_pt
 
struct  pt
 
struct  quad_task
 
struct  remove_vertex
 
struct  segment
 
struct  uint64_zarray_entry
 
struct  unionfind_task
 

Macros

#define ASSOC   2
 
#define DO_CONN(dx, dy)
 
#define DO_UNIONFIND(dx, dy)   if (im->buf[y*s + dy*s + x + dx] == v) unionfind_connect(uf, y*w + x, y*w + dy*w + x + dx);
 
#define M_PI   3.141592653589793238462643383279502884196
 
#define MAYBE_SWAP(arr, apos, bpos)
 
#define MERGE(apos, bpos)
 

Functions

zarray_tapriltag_quad_thresh (apriltag_detector_t *td, image_u8_t *im)
 
static void do_quad_task (void *p)
 
static void do_unionfind_line (unionfind_t *uf, image_u8_t *im, int h, int w, int s, int y)
 
static void do_unionfind_task (void *p)
 
int err_compare_descending (const void *_a, const void *_b)
 
void fit_line (struct line_fit_pt *lfps, int sz, int i0, int i1, double *lineparm, double *err, double *mse)
 
int fit_quad (apriltag_detector_t *td, image_u8_t *im, zarray_t *cluster, struct quad *quad)
 
int pt_compare_theta (const void *_a, const void *_b)
 
static void ptsort (struct pt *pts, int sz)
 
int quad_segment_agg (apriltag_detector_t *td, zarray_t *cluster, struct line_fit_pt *lfps, int indices[4])
 
int quad_segment_maxima (apriltag_detector_t *td, zarray_t *cluster, struct line_fit_pt *lfps, int indices[4])
 
image_u8_tthreshold (apriltag_detector_t *td, image_u8_t *im)
 
image_u8_tthreshold_bayer (apriltag_detector_t *td, image_u8_t *im)
 
static uint32_t u64hash_2 (uint64_t x)
 

Macro Definition Documentation

#define ASSOC   2
#define DO_CONN (   dx,
  dy 
)
Value:
if (1) { \
uint8_t v1 = threshim->buf[y*ts + dy*ts + x + dx]; \
\
if (v0 + v1 == 255) { \
uint64_t rep1 = unionfind_get_representative(uf, y*w + dy*w + x + dx); \
uint64_t clusterid; \
if (rep0 < rep1) \
clusterid = (rep1 << 32) + rep0; \
else \
clusterid = (rep0 << 32) + rep1; \
\
/* XXX lousy hash function */ \
uint32_t clustermap_bucket = u64hash_2(clusterid) % nclustermap; \
struct uint64_zarray_entry *entry = clustermap[clustermap_bucket]; \
while (entry && entry->id != clusterid) { \
entry = entry->next; \
} \
\
if (!entry) { \
entry = calloc(1, sizeof(struct uint64_zarray_entry)); \
entry->id = clusterid; \
entry->cluster = zarray_create(sizeof(struct pt)); \
entry->next = clustermap[clustermap_bucket]; \
clustermap[clustermap_bucket] = entry; \
} \
\
struct pt p = { .x = 2*x + dx, .y = 2*y + dy, .gx = dx*((int) v1-v0), .gy = dy*((int) v1-v0)}; \
zarray_add(entry->cluster, &p); \
} \
}
static uint32_t unionfind_get_representative(unionfind_t *uf, uint32_t id)
Definition: unionfind.h:95
struct uint64_zarray_entry * next
static zarray_t * zarray_create(size_t el_sz)
Definition: zarray.h:63
uint16_t x
static uint32_t u64hash_2(uint64_t x)
static void zarray_add(zarray_t *za, const void *p)
Definition: zarray.h:185
#define DO_UNIONFIND (   dx,
  dy 
)    if (im->buf[y*s + dy*s + x + dx] == v) unionfind_connect(uf, y*w + x, y*w + dy*w + x + dx);

Definition at line 1093 of file apriltag_quad_thresh.c.

#define M_PI   3.141592653589793238462643383279502884196

Definition at line 66 of file apriltag_quad_thresh.c.

#define MAYBE_SWAP (   arr,
  apos,
  bpos 
)
Value:
if (arr[apos].theta > arr[bpos].theta) { \
tmp = arr[apos]; arr[apos] = arr[bpos]; arr[bpos] = tmp; \
};
#define MERGE (   apos,
  bpos 
)
Value:
if (as[apos].theta < bs[bpos].theta) \
pts[outpos++] = as[apos++]; \
else \
pts[outpos++] = bs[bpos++];

Function Documentation

zarray_t* apriltag_quad_thresh ( apriltag_detector_t td,
image_u8_t im 
)

Definition at line 1510 of file apriltag_quad_thresh.c.

static void do_quad_task ( void *  p)
static

Definition at line 1128 of file apriltag_quad_thresh.c.

static void do_unionfind_line ( unionfind_t uf,
image_u8_t im,
int  h,
int  w,
int  s,
int  y 
)
static

Definition at line 1095 of file apriltag_quad_thresh.c.

static void do_unionfind_task ( void *  p)
static

Definition at line 1119 of file apriltag_quad_thresh.c.

int err_compare_descending ( const void *  _a,
const void *  _b 
)

Definition at line 366 of file apriltag_quad_thresh.c.

void fit_line ( struct line_fit_pt lfps,
int  sz,
int  i0,
int  i1,
double *  lineparm,
double *  err,
double *  mse 
)

Definition at line 232 of file apriltag_quad_thresh.c.

int fit_quad ( apriltag_detector_t td,
image_u8_t im,
zarray_t cluster,
struct quad quad 
)

Definition at line 677 of file apriltag_quad_thresh.c.

int pt_compare_theta ( const void *  _a,
const void *  _b 
)

Definition at line 358 of file apriltag_quad_thresh.c.

static void ptsort ( struct pt pts,
int  sz 
)
inlinestatic

Definition at line 120 of file apriltag_quad_thresh.c.

int quad_segment_agg ( apriltag_detector_t td,
zarray_t cluster,
struct line_fit_pt lfps,
int  indices[4] 
)

Definition at line 566 of file apriltag_quad_thresh.c.

int quad_segment_maxima ( apriltag_detector_t td,
zarray_t cluster,
struct line_fit_pt lfps,
int  indices[4] 
)

Definition at line 390 of file apriltag_quad_thresh.c.

image_u8_t* threshold ( apriltag_detector_t td,
image_u8_t im 
)

Definition at line 1167 of file apriltag_quad_thresh.c.

image_u8_t* threshold_bayer ( apriltag_detector_t td,
image_u8_t im 
)

Definition at line 1394 of file apriltag_quad_thresh.c.

static uint32_t u64hash_2 ( uint64_t  x)
inlinestatic

Definition at line 52 of file apriltag_quad_thresh.c.



apriltags2
Author(s): Danylo Malyuta
autogenerated on Fri Oct 19 2018 04:02:33