Region = RLE
行程 {row, col_begin, col_end},形态学 / connection / 集合运算在行程上完成,复杂度随区域规模增长。
HVL 1.12 · C ABI
HVL(Halcon-style Vision Library)以 C++17 实现、C ABI 导出, Region 采用行程编码(RLE),算子语义对齐 MVTec HALCON 的使用习惯,可供 C / C++ / C# / Python 调用。
01 // DESIGN
行程 {row, col_begin, col_end},形态学 / connection / 集合运算在行程上完成,复杂度随区域规模增长。
分割直接输出 region,再 connection / select_shape / 形态学,而不是长期持有整图掩膜。
稳定 C ABI + CMake find_package(hvl);绑定:C++ RAII、C# P/Invoke、Python ctypes。
02 // PIPELINE
mean / gauss
threshold / domain
open / close
connection 4/8
select / measure / NCC·shape
03 // OPERATORS
04 // CODE
#include "hvl.h"
HvlImage* img = NULL;
hvl_image_read_pgm("part.pgm", &img);
HvlRegion* dark = NULL;
hvl_threshold(img, 0, 120, &dark);
HvlRegion* opened = NULL;
hvl_opening_rectangle1(dark, 3, 3, &opened);
HvlRegion** blobs = NULL; int n = 0;
hvl_set_system("neighborhood", 8);
hvl_connection(opened, &blobs, &n);
HvlRegion** sel = NULL; int ns = 0;
hvl_select_shape(blobs, n, "area", "and", 100, 1e9, &sel, &ns);
HvlRegion** sorted = NULL; int nsort = 0;
hvl_sort_region(sel, ns, "area", "decreasing", &sorted, &nsort);
HvlRegion* solid = NULL;
hvl_fill_up(sorted[0], &solid);
double mean, dev;
hvl_intensity(img, solid, &mean, &dev);
double row, col, ra, rb, phi, rms;
hvl_fit_ellipse_contour(solid, &row, &col, &ra, &rb, &phi, &rms);
真实图:hvl_monkey_pipeline / hvl_monkey_match /
hvl_monkey_hybrid(NCC→shape)· 图:examples/monkey.png。
05 // DEMO · monkey.png
对 512×512 灰度 monkey.png 运行中值 / Canny / 分割 / 匹配。
点击图片可看原图。
本地复现:
./build/bin/hvl_monkey_pipeline && ./build/bin/hvl_monkey_match && ./build/bin/hvl_monkey_hybrid
· 性能:
./build/bin/hvl_bench_match
(1.12:产线配方见库内 docs/RECIPES.md,
发布包 make package)
06 // RECIPE
// 启动时:模板 + shape model
hvl_create_shape_model(templ, 25.0, 1500, &model);
// 在线:NCC 金字塔粗定 → 局部 shape 精修(~30–40ms @512/96)
hvl_find_ncc_shape(img, templ, model,
3, 0.55, 12, // levels, ncc_min, pad
-0.10, 0.20, 0.05, // angle search
0.22, 0.05, 0.02, 3, // shape_min, ang_refine, pos_refine
4, rows, cols, angs, scores, ncc_r, ncc_c, &n);
// 跟踪帧:只搜上一帧 TL 附近
hvl_find_ncc_levels_roi(img, templ, 3, 0.6, 2, 15, 1,
tr-40, tc-40, tr+40, tc+40, rows, cols, scores, &n);
完整说明(blob 检测、卡尺、坐标系):源码树 docs/RECIPES.md · 性能
docs/PERF.md。