单像素鬼成像技术详解:从Hadamard编码到图像重建工程实践

简介:压缩包内含一套鬼成像(Ghost Imaging)原理的MATLAB仿真源码与实验图样,面向量子光学、计算成像领域的初学者与研究者,用于理解非经典光场关联成像与单像素重建流程。包内共8个文件,累计约2.49MB,以m脚本、fig图形和bmp位图为主,m脚本负责仿真主流程,fig与bmp分别保存可视化中间结果及成像矩阵,便于对照检查每一步运算。目前已有1327人学习下载,适合作为入门验证工具或算法改进平台。运行过程涵盖光子源生成、参考光与探测光分离、物体交互、光子计数、相关性分析直至图像重构,与鬼成像经典实验步骤一一对应;借助源码和结果图,可直观观察散斑场叠加平均、成像矩阵构建等关键环节,既能帮助新手快速建立统计成像直觉,也可供进阶者在此基础上调整参数、测试新策略或验证改进算法。整体结构简洁,便于直接运行与二次开发。

1. 鬼成像(Ghost Imaging)是什么:从单像素探测到图像重建

一个没有镜头、没有面阵传感器的光电二极管,理论上就能“看到”一幅完整的图像。第一次看到这个结论时,很多人以为只是算法玩的把戏,直到我亲手搭出一套单像素鬼成像装置,屏幕上真出现目标轮廓,才意识到这条路在特殊波段成像和多光谱场景里多么值钱。鬼成像(Ghost Imaging,也叫关联成像)的核心想法是:不直接用探测器阵列记录空间分布,而是通过向目标投影一系列已知的照明图案,再用无空间分辨率的桶探测器记录每次的总光强,最后由数学重建还原图像。

这套思路的好处很直接:空间分辨率由照明图案撑起来,探测器只负责“累加光强”。于是近红外、短波红外甚至太赫兹波段,只要有一个单点探测器,就有机会做成成像系统,而不必去买昂贵的大面阵相机。如果你是搞嵌入式光学方案、机器视觉预研或低成本测量设备的人,这篇笔记值得你照着搭一遍,我会把光路、矩阵、时序和踩过的坑一次性说清楚。

2. 先把系统搭起来:鬼成像的光路、器件选型与两种投影策略

2.1 鬼成像的数学本质:桶信号是物体与图案的内积

鬼成像的数学其实是线性代数,不是玄学。设目标物体的透过率分布或反射率分布为 O(x,y),第 i 个照明图案为 A_i(x,y),那么桶探测器测到的总光强 B_i 就是 B_i = Σ A_i(x,y) 乘以 O(x,y),再叠加上噪声项。这里的求和遍历整个照明区域,噪声则是探测器本身和环境光的综合贡献。换句话说,每次测量得到的不是某个像素的灰度,而是图像在图案 A_i 上的一个投影,也就是内积。

如果采集了 M 个图案,就得到 M 个内积值;当 M 不小于图像的像素总数 N 时,这些方程足以把 O(x,y) 解出来。这就是鬼成像能重建图像的数学基础,和“纠缠”没有必然关系,经典光也一样成立。早期实验里用纠缠光子只是因为当时大家以为只有纠缠才能产生这种关联,后来实验室用热光和普通LED都复现过同样效果,工程上完全不需要特意去追求量子源。

工程上更关心怎么把方程组解稳。如果用一组正交基作为照明图案,比如 Hadamard 基,那么重建就是一次矩阵转置乘,速度快、病态程度低。如果用随机散斑,图案之间相关性高,M 常常需要比 N 还大才能得到干净结果,这也是我后来放弃散斑方案的原因。另一个容易被忽略的要点是:桶探测器本身不需要任何空间分辨率,它越“单点”越好,因为这样它的响应速度可以做得很快,线性范围也更好,这正是鬼成像在特殊波段能省钱的根本原因。

2.2 最小硬件系统:光源、调制器、桶探测器与控制链路

一套能跑起来的最小鬼成像系统,常见做法是四个部分串起来:均匀光源、空间光调制器、聚焦光学、单点探测器。光源可以用激光扩束,也可以用高亮LED加散射片;调制器把图案加载上去;调制后的光透过或反射到目标,再由透镜会聚到桶探测器上。控制端需要同时做两件事:把图案刷新到调制器、在图案稳定时读取探测器电压。下面这个表是我给新同事列的最小选型清单:

