目标提取——背景均匀、目标与背景相似

本文介绍了针对目标提取的问题,特别是当目标与背景相似且背景均匀的情况。通过滤波和模糊化预处理,结合动态阈值分割技术,可以有效地分离目标。文中引用了halcon的两个案例,包括surface_scratch.hdev用于处理划痕检测,以及particle.hdev用于在液体中分析低亮度颗粒。这些方法对于剔除亮色物也有一定效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

套路:滤波模糊化——动态阈值分割

halcon中案例:surface_scratch.hdev,划痕与背景相似,背景均匀

read_image (Image, 'surface_scratch')
get_image_size (Image, Width, Height)

mean_image (Image, ImageMean, 7, 7) //用7×7的窗口对图像进行均值滤波,获得参考图像
//动态阈值分割
dyn_threshold (Image, ImageMean, DarkPixels, 5, '
### ORB-SLAM2 中的特征提取匹配 ORB-SLAM2 使用了一种高效且鲁棒的方式来进行特征提取和匹配。具体来说,该系统依赖于 FAST 角点检测器来识别图像中的显著位置,并利用 BRIEF 描述符对这些角点进行编码。 #### 1. FAST 角点检测 FAST (Features from Accelerated Segment Test) 是一种高效的角点检测算法,在 ORB-SLAM2 中用于定位潜在的兴趣点。FAST 的工作原理基于像素强度的变化情况:如果一个圆周上的连续多个像素都明显亮于或暗于中心像素,则认为此处存在角点[^1]。 为了提高效率并减少冗余,FAST 还会通过非极大值抑制(Non-Maximum Suppression, NMS)去除那些响应较弱的候选点。最终得到一组具有代表性的、分布均匀的关键点集合。 ```cpp // C++ 示例代码片段展示如何调用 OpenCV 库执行 FAST 检测 cv::Ptr<cv::FastFeatureDetector> detector = cv::FastFeatureDetector::create(); std::vector<cv::KeyPoint> keypoints; detector->detect(image, keypoints); ``` #### 2. BRIEF 描述符构建 一旦获得了足够的关键点之后,下一步就是为每一个关键点创建描述符以便后续匹配操作。ORB-SLAM2 选择了 BRIEF (Binary Robust Independent Elementary Features),这是一种二进制字符串形式的局部外观表示法[^2]。 BRIEF 不同于 SIFT 或 SURF 那样复杂的梯度直方图结构;相反,它简单地比较一对随机选定的位置处灰度值大小关系,并记录下布尔结果。整个过程可以看作是对原始数据进行了降维处理,从而使得存储空间需求大大降低的同时保持了良好的区分能力。 ```python import numpy as np def brief_descriptor(keypoint_image_patch): # 假设输入是一个围绕着某个 keypoint 裁剪出来的固定尺寸的小区域 num_pairs = 512 # 可配置参数 descriptor_length = int(np.log2(num_pairs)) bit_string = '' for _ in range(descriptor_length): p1_x, p1_y = get_random_point_within_patch() p2_x, p2_y = get_random_point_within_patch() intensity_p1 = keypoint_image_patch[p1_y][p1_x] intensity_p2 = keypoint_image_patch[p2_y][p2_x] if intensity_p1 < intensity_p2: bit_string += '0' else: bit_string += '1' return bit_string ``` #### 3. 特征匹配流程 当两个不同视角下的场景被捕捉成图片后,就可以尝试寻找它们之间存在的对应关系——即哪些点在两张照片里指的是同一个物理对象。对于每一对来自源图像和目标图像的关键点及其对应的 BRIEF 描述符: - 计算汉明距离(Hamming Distance),衡量两者之间的相似程度; - 设置阈值筛选出最接近的一组配对作为初步估计; - 利用 RANSAC 算法进一步剔除误匹配项,确保变换矩阵求解时所依据的数据集尽可能纯净可靠。 ```matlab % MATLAB 示例代码演示 Hamming distance 和 RANSAC 流程 function matches = match_features(source_descriptors, target_descriptors) % ...省略部分初始化逻辑... distances = pdist2(double(source_descriptors), double(target_descriptors), @hamming_distance); [~, indices] = min(distances); %#ok<ASGLU> initial_matches = [repmat((1:size(source_descriptors, 1))', 1, 2), indices]; model = fitgeotrans(initial_matches(:, [1, 3]), 'affine'); valid_matches = find(inlierPoints(model)); matches = initial_matches(valid_matches, :); end ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值