一套为硬件加速设计的经典边缘检测流水线(一)----查找表作用
目录
0 LUT作用概述
1. 明确:3×3 窗口 = 512 种 “图案”
2. 核心原理:
0 LUT作用概述
LUT 里的值是人为预先定义的,你想让它干什么,它就干什么。
这句话的真正原理:
LUT 本质 = 把所有 3×3 的图案,全部提前 “判决” 好
3×3 二值窗口一共只有512 种可能你提前把每一种图案应该输出 0 还是 1 全部写死在表里运行时,硬件只需要:看到图案 → 查表 → 直接输出结果
LUT 的功能 = 你写入的内容
- 写入 “去噪规则” → LUT 就是去噪器
- 写入 “补洞规则” → LUT 就是补洞器
- 写入 “细化规则” → LUT 就是边缘细化器
- 写入 “角点规则” → LUT 就是角点检测器
- 写入 “交叉线规则” → LUT 就是交叉线检测器
同一个硬件电路,不改电路,只改 LUT 内容,功能完全变。
这就是硬件图像处理里最强的一句话:
算法 = LUT 内容
1. 先明确:3×3 窗口 = 512 种 “图案”
9 个像素,每个 0/1总组合数 = 2⁹ =512
每一种组合,都是一个小图案,比如:
图案 A(孤立噪点)
0 0 0 0 1 0 0 0 0→ 对应一个地址(比如 addr=16)
图案 B(边缘缺口)
1 1 1 1 0 1 1 1 1→ 对应另一个地址(比如 addr=255)
图案 C(横线)
0 0 0 1 1 1 0 0 0→ 又一个地址
……
所有 512 个图案,每个都有唯一地址。
2. 核心原理:
提前告诉 LUT:每种图案应该输出什么
LUT 是一个存储器:
- 地址:0~511(对应 512 种图案)
- 数据:1 bit(0 或 1)
在算法设计阶段,手动 / 程序生成这 512 个值:
举例 1:想做 “去孤立点”
你看到图案:
0 0 0 0 1 0 0 0 0你希望它变成 0,于是:
LUT[地址] = 0;举例 2:想做 “补洞”
看到图案:
1 1 1 1 0 1 1 1 1你希望中心补成 1,于是:
LUT[地址] = 1;