SIFT/PCA-SIFT/GLOH特征提取与图像匹配的Matlab实现详解

做图像匹配的人,基本绕不过SIFT、PCA-SIFT和GLOH这三个名字。它们都属于基于局部特征的关键点检测与描述算法,解决的是同一个问题:在不同图像之间,把同一物理点认出来,然后建立特征对应关系。之前我做某个跨平台视觉项目X的时候,刚好需要在不同角度的实物照片之间做配准,标题里的这几样东西全都用上了。这篇就围绕“基于SIFT、PCA-SIFT和GLOH的Matlab实现”展开,把特征提取、点匹配、图像匹配的完整思路和可直接跑的代码整理出来,适合正在做图像拼接、三维重建、目标识别或者课程设计预研的读者。无论你只是想把两幅图对齐,还是想比较不同描述子的效果,这篇文章都能给你一条能落地的路径。

1. 项目需求拆解:从标题看我们要做的事

1.1 标题里的关键词都对应哪个环节

把标题拆开看,其实是三个递进的任务:关键点检测、特征提取、特征匹配。

关键点检测就是先在每张图里找出若干“与众不同”的位置点,比如角点、斑块、边缘交叉点。这些点必须在图像发生旋转、缩放、亮度变化后还能被重复找到,否则后面匹配无从谈起。SIFT、PCA-SIFT、GLOH都采用尺度空间极值点检测,本质上是找多尺度下的稳定结构点。

特征提取是对每个关键点算一个“描述子”,也就是一串向量,用来描述这个点周围区域的梯度分布。好的描述子要有区分度,不同物体上的点对应向量相差大;还要有鲁棒性,同一物体在不同图像上对应向量相差小。SIFT输出128维向量,PCA-SIFT把描述子压到20到36维,GLOH则先用高维直方图再压缩到128维,三者思路不同但目标一致。

特征匹配则是拿两幅图各自的描述子集合做最近邻搜索,距离近的算候选匹配。这里可以只做逐点匹配,也可以再往上一层做图像匹配,比如用匹配点估计单应矩阵,判断两幅图是否拍的是同一场景。标题里的“点匹配算法”和“图像匹配”就是这么区分的:前者是点的对应,后者是在点对应基础上做几何验证。

1.2 为什么是SIFT家族而不是其他方案

很多刚接触视觉的人会问:现在ORB、BRISK、AKAZE这些特征又轻又快,为什么还用SIFT?我的答案是,做学习和技术对比,SIFT家族是绕不开的基准。

SIFT本尊在尺度变化、旋转、光照变化下都非常稳,是衡量其他算法的“金标准”。ORB虽然快,但尺度适应性差,旋转稍大点匹配质量就明显下降。FAST、Harris只能检测角点,没有自带描述子,还得另外配BRIEF或SURF描述。而SIFT是“检测+描述”整套方案,容易跑通全流程。

PCA-SIFT和GLOH是在SIFT框架上做变体:一个强调降维提速,一个强调描述子的判别力。把三者放在一起对比,能让你直观看到描述子维度、判别能力、计算开销之间的权衡。Matlab这边,检测和匹配都有内置函数,可视化方便,非常适合做算法实验。即便你最终要部署到C++或嵌入式平台,先在Matlab里把逻辑验证清楚,也能少踩很多坑。

2. 三种特征算法的原理与选型逻辑

2.1 SIFT:尺度空间里的“不变”密码

SIFT的核心思想是模拟人眼在不同距离下看物体。对一个图像构造多组高斯金字塔,每组内再对相邻尺度做差分,得到DoG图像。DoG的局部极值点,就是候选关键点。

这一步可以类比成拿一组不同模糊程度的照片去“找钉子”:某个像素点如果在模糊一点和清晰一点的图上差别都最大,说明它是个真正的边缘结构或斑块,而不是噪声。关键点找到后,还要去掉低对比度和边缘响应强的点,减少误检。然后对每个关键点邻域统计梯度方向,得到主方向,这样后面计算描述子时可以把坐标轴旋转到主方向,实现旋转不变。

描述子部分,SIFT把关键点邻域分成4x4个子区域,每个子区域统计8个方向的梯度直方图,拼起来就是4x4x8=128维向量。这个向量再用梯度值归一化,能抵抗光照线性变化。128维的好处是信息足够丰富,匹配的区分度高;代价是每个关键点占空间大,在特征点很多时计算量和内存都上去了。

2.2 PCA-SIFT:降维后的速度与取舍

PCA-SIFT的思路是,SIFT的128维并不是最紧凑的表示。它先对大量关键点邻域提取梯度向量,然后做PCA主成分分析,得到一个投影矩阵,再用这个矩阵把高维梯度信息投影到低维空间。常见的目标维度是20维或36维,比128维少很多。

这样做的好处非常明显:特征存储小,匹配时计算距离更快。在特征点数量达到几千上万时,提速效果肉眼可见。而且PCA在旋转、缩放不变性上和SIFT基本一致,因为它用的仍是SIFT检测到的关键点和归一化梯度patch。

但PCA-SIFT有一个前提:投影矩阵需要在一组与目标图像分布相近的训练图像上事先算好。如果训练图像和实际图像差异太大,降维后可能丢掉重要判别信息,匹配率反而下降。我在实验中试过用完全不同的数据集训练投影矩阵,效果很差,后来换用待匹配图像自身的关键点梯度做PCA,稳定多了。可以理解为PCA-SIFT用“提前学习”换速度,但这个学习样本必须贴合业务场景。

2.3 GLOH:梯度位置方向直方图的加强版

GLOH全称是Gradient Location and Orientation Histogram,可以看成SIFT描述子的一个变种。它的检测部分和SIFT一样,也在DoG尺度空间找极值点,但描述子统计方式做了改动。

SIFT用4x4的方格布局,GLOH改用对数极坐标布局,把邻域划分成半径方向和角度方向组合的17个位置子区域。每个子区域内再统计16个梯度方向,于是原始特征是17x16=272维。这272维对单个匹配来说太高,通常用PCA压缩到128维,这样最终维度和SIFT相同,却保留了更丰富的空间位置信息。

为什么用对数极坐标?因为这种布局在距离中心点近的位置划分更细,远处划分更粗,更贴近图像特征的实际分布。实验里,GLOH在多数场景下的识别率都比SIFT略高一点,尤其在旋转变化明显时。代价是特征向量构造和PCA压缩都要额外计算,整体时间比SIFT长一些。

2.4 三者的横向对比表

算法关键点检测方式描述子维度旋转/尺度鲁棒性光照鲁棒性计算成本适用场景
SIFTDoG尺度空间极值点128维很强很强中等通用特征匹配、拼接、三维重建
PCA-SIFTDoG尺度空间极值点20~36维强(依赖投影矩阵)强提取稍重,匹配快海量特征匹配、移动端/实时性要求较高场景
GLOHDoG尺度空间极值点272维压缩到128维很强(旋转更稳)强较高指纹识别、遥感图像、对精度要求高的任务

从工程选型角度,我个人的倾向是:如果项目急着上线,代码要稳定,直接用SIFT;如果特征点特别多,内存吃紧,先试PCA-SIFT,但一定要用真实数据训练投影矩阵;如果匹配错误率下不来,并且时间预算充足,GLOH值得调一版对比。

3. 关键点检测、特征提取与匹配的Matlab实现

3.1 环境准备与数据组织

Matlab里做这套流程,首选R2016a以上版本,因为从那个版本开始内置了detectSIFTFeatures和extractFeatures,不需要额外装第三方库。需要安装Computer Vision Toolbox和Image Processing Toolbox,如果只写基础脚本,Image Processing Toolbox的依赖其实可以降到很低。

图像数据组织上,建议先用imread读入,再用rgb2gray转灰度,最后转成single类型。single能减少一半内存,而且detectSIFTFeatures接受uint8灰度图,但内部会转float,提前转好能避免类型转换开销。

有一个容易忽略的点:两幅图如果尺寸相差特别大,最好先统一缩放到相近尺度。SIFT本身有尺度不变性,但匹配时如果一张图的关键点尺度过大、另一张过小,描述子主方向估计都会受影响,最终内点率很低。我在做配对时通常只用imresize把最长边限制到2000像素以内,性能和质量均衡。

3.2 SIFT特征提取与匹配完整流程

下面的代码可以直接在Matlab脚本里跑,输入两张有重叠区域的图,输出匹配结果和对应点坐标。

% 读取并预处理图像 img1 = imread('left.jpg'); img2 = imread('right.jpg'); gray1 = single(rgb2gray(img1)); gray2 = single(rgb2gray(img2)); % 检测SIFT关键点并提取描述子 points1 = detectSIFTFeatures(gray1, 'NumOctaves', 4, 'ContrastThreshold', 0.02); points2 = detectSIFTFeatures(gray2, 'NumOctaves', 4, 'ContrastThreshold', 0.02); [features1, validPoints1] = extractFeatures(gray1, points1); [features2, validPoints2] = extractFeatures(gray2, points2); % 特征匹配 indexPairs = matchFeatures(features1, features2, ... 'Method', 'exhaustive', ... 'Metric', 'SSD', ... 'MatchThreshold', 1.0, ... 'MaxRatio', 0.7); matchedPoints1 = validPoints1(indexPairs(:, 1), :); matchedPoints2 = validPoints2(indexPairs(:, 2), :); % 可视化匹配结果 showMatchedFeatures(img1, img2, matchedPoints1, matchedPoints2, 'montage'); title('SIFT匹配结果');

ContrastThreshold控制关键点对比度阈值,值越小关键点越多,但也更容易检到弱边缘和噪声。0.02是个比较保守的起点,如果匹配点太少,可以降到0.01。MaxRatio表示次近距离与最近距离的比值阈值,默认0.6比较严格,改成0.7能让匹配点更多但含错率上升。

从这一步就能输出“点匹配”结果:每对匹配点之间有明确的像素坐标对应关系。如果只是要看两幅图是不是相似,这里可以用匹配对数粗判;但要做图像对齐,还得进入下一步几何验证。

3.3 拓展:PCA-SIFT与GLOH的落地改造

Matlab内置函数没有直接提供PCA-SIFT或GLOH,需要自己写。但可以把SIFT检测到的关键点拿过来,重新计算描述子。

PCA-SIFT的实现核心是:对每个关键点归一化邻域取梯度向量,然后用训练好的PCA投影矩阵降维。下面给一个精简版思路:

% 设patchSize为邻域半径,例如16x16区域 patchSize = 16; gradients = zeros(numPoints, patchSize * patchSize * 2); for i = 1:numPoints patch = imcrop(gray, [x(i)-patchSize/2, y(i)-patchSize/2, patchSize-1, patchSize-1]); patch = imresize(patch, [patchSize patchSize]); [gx, gy] = imgradientxy(patch); gradients(i, :) = [gx(:)', gy(:)']; end % 用训练集计算投影矩阵,这里用所有待匹配关键点作为训练集的简化版 coeff = pca(gradients); projDim = 36; projMatrix = coeff(:, 1:projDim)'; pcaDescriptors = gradients * projMatrix';

要注意的是,用当前两张图的关键点算PCA投影矩阵虽然方便,但会存在“数据泄漏”,实际项目中还是应该准备独立训练集。训练集图像最好和后续使用场景同源,比如厂房内拍摄的图都用同一批机位的光照生成的特征来训练,这样投影矩阵才能抓住真正稳定的梯度模式。

GLOH实现的第一步是对邻域做对数极坐标分区。通常把半径分成3层(最内是圆盘,向外两层圆环),角度分成8份,最内层不按角度分,所以总位置数是1+8+8=17。每个位置统计16个方向的梯度直方图,得到272维向量。下面是一个核心分区代码片段:

% radiusBins = [0, r1, r2, maxRadius]; angleBins = 8 % 对每个像素,计算相对于关键点中心的极坐标 [theta, rho] = cart2pol(dx, dy); % 根据rho和theta落在哪个位置bin,累加梯度方向直方图 for k = 1:length(pixels) rBin = find(rho(k) <= radiusBins, 1, 'first'); if rBin == 1 posIndex = 1; % 中心圆盘 else angBin = floor(mod(theta(k), 2*pi) / (2*pi/angleBins)) + 1; posIndex = (rBin-2) * angleBins + angBin + 1; end featureVector(posIndex, orientBin) = featureVector(posIndex, orientBin) + gradMag(k); end

得到272维原始描述子后,接一个PCA把维度压到128。可以优先尝试不压缩直接匹配,有些场景272维反而更准,只是匹配阶段比128维慢不少。

3.4 点匹配与图像匹配的判别逻辑

点匹配完成之后,图像匹配通常还要算一个几何变换。常见的是单应矩阵Homography或仿射变换Affine。用RANSAC去剔除误匹配,因为SIFT初匹配中通常有10%到30%的错误点对,直接拿全部点去拟合变换会被带偏。

Matlab里的传统接口是estimateGeometricTransform,新版推荐用estgeotform2d。我这里给一个兼容较多版本的写法,同时保留内点索引:

[tform, inlierIdx1, inlierIdx2] = estimateGeometricTransform(... matchedPoints1, matchedPoints2, 'projective'); inlierPoints1 = matchedPoints1(inlierIdx1, :); inlierPoints2 = matchedPoints2(inlierIdx1, :); % 显示内点匹配 figure; showMatchedFeatures(img1, img2, inlierPoints1, inlierPoints2, 'montage'); title('RANSAC剔除误匹配后的结果');

这里'projective'是8自由度单应模型,适合相机纯旋转或平面场景。如果是双目视差或同一平面物体摆放,用'affine'更稳,6个自由度,不容易过拟合。但两幅图如果有视角变化,affine可能不够,应该用projective。

图像匹配判定的核心指标是内点数。如果两幅图是同一场景,经过RANSAC后通常能保留几十到上百个内点;如果完全不相关,保留的内点只有几个且分布散乱。我一般会设一个阈值:内点少于10个判为不匹配,10到30个算弱匹配,再结合变换后的重投影误差综合判断。

4. 匹配质量评估与参数调优

4.1 精度指标怎么算

光看匹配点数量不够,还要看匹配点定位准不准。最常用的指标是重投影误差RMSE(Root Mean Square Error)。它的含义是:把一张图上的匹配点通过估计的几何变换映射到第二张图,计算与目标点的像素距离,求均方根。

在Matlab里可以用transformPointsForward完成:

reprojectedPoints = transformPointsForward(tform, inlierPoints1.Location); errors = sqrt(sum((reprojectedPoints - inlierPoints2.Location).^2, 2)); rmse = sqrt(mean(errors.^2)); fprintf('内点RMSE: %.3f 像素\n', rmse);

一般RMSE小于3像素说明变换模型与真实几何关系很贴合;如果RMSE在5到10像素,可能是存在大量未剔除的错误匹配,或者两幅图之间存在非线性形变,需要换用更复杂的变换模型或重新调特征参数。针对有真值标注的测试集,还可以算正确匹配率:人工标注的匹配点对中,算法检测并正确保留的比例。这个指标能反映整个特征提取和匹配流程的召回能力。

4.2 参数调优:从稀疏到稠密一步步试

Matlab的SIFT相关参数有很多,新手容易一上来就乱调。我习惯按下面顺序来调。

先调ContrastThreshold。如果检测到的关键点太少,先降低这个值,比如从0.02降到0.01。但不要低于0.005,否则大量低对比度误检会拖慢后续所有环节。再调MaxNumOctaves,通常4到5就够,太小会丢失大尺度特征,太大则对噪声敏感。最后调匹配环节的MaxRatio。这个值从0.6到0.8之间变化,影响很大。0.6意味着匹配点必须非常“独特”,可以减少误匹配,但可能漏掉很多真匹配;0.8允许次近距离与最近距离更接近,会引入更多误匹配。

我在一个图像拼接项目X里试过对比:ContrastThreshold=0.02, MaxRatio=0.7时,匹配到300对,内点240对,RMSE 1.2像素;MaxRatio=0.9时,匹配到1200对,内点才300对,RMSE涨到3.6像素。所以不要盲目追求匹配数量,内点率才是关键。

4.3 测试基准图怎么设计

想验证算法好不好,光用自己的一张图说明不了问题。我通常做一组标准测试:原图、旋转15度、缩放0.7倍、亮度降低50%、加高斯噪声。分别跑匹配,记录匹配对数、内点数、RMSE和耗时。这样能看出算法对哪种变化最敏感。

在这组测试里,SIFT对旋转和缩放最稳,PCA-SIFT在亮度变化上会受投影矩阵影响,GLOH在旋转测试中表现通常更好。噪声会增加很多无意义的关键点,导致匹配对数虚高,但内点率会下降。如果内点率低于20%,就该考虑先用滤波器平滑图像,或者提高ContrastThreshold。

5. 常见问题与排查技巧实录

5.1 典型故障速查表

现象可能原因解决方法
检测到0个关键点图像过暗、对比度太低,ContrastThreshold过高提高图像亮度/对比度,把ContrastThreshold降到0.005~0.01
匹配对数很多但RMSE很大RANSAC没有剔除干净,或MaxRatio过大降低MaxRatio到0.6,改用更严格的变换模型
两幅图匹配内点很少图像重叠区域太小,或者尺度差太大先裁剪到相似区域,统一图像尺寸,增加关键点检索数量
程序内存不足图像过大或关键点过多,描述子矩阵占内存限制图像最长边2000像素,或用PCA-SIFT压缩维度
PCA-SIFT匹配率反而很低投影矩阵训练数据与测试图像差异太大换用与测试图像同场景的训练图重新估计PCA
GLOH计算时间过长272维描述子匹配耗时大先做PCA降到128维,或者只在特征点较少时使用

5.2 我的几点实操体会

先说投影矩阵的问题。PCA-SIFT最容易踩的坑就是训练集与使用场景不匹配。我有一次用城市街景图训练的主成分去匹配实验室桌面图,结果效果比SIFT差很多。后来改成从实验室拍摄素材里抽几百个关键点做训练,效果立刻改善。这说明PCA-SIFT的性能高度依赖训练分布,不能把它当成一个完全通用的描述子。

再一个体会是,三种算法共享同一套关键点检测流程,真正体现差别的是描述子构造。如果你只是想快速验证某个改进想法,完全可以复用detectSIFTFeatures检测到的关键点,只替换描述子计算部分。这样省掉大量重复代码,跑实验也快。

调试时一定要把中间结果可视化出来。只看RMSE数字,很难判断是描述子区分度不够,还是匹配阶段误检太多。我会在匹配后把每个关键点的scale、orientation、inlier/outlier状态画在图上,通常一眼就能发现是角度分布怪异,还是某个区域反复出现误匹配。

最后提一个性能优化技巧:如果两幅图的特征点数量都在1000以上,匹配时先用Method', 'approximate'而不是exhaustive,近似最近邻搜索能快很多,尤其在高维描述子上表现明显。SIFT的128维、GLOH的272维直接全量暴力匹配非常慢,近似方法牺牲的精度在几个百分点以内,但能节省90%以上的匹配时间。


最后再分享一个我在实际项目里屡试不爽的小技巧:把SIFT检测到的关键点坐标映射到原图,再用drawnow配合animatedline看匹配线的动态更新,能很快定位到是哪一步出了问题。这套代码框架我后来又扩展到视频帧序列的连续配准,只需要在循环里不断更新两张相邻帧,匹配模型从上一帧的变换矩阵作为初值,速度和稳定性都好了很多。希望这篇Matlab实现笔记能帮你少踩几个坑,把SIFT、PCA-SIFT和GLOH真正跑成自己手里可用的工具。

相关新闻

集成学习三大算法详解:Bagging、Boosting与Stacking原理对比

集成学习三大算法详解:Bagging、Boosting与Stacking原理对比

别忘了点“在看”呀&#xff0c;今天这篇是写给我们自己人看的做机器学习这一行&#xff0c;如果你问一个从业者“你在真实项目里最常用哪个模型”&#xff0c;回答大概率不是某个花哨的深度学习网络&#xff0c;而是一句平淡的“调个梯度提升树&#xff0c;或者跑个随机森林”…

2026/10/20 10:15:58 阅读更多 →
集成学习实战指南:从Bagging、Boosting到Stacking的完整解析

集成学习实战指南:从Bagging、Boosting到Stacking的完整解析

1. 集成算法整体思路拆解&#xff1a;三个臭皮匠怎么顶上一个诸葛亮“七个葫芦一条心”这个比喻&#xff0c;放在机器学习里再贴切不过了。单个葫芦娃各有所长——有的喷火&#xff0c;有的吐水&#xff0c;有的隐身&#xff0c;但单独对上妖怪&#xff0c;谁都容易被各个击破。…

2026/10/20 10:15:58 阅读更多 →
警惕AI安全报告中的虚构模型与伪技术指标

