news 2026/3/28 7:46:01

人工智能之数字生命--工程实践:获取高精度轮廓等信息

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
人工智能之数字生命--工程实践:获取高精度轮廓等信息

先把“双目差异”变成“深度/视差”,再用深度做分割,这样“存在”就变得非常清晰。

推荐流程:双目 → 视差/深度 → 存在掩膜 → 轮廓

  1. 标定 + 极线校正(Rectify)
    没有这一步,后面的视差会非常飘,轮廓会抖,动态更没法做。

  2. 计算视差图(Stereo Matching)
    用 OpenCVStereoSGBM(通常比 BM 好)得到 disparity。

  3. 视差后处理

    • speckle 去噪、median/bilateral
    • 有条件用ximgproc::DisparityWLSFilter会明显更干净
  4. 按深度分割存在(生成存在mask)

    • 近处物体:视差大;远处背景:视差小
    • 用阈值/分段阈值 + 连通域/聚类得到“存在候选”
    • 再用形态学 close/open 填洞
  5. 从mask提轮廓
    findContours得到轮廓;需要更精细就用 depth 边界 + 图像边缘(Canny)做融合细化。


为什么这比“左右做差”更准

  • 左右做差:本质是“视角变化造成的像素不对齐”,会把大量背景纹理误判为前景
  • 视差/深度分割:直接在几何层面把前景(近)和背景(远)分开,对纹理/颜色不敏感,轮廓更闭合、更稳定,后续做“动态”才靠谱

一个可直接落地的 OpenCV C++ 核心示例(存在mask + 轮廓)

// 1) 假设你已经做完标定&校正,拿到了 rectLeft, rectRight (灰度)cv::Ptr<cv::StereoSGBM>sgbm=cv::StereoSGBM::create(/*minDisparity*/0,/*numDisparities*/128,// 必须是16的倍数:64/96/128.../*blockSize*/5);sgbm->setP1(8*1*5*5);sgbm->setP2(32*1*5*5);sgbm->setUniquenessRatio(10);sgbm->setSpeckleWindowSize(100);sgbm->setSpeckleRange(2);sgbm->setDisp12MaxDiff(1);sgbm->setMode(cv::StereoSGBM::MODE_SGBM_3WAY);cv::Mat disp16S;sgbm->compute(rectLeft,rectRight,disp16S);// 2) disparity 转 float(OpenCV 输出通常是 *16 的定点)cv::Mat disp;disp16S.convertTo(disp,CV_32F,1.0/16.0);// 3) 基于视差阈值做“近物体”mask(阈值要结合你的基线/分辨率调)floatnearDispTh=8.0f;// 例:>8 认为更靠近(需要你现场调)cv::Mat mask=disp>nearDispTh;// 4) 去噪&填洞mask.convertTo(mask,CV_8U,255);cv::morphologyEx(mask,mask,cv::MORPH_OPEN,cv::getStructuringElement(cv::MORPH_ELLIPSE,{3,3}));cv::morphologyEx(mask,mask,cv::MORPH_CLOSE,cv::getStructuringElement(cv::MORPH_ELLIPSE,{7,7}));// 5) 连通域过滤掉小碎片cv::Mat labels,stats,centroids;intn=cv::connectedComponentsWithStats(mask,labels,stats,centroids,8,CV_32S);cv::Mat clean=cv::Mat::zeros(mask.size(),CV_8U);for(inti=1;i<n;i++){intarea=stats.at<int>(i,cv::CC_STAT_AREA);if(area>500){// 过滤阈值按分辨率调clean.setTo(255,labels==i);}}// 6) 轮廓std::vector<std::vector<cv::Point>>contours;cv::findContours(clean,contours,cv::RETR_EXTERNAL,cv::CHAIN_APPROX_SIMPLE);

什么时候“左右两张做差”还能用?

只有在你满足这些条件时它才可能“凑合”:

  • 画面很干净、背景纹理少、光照稳定
  • 你先做了极线校正,并且做了某种对应/对齐(否则差异全是错位)
  • 你只想要“可能存在的边界提示”,不追求闭合轮廓

但一旦你要为“动态”服务(连续帧稳定追踪、速度/位移估计、轮廓编码记忆),深度分割几乎是必选项


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/28 11:53:50

力扣(LeetCode) 28: 找出字符串中第一个匹配项的下标 - 解法思

问题概述 给定两个字符串 needle 和 haystack,返回 needle 在 haystack 中第一次出现的下标,如果 needle 不是 haystack 的一部分则返回 -1。 解法 1:暴力匹配带切片(推荐) 工作原理 通过比较子字符串检查 haystack 中每个可能的起始位置: class Solution:def strSt…

作者头像 李华
网站建设 2026/3/27 1:03:42

【开题答辩全过程】以 基于JSP的物流信息网的设计与实现为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人&#xff0c;语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

作者头像 李华
网站建设 2026/3/27 0:54:09

Unity游戏翻译革命:XUnity.AutoTranslator深度解析与实战指南

Unity游戏翻译革命&#xff1a;XUnity.AutoTranslator深度解析与实战指南 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 引言&#xff1a;打破语言壁垒的技术革新 你是否曾因语言障碍而放弃心仪的游戏&…

作者头像 李华
网站建设 2026/3/15 13:48:29

ComfyUI-Manager界面按钮消失问题全解析与解决方案

ComfyUI-Manager界面按钮消失问题全解析与解决方案 【免费下载链接】ComfyUI-Manager 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-Manager 当你在使用ComfyUI进行AI创作时&#xff0c;突然发现Manager按钮从界面消失了&#xff0c;这确实令人沮丧。别担心&a…

作者头像 李华
网站建设 2026/3/27 0:41:30

洛谷 P3367 【模板】并查集

题目背景本题数据范围已经更新到 1≤N≤2105&#xff0c;1≤M≤106。题目描述如题&#xff0c;现在有一个并查集&#xff0c;你需要完成合并和查询操作。输入格式第一行包含两个整数 N,M ,表示共有 N 个元素和 M 个操作。接下来 M 行&#xff0c;每行包含三个整数 Zi​,Xi​,Yi…

作者头像 李华
网站建设 2026/3/27 1:15:42

3步实现C++ HTTP/2性能飞跃:完整指南

在当今高性能Web服务开发中&#xff0c;传统HTTP/1.1协议已成为制约系统吞吐量的关键瓶颈。面对日益增长的并发需求&#xff0c;开发者迫切需要突破单连接串行处理的限制。cpp-httplib作为C领域轻量级HTTP库的佼佼者&#xff0c;通过其独特的header-only设计理念&#xff0c;为…

作者头像 李华