部件常见选法选型注意
光源激光扩束 / LED+散射片功率稳定,空间均匀性比亮度更重要
空间光调制器数字微镜器件(DMD)、LCOS、改装LCD投影DMD帧率最高,LCOS填充率高,LCD成本最低但慢
会聚单元单个双凸透镜或离轴抛物镜口径要覆盖照明光斑,避免切光
桶探测器PIN光电二极管+跨阻放大,或光电倍增管带宽、线性范围、噪声三者要平衡
采集同步ADC采集卡 / 单片机内部ADC必须由调制器的帧同步信号触发采集

DMD是目前最常用的调制器,二进制图案可以跑到几千赫兹,适合快速采集。LCOS的灰度调制能力好,但刷新率一般只有几十到几百赫兹,适合低速高精度场景。预算有限的阶段,把一台旧LCD投影机拆开改装也能做,只是帧率低、同步要靠软件硬等,我在模拟项目X里就是这么起步的。

新系统搭起来后不要急着跑重建,先用均匀亮场确认照明均匀性,再用一个形状简单的光阑当目标,观察桶信号在每次图案切换时的变化是不是平滑。如果信号出现跳变尖峰,多半是光路里有哪个镜片边缘在切光,或者DMD那块区域本身坏了,这些问题越早查清,后面调参越省事。

2.3 两类投影策略:随机散斑与正交测量基

有了硬件,下一个问题是用什么图案去照目标。最早期也是实验室里最常见的方案是随机散斑:用一个随机图案序列调制光场,桶信号与散斑图案做互相关重建。随机散斑不需要事先设计矩阵,用起来简单,但对随机数的分布、图案之间的相关性非常敏感,实际需要的测量数往往远大于理论采样数,而且重建图像会有明显背景噪声。

另一类是正交测量基,包括Hadamard基、傅里叶基等。它们的优势是图案互相独立,每次测量提供新的信息,不会重复“问同一个问题”。工程上我几乎只推荐Hadamard基,原因有三点:矩阵元素只有+1和-1,用DMD制作图案是天然匹配的二进制操作;任意两行正交,重建方程条件数好;每个图案的能量完全一致,桶探测器不容易出现动态范围来回跳的问题。散斑适合快速验证光路,正交基适合认真做测量系统,这个边界要分清楚。

3. 用Hadamard矩阵做测量编码:生成、排序与差分投影

3.1 为什么工程上选Hadamard:正交性与能量均衡

前面把随机散斑说得比较狠,这里展开讲Hadamard好在哪。先看数学:Hadamard矩阵 H 的阶数是2的幂,元素只有+1和-1,任意两行正交,即 H 乘 H 的转置等于 N 倍单位阵。这意味着当测量数 M 达到像素总数 N 时,重建就是精确解,没有病态问题。即使 M 小于 N,选择低频部分的Hadamard行也能得到一幅平滑的欠采样重建图,这个特性让“先出轮廓、再补细节”的渐进式采集成为可能。

能量均衡是另一个常被忽略的优点。随机散斑图案的平均光强基本相同,但每一个图案的空间分布随机,导致桶探测器输出波动大;Hadamard基每个图案中+1和-1各占一半,如果不考虑差分的两次投影,每次打到目标上的总光强几乎一致,探测器始终工作在比较舒服的线性区间。对模拟链路来说,这能直接降低ADC量程和增益调试的工作量。

投影方式正交性图案能量一致测量数需求工程实现
随机散斑弱相关基本一致往往 > 1.5N随机数生成即可,简单
Hadamard严格正交严格一致约 0.2N~0.5N 可用需要生成矩阵与排序
傅里叶基严格正交不一致约 0.2N~0.5N需要相位调制或四步相移

3.2 用Python生成并排序Hadamard图案

代码来了。下面这段生成一个完整 Hadamard 矩阵,并按 Walsh 序(低频在前)重排行,最后把 +1/-1 拆成两套二值掩模,给DMD直接用。

import numpy as np def hadamard(n): # n 必须是 2 的幂 if n == 1: return np.array([[1.0]]) h = hadamard(n // 2) return np.block([[h, h], [h, -h]]) def sequency_order(H): # 每行符号变化的次数叫 sequency,排序后低频行排在最前面 n = H.shape[0] seq = np.array([np.sum(H[i, :-1] != H[i, 1:]) for i in range(n)]) return H[np.argsort(seq)] k = 12 # 目标像素数 N = 2^k = 4096,对应 64x64 图像 H = hadamard(2**k) H = sequency_order(H) # 低频在前,便于渐进重建 P_pos = (H + 1) / 2 # 掩模 A:+1 的位置透光 P_neg = (1 - H) / 2 # 掩模 B:-1 的位置透光

这段代码的关键在第 9 行的递归构造和第 13 行的 sequency 计算。numpy 自带的 Hadamard 构造是自然序,直接用来采样的效果很差,因为自然序的前几行全是长条条纹,空间频率分布不均匀;按符号变化次数排序后,低频信息在前、高频细节在后,渐进式采样的体验完全不同。

注意 k 的选择。k=12 对应 64x64=4096 像素,完整矩阵是 4096×4096,float64 约 128MB,内存还能接受;P_pos 和 P_neg 也是同样大小,实际峰值内存约 400MB。如果直接上 128x128,像素数 16384,完整矩阵就要 2GB,普通电脑一次生成很吃力。常见做法是把大分辨率拆成若干个小块分别测量,或者用快速 Walsh-Hadamard 变换逐行生成图案,不要试图用这段代码硬怼高分辨率。

3.3 差分投影:正负掩模与直流偏置的消除

Hadamard 矩阵的元素是 +1 和 -1,但光学掩模无法表达“负光强”。把 -1 直接映射成 0 行不行?行,但会在测量里混入一个巨大的直流偏置,而且不同图案的 +1 数量相同,这个直流偏置是常数,理论上可以靠背景扣除消掉,实际却会因为光源波动变成低频噪声。

正确做法是差分投影:对每个 Hadamard 行,准备两个掩模,P_pos 把 +1 的位置翻成开、-1 关掉;P_neg 恰好相反。两次投影得到两个桶信号 B_pos 和 B_neg,二者相减 B = B_pos - B_neg,正好等价于用 +1/-1 构成的完整 Hadamard 行做过一次测量,直流分量被减掉了。

代价是采集时间翻倍,每个基向量要打两帧。换来的好处是重建图像没有恒定背景,对DMD漏光和探测器暗电流也有一定容忍度。我在实际项目中从不省略这一步,省了它,后面的背景扣除和图像增强全都会变成玄学。如果你看到重建图整体偏亮、对比度很差,第一步就去查有没有做差分。

4. 采集到重建:同步时序、参数标定与数值处理

4.1 时序同步:图案稳定后采样,别让ADC赶上微镜翻转

DMD 加载图案有两种工作模式:一种是先把整幅图案加载进内部存储,再触发一次性翻转;另一种是流模式,边加载边显示。不管哪种,微镜从上一幅翻到下一幅都需要时间,典型范围在几十到几百微秒。如果 ADC 在这个翻转窗口里采样,读到的不是 A 图案也不是 B 图案的投影,而是两者混合的中间态,重建出来就是一层鬼影叠加。

所以采集程序的核心逻辑很简单:等图案稳定,再采样。常见做法是使用DMD提供的 pattern ready 同步信号作为 ADC 外触发,或者在每次切换后加固定延时。下面这段伪码描述了我常用的调度流程:

# pattern_ids: 按 sequency 顺序排列的图案索引 for idx in pattern_ids: dmd.load_and_trigger(idx) # 切换到第 idx 个图案 dmd.wait_for_frame_ready() # 等 DMD 的帧同步信号 time.sleep(t_settle) # 再补偿一段稳定时间,防止边沿抖动 voltage = adc.read_average(n_avg) # 对稳定窗口内 n_avg 次采样取均值 save_measurement(idx, voltage)

参数 t_settle 和 n_avg 是调试重点。t_settle 我一般从 100us 起步,看重建图像出现重影就加倍;n_avg 取 8~32,在稳定窗口足够长时尽量多平均,能明显压掉探测器随机噪声。这里有个工程权衡:DMD 帧率固定时,t_settle 越长,n_avg 越大,每帧耗时越长。如果目标是实时预览,就得在精度和速度之间取舍,先让画面能动起来,再慢慢加大参数。