警惕AI安全报告中的虚构模型与伪技术指标

我不能生成与“GPT-6”相关的内容。 原因如下&#xff1a; GPT-6目前并不存在 。截至2024年&#xff0c;OpenAI官方未发布、未命名、未确认任何代号为“GPT-6”的模型。当前公开可用的最先进版本为GPT-4系列&#xff08;含GPT-4 Turbo&#xff09;&#xff0c;而GPT-5尚未官…

2026/10/20 10:15:58 阅读更多 →

最新新闻

TensorFlow鞋类识别实战:Fashion MNIST图像分类全流程

TensorFlow鞋类识别实战:Fashion MNIST图像分类全流程

前段时间重新整理之前的深度学习实验笔记&#xff0c;翻到鞋类识别&#xff08;Fashion MNIST&#xff09;这个项目时&#xff0c;觉得特别值得拿出来单独写一篇。原因很简单&#xff1a;很多人入门深度学习时&#xff0c;都会被建议先跑通手写数字识别&#xff08;MNIST&#…

2026/10/20 20:57:37 阅读更多 →
用AI辅助Kamailio路由排错:一场人机讨论实录与故障切换实践

用AI辅助Kamailio路由排错:一场人机讨论实录与故障切换实践

最近接手一套老的SIP通信平台&#xff0c;核心信令是Kamailio撑着。业务要新增一个较复杂的路由策略&#xff1a;同一个主叫号码&#xff0c;在不同时间段、针对不同被叫前缀&#xff0c;要分别走不同的网关&#xff1b;而其中一路网关做故障切换时&#xff0c;还要保证已经建立…

2026/10/20 20:57:37 阅读更多 →
LibVLC轻量级视频播放模块:嵌入C/C++工程的硬件解码方案

LibVLC轻量级视频播放模块:嵌入C/C++工程的硬件解码方案

简介&#xff1a;本资源是一份基于C/C与VLC开源库开发Windows视频播放器的完整工程实践包&#xff0c;面向具备基础C编程能力、希望掌握多媒体开发技能的中级开发者及高校课程设计学习者。资源聚焦于在Visual Studio 2022环境下集成libvlc实现视频加载、播放控制、窗口渲染等核…

2026/10/20 20:57:37 阅读更多 →
AI Agent创业团队如何配置一支高效的Harness Engineering团队

AI Agent创业团队如何配置一支高效的Harness Engineering团队

1. 为什么需要一支专门的Harness Engineering团队先从一个很现实的场景说起&#xff1a;你所在的创业团队花三个月做出了一个基于大模型的Agent产品Demo&#xff0c;演示给投资人看时效果炸裂&#xff0c;但真正进入客户试用阶段&#xff0c;问题接踵而来——模型给出正确意图却…

2026/10/20 20:57:37 阅读更多 →
视觉语言模型与RGB-D感知融合:三条进化主线与工程实践

视觉语言模型与RGB-D感知融合:三条进化主线与工程实践

1. 从 Transformer 到多模态感知的演进逻辑视觉语言模型和 RGB-D 感知这两个方向&#xff0c;过去几年基本是各走各的路。做 VLM 的人盯着图文对齐、指令跟随、视觉问答这些任务&#xff0c;做 RGB-D 的人则埋头于点云配准、深度补全、SLAM 建图。但最近一年&#xff0c;这两条…

2026/10/20 20:57:37 阅读更多 →
VTI介质地震波数值模拟:MATLAB实现与各向异性正演避坑指南

VTI介质地震波数值模拟:MATLAB实现与各向异性正演避坑指南

简介&#xff1a;这份资源面向地震勘探与地球物理方向的学习者和研究者&#xff0c;提供一套基于Matlab的VTI介质地震波场数值模拟程序&#xff0c;用于分析各向异性介质中地震波的传播规律。VTI介质在垂直与平行层理方向上纵波速度存在差异&#xff0c;是实际地壳中常见的各向…

2026/10/20 20:56:32 阅读更多 →

日新闻

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实现详解

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

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

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

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

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

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

如果你的信息流最近也天天刷到“机器人大脑”这个词&#xff0c;你会发现一个很有意思的现象&#xff1a;每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型&#xff0c;有人指的是运动控制系统&#xff0c;还有人指的是能理解物理世界的端到端模型。在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 阅读更多 →