优化01值二维矩阵表示物体的边缘极值定位算法问询
算法优化点
你当前方案的核心冗余点集中在多次全局扫描数组、重复检查像素、冗余存储全量坐标、递归逻辑的额外开销几部分,对应的优化方向如下:
- 取消重复全局扫描,改为单次遍历逻辑
你当前每次处理完一个物体后都会重新全局扫描数组寻找剩余的1,大尺寸数组下这部分重复开销占比极高。可以改为两种实现逻辑:要么全程只遍历一次完整数组,遇到未标记的1就启动对应连通分量的处理;要么提前收集所有值为1的坐标存入单独列表,后续仅遍历该列表,跳过已处理的坐标即可,完全不需要反复扫描占绝大多数的0像素。 - 实时计算极值,取消全量坐标存储
你当前需要存储单个连通分量的所有坐标后再遍历求极值,既浪费内存也增加了额外的遍历开销。可以在遍历连通分量的每个像素时,直接同步更新当前分量的x最大值、x最小值、y最大值、y最小值四个变量,不需要存储任何中间坐标,处理完当前分量直接把四个极值存入结果即可。 - 替换现有递归+循环逻辑为迭代式BFS/DFS
你当前的循环逻辑会重复检查已处理像素的邻居,还会出现重复添加坐标的问题,递归实现也存在栈溢出风险。改用迭代的广度优先搜索或深度优先搜索处理连通分量即可:每次从队列/栈取出一个坐标,仅检查其相邻的4或8个位置,仅将未访问过的1像素标记为已处理后加入队列/栈,全程每个边缘像素仅会被处理一次,无任何重复检查开销。 - 可选分块预处理优化
如果你的数组尺寸极大、边缘像素占比极低,可以提前将数组划分为固定大小的块,预先记录每个块中是否存在1像素,后续处理时直接跳过全0块,进一步减少无效扫描的开销。
内容的提问来源于stack exchange,提问作者Owen Burns
相关产品推荐
相关产品推荐