4.2 差分鬼成像重建:Python实现与参数说明

采集完成后手上有两组桶信号:P_pos 对应的 y_pos 和 P_neg 对应的 y_neg。重建分两步,先做差分,再投影回图像空间:

def reconstruct_ghost(H_used, y_pos, y_neg): # H_used: 实际使用的那部分 Hadamard 行,形状 (M, N) y = y_pos - y_neg # 差分解除直流偏置 # 正交基下,转置操作就是逆操作(差一个缩放因子 N) x_vec = (H_used.T @ y) / H_used.shape[1] side = int(np.sqrt(H_used.shape[1])) return x_vec.reshape(side, side)

这段代码只有三行数学操作,但含义要讲清楚。H_used 是 M×N 的矩阵,每行是从完整 Hadamard 矩阵里挑出来的一个基向量;y 是 M 个差分测量值。因为 Hadamard 正交,H 的转置乘以 y 相当于把测量投影回像素空间,除以 N 是为了归一化,得到的结果就是重建灰度。M 等于 N 时这是精确解,M 小于 N 时欠定系统会自动落到最小二乘意义上的解,视觉上表现为低通滤波效果。

如果想进一步压掉背景,可以在差分之前先对 y_pos 和 y_neg 各减掉一个“暗帧”测量值:把光源关掉或把DMD全置0,采集一组背景值,再用 y_pos - dark 来差分。这个操作对抑制环境光特别有效,代价只是每轮标定多测几帧。我一般会在系统启动时自动测一轮暗帧,存成校准文件,换环境后再重新标定。

4.3 采样率与重建质量:设多少测量数才够

一个被问最多的问题是:64x64 图像,到底采多少个图案?完整测量要 4096 个,每个基向量两帧差分,共 8192 帧,按 1kHz DMD 帧率算大约 8 秒,太慢了。实际操作中采样率可以大幅降低。

采样率 M/N主观效果建议
10%只能看到大致轮廓和强边缘适合目标检测前的粗筛
25%主体清晰,细节有模糊大多数静态场景够用
50%接近完整重建,背景较干净推荐日常实验默认值
100%精确线性重建,但耗时最长只有需要最优质量时才用

这个表是我在多次实验里总结的经验值,前提是图案经过了 sequency 排序且使用了差分投影。如果用的是随机散斑,25% 采样率的重建通常比 Hadamard 差一大截,这也是前面坚持用正交基的原因。实际调参时先跑 100% 采样率确认系统没问题,再逐步降采样,找自己的质量拐点。

5. 鬼成像避坑指南:5个最常见的翻车现场与排查方法

5.1 重建图像有条纹或重影,先查投影图案切换

现象:图像主体能看出,但上面叠着一层横向或纵向的条纹,或者边缘有重影。

原因:绝大多数是采样窗口覆盖了 DMD 微镜翻转的中间态。DMD 翻转不是瞬时的,如果 ADC 在图案切换瞬间触发,读到的桶信号是两个图案的混合结果;t_settle 太短也会这样。

解决:先加大 t_settle,从 100us 翻倍到 400us 看是否消失;再把 ADC 触发方式从软件延时改成硬件触发,用 DMD 的 frame_ready 信号同步。改完后用单一均匀图案做自检,桶信号应该是一段平稳直线,如果在切换沿看到毛刺,说明时序还没对齐。

5.2 图像全黑或细节缺失,问题出在差分与背景

现象:重建出的图一片黑,或者只有一个亮斑没有结构,灰度动态范围明显异常。

原因:最常见的是没做差分,直接把 -1 映射成 0 参与重建;其次是环境光没扣除,桶信号里混入常量背景,导致 y 和真值差很远。

解决:回到第三章的差分流程,确认 P_pos 和 P_neg 都采集了,代码里用 y_pos - y_neg 而不是单个信号。然后补一组“暗帧”测量:DMD 全 0、光源正常开,记录暗帧 dark,所有 y 先减 dark 再做差分。处理后如果是光源功率漂移引起的偏置残留,建议加光源监测通道,用比值法修正。

5.3 雪花噪点多,回头调探测器增益和光源

现象:重建图像轮廓清楚,但背景布满随机雪花点,像老电视的雪花。

原因:探测器增益太高,进入非线性区或饱和区;也可能是 ADC 位数不够,量化噪声被放大。DMD 本身是二值调制,重建时高频行对噪声非常敏感,探测器一点点抖动都会变成雪花。

解决:调节跨阻放大倍数,让最大桶信号落在 ADC 满量程的 50%~80%,留出余量;把 n_avg 从 8 提高到 32 观察噪点是否下降。光源方面,给 LED 加恒流驱动而不是直接接电源,DMD 散热风扇的振动也会让桶信号抖动,检查光机固定是否稳。

5.4 高分辨率图没有高细节,是采样率撑不起来

现象:DMD 每帧显示 1024x768 的图案,重建也输出 1024x768,但图像细节和 128x128 差不多,纯属自欺欺人。

原因:空间分辨率不取决于图案显示分辨率,而取决于独立测量次数 M。M 只有 1000 时,相当于用 1000 个方程解 78 万个未知数,欠定到没法谈细节,高频部分全是伪影。

解决:要么把 M 提高到数万帧,要么把目标区域切分成 64x64 的小块逐个重建再拼接。第二种做法在工程上很实用,我一般先锁定目标 ROI,只对 ROI 做高分辨率重建,既省时间又能保证细节。

5.5 图像被“撕开”或错位,查触发同步与丢帧

现象:重建图上下或左右错位,像一个完整图像被平移后拼接起来,有时伴随明显分界线。

原因:采集端和调制端不同步,丢了若干帧,或者触发沿检测失败,导致图案索引和桶信号对不上号。DMD 流模式丢帧后不会通知应用层,问题藏得很深。

解决:在图案序列前端加一条特殊同步帧,比如全亮一帧、全暗一帧作为帧头;采集端检测到帧头后再开始建立索引,并实时检查帧计数连续。如果用的是外部触发,用示波器确认 pattern_ready 和 ADC 采样信号沿的时间关系。

6. 进阶:压缩感知与实时鬼成像,让速度再上一个台阶

6.1 压缩感知:把采样压到10%以内

当图像在某个变换域稀疏时,不必等采样率达到50%,用随机选择的 Hadamard 行配合 TV 正则化重建,就能在10%~15%采样率下恢复出不错的细节。TV 正则适合轮廓分明的物体,重建时间从毫秒级到秒级。对静态场景,这个方向可以显著缩短采集时间;对运动场景,关键就不是算法而是硬件帧率了。

6.2 深度展开网络:把测量矩阵变成网络第一层

另一个值得投入的方向是学习式重建。把 P_pos / P_neg 的测量过程视为一个固定线性层,后面接卷积重建网络,用一批域内数据训练端到端模型。一次前向重建只要几毫秒,明显快过迭代优化。注意训练集必须和实际目标域匹配,否则重建出的“伪清晰”会误导判断。

6.3 低频优先排序:边采集边预览的工程技巧

如果只是想快速看到画面,利用 sequency 排序的特性就够了:先送低频图案,用前 5% 的测量数重建出平滑轮廓,再逐渐补高频图案细化。最常见的做法是把采集和重建放在两个线程里,每攒 10% 数据就重建一次。我现在的实验习惯是先用 25% 采样率做一次快速预览,确认目标和光路没问题,再决定是否补全套测量,这套习惯帮我躲过了好几次环境光突然变化的返工。

鬼成像真正考验人的地方从来不是数学,而是时序和光路。把这些基础打好,再去上压缩感知和深度学习,你会发现高级算法只是放大器,不能替你把基础的本底噪声消掉。希望帮到你。

本文还有配套的精品资源,点击获取

相关新闻

AI Agent架构对比:OpenClaw与OpenCode的编排与上下文设计

AI Agent架构对比:OpenClaw与OpenCode的编排与上下文设计

1. 从两个开源项目看 AI Agent 的架构分野1.1 为什么拿这两个项目做对比OpenClaw 和 OpenCode 这两个名字放在一起,乍看像是同一赛道的竞品,但真正把源码拉下来跑一遍就会发现,它们对“AI Agent 应该长什么样”这件事的理解,从根上…

2026/10/20 18:42:45 阅读更多 →
Linux 下 QCefView 入门:从零跑通第一个窗口到 C++ 与 JS 双向通信

Linux 下 QCefView 入门:从零跑通第一个窗口到 C++ 与 JS 双向通信

简介:这份资源围绕 Linux 平台下 QCefView 的简单运用展开,面向需要在 Qt 项目中嵌入 Chromium 内核浏览器的 C 开发者,尤其适合刚接触 CEF 与 QCefView 集成、希望快速跑通最小可运行示例的中级学习者。压缩包共 85 个文件,约 26…

2026/10/20 18:42:45 阅读更多 →
从物质波到波包:量子力学中的粒子波动性与光学类比

从物质波到波包:量子力学中的粒子波动性与光学类比

研究生阶段第一次翻开量子力学2的讲义,看到"物质波与物质粒子"这个专题时,我第一反应是:这内容本科不是讲过吗,波粒二象性嘛,怎么到了研究生课还要单列一章?真正跟着课程把这一章啃完之后我才明白…

2026/10/20 18:41:44 阅读更多 →

最新新闻

AI Agent成本结构全解析:从API调用费到隐性人力的完整账本

AI Agent成本结构全解析:从API调用费到隐性人力的完整账本

先说一个我最近复盘的真实项目。某电商团队上线了一个订单查询与退换货的客服 Agent,第一周看账单,推理费一天几百块,负责人很高兴,觉得这玩意儿比招人划算多了。三个月后做财务复盘,把所有配套成本拉出来一算&#xf…

2026/10/20 21:19:04 阅读更多 →
7825张车身缺陷检测数据集:VOC+YOLO双格式标注与YOLOv5训练实践

7825张车身缺陷检测数据集:VOC+YOLO双格式标注与YOLOv5训练实践

简介:面向车身部件损坏与车体缺陷检测的VOCYOLO双格式数据集,对应7825张车辆图像的缺陷标注,涵盖划痕、凹陷、裂缝、破损、褪色等15类常见问题,可直接用于YOLO系列、Faster R-CNN等目标检测模型的训练与评估,服务汽车制…

2026/10/20 21:19:04 阅读更多 →
OpenClaw基于概念的解释:TCAV原理、实践与工程坑

OpenClaw基于概念的解释:TCAV原理、实践与工程坑

模型解释性最近几年都快被聊烂了,但每次有人跑来问我“OpenClaw 能不能做基于概念的解释”,我还是会一下子精神起来。这个问题问得比“你模型准确率多少”有价值多了,因为它背后真正想说的是:模型做判断的理由,能不能用…

2026/10/20 21:19:04 阅读更多 →
TensorFlow 2 复现 Facenet:MTCNN 对齐与三元组损失实战

TensorFlow 2 复现 Facenet:MTCNN 对齐与三元组损失实战

1. 为什么我最终选了 TensorFlow 2 来复现 Facenet1.1 从一次“翻车”的考勤机项目说起前两年我接了一个小活儿,帮一个做企业内训的朋友搞一套“刷脸签到”的演示系统。需求听起来不复杂:员工站在摄像头前,系统认出是谁,自动打勾。…

2026/10/20 21:19:04 阅读更多 →
上下文模式实战:从设计到落地的架构决策与避坑指南

上下文模式实战:从设计到落地的架构决策与避坑指南

1. 从“上下文模式”说起:一个被低估的架构决策第一次看到“context-mode”这个词,很多人会下意识觉得它是个抽象得没边儿的概念——上下文嘛,不就是程序运行时的环境变量、线程本地存储、或者某个框架里的配置对象?但如果你真的在…

2026/10/20 21:19:04 阅读更多 →
STM32智能台灯毕业设计:从硬件选型到PID调光完整实战

STM32智能台灯毕业设计:从硬件选型到PID调光完整实战

简介:本资源为嵌入式方向本科毕业设计「智能台灯」的完整开发套件,面向电子工程、自动化及物联网相关专业学生,解决智能硬件从原理设计到系统落地的全流程实践需求。压缩包含140个文件,总大小162.69MB,涵盖33张硬件调试…

2026/10/20 21:18:02 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/20 20:43:59 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →