You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何利用空间滤波与矩阵运算识别迷宫图像的交点与端点

迷宫图像交点(红点)与端点(蓝点)识别方案(空间滤波+矩阵运算)

迷宫示例

一、图像预处理:二值化转换

先将迷宫图像转换为二值矩阵:把黑色路径像素设为1,白色背景设为0,得到尺寸为H×W的矩阵M。可以用OpenCV的工具快速实现:

import cv2
import numpy as np

img = cv2.imread("maze.png", 0)
_, binary_img = cv2.threshold(img, 127, 1, cv2.THRESH_BINARY_INV)
M = np.array(binary_img)

二、邻域连通数计算(空间滤波核心)

交点和端点的本质区别是邻域内连通的路径数量,我们用3×3滑动窗口(空间滤波)批量统计每个路径点的连通数:

  1. 设计全1卷积核K = np.ones((3,3)),对二值矩阵M做卷积运算,得到每个点的3×3邻域像素和矩阵S
  2. 连通数矩阵C = S - M:减去当前点自身的1,得到邻域内其他路径点的数量

这一步的卷积运算等价于手动滑动窗口统计,但效率更高,适合批量处理大尺寸图像。

三、交点与端点的判定规则

遍历连通数矩阵C,结合原二值矩阵M(确保是路径点):

  • 端点(蓝点):当C[i][j] == 1且M[i][j] == 1时,该点是端点(仅1个方向连通)
  • 交点(红点):当C[i][j] >= 3且M[i][j] == 1时,该点是交点(3个或4个方向连通)

四、结果可视化

将识别出的点标记到原图像上:

# 读取彩色原图用于标记
color_img = cv2.imread("maze.png")

# 遍历矩阵标记点
for i in range(M.shape[0]):
    for j in range(M.shape[1]):
        if M[i][j] == 1:
            if C[i][j] == 1:
                # 标记蓝点(端点)
                cv2.circle(color_img, (j, i), 3, (255, 0, 0), -1)
            elif C[i][j] >= 3:
                # 标记红点(交点)
                cv2.circle(color_img, (j, i), 3, (0, 0, 255), -1)

cv2.imwrite("marked_maze.png", color_img)

内容的提问来源于stack exchange,提问作者Yixuan Liu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 11:54:24