遥感影像变化检测四大经典算法原理与Matlab实现
简介本资源为遥感影像变化检测领域的经典算法实践代码包面向遥感科学、地理信息工程及计算机视觉方向的研究生、科研人员与算法工程师聚焦地表动态监测这一核心任务。压缩包共97个文件含28幅BMP/TIF格式的多时相遥感影像如2000tm、2003tm及taizhouchange系列、24个MATLAB源码文件如IRMAD_Update.m、CVADemo.m、PCADemo.m等、15个.m主程序与工具函数以及FIG可视化结果和HDR/ROI等辅助元数据整体10.4MB结构清晰、即开即用。已有2014人学习下载覆盖从算法原理理解到Matlab端完整复现的全流程。用户可直接运行各算法模块获得CVA强度图、PCA二值变化图、IR-MAD差异图等典型输出并通过Change Result Comparing.m进行结果对比分析配套freadenvi.m、enviwrite.m等ENVI兼容读写工具显著降低遥感数据预处理门槛。1. 遥感影像变化检测不是“比图找不同”四个经典算法IR-MAD、MAD、CVA、PCA到底在算什么你手头有两期泰州地区的遥感影像——2020年和2023年分辨率都是2.5米但成像时间差了三个月大气条件、太阳高度角、传感器增益全都不一样。直接用像素差值im1 - im2生成变化图结果满屏噪点连新建的厂房都淹没在“伪变化”里。这不是数据不行是方法没对上——变化检测的本质不是看“哪里变了”而是建模“哪里不该变”。IR-MAD、MAD、CVA、PCA这四个被反复验证过的算法恰恰是从四个数学切口切入这个核心问题IR-MAD用“比率残差”双通道压制辐射漂移MAD把多时相当成统计异常检测问题来解CVA把每个像素当向量在光谱空间里量“变化长度和方向”PCA则先扔掉冗余维度再在干净的新坐标系里找差异。它们不是竞品而是工具箱里的不同扳手CVA适合快速定位植被砍伐这类强光谱偏移IR-MAD扛得住跨年份、跨传感器数据MAD在长时序比如5年以上10期影像里挖渐进式变化更稳PCA则是处理高光谱或SAR光学融合数据的预处理刚需。这份867338.zip包里没有一行深度学习代码全是Matlab原生矩阵运算实现函数命名直白CVAImageTaizhou_IntensityImage.m、输入输出接口统一ENVI格式hdrraw、连测试数据都配好了泰州影像的.hdr头文件——它不教你怎么调参但确保你第一次运行New_main.m就能看到可解释的变化图而不是报错停在第3行。2. 四个算法的数学内核与Matlab实现逻辑为什么IR-MAD要迭代更新权重2.1 IR-MAD用迭代加权解决“辐射漂移不可测”的黑匣子问题IR-MAD不是简单做比值im2./im1而是构建一个联合优化目标既要让两期影像的比率图像Ratio Image方差最小又要让均值差图像Difference Image协方差最大。其核心是求解广义特征值问题$$ \mathbf{W} \arg\max_{\mathbf{w}} \frac{\mathbf{w}^T \mathbf{C}{\Delta} \mathbf{w}}{\mathbf{w}^T \mathbf{C}{R} \mathbf{w}} $$其中 $\mathbf{C}{\Delta}$ 是差值影像协方差矩阵$\mathbf{C}{R}$ 是比率影像协方差矩阵。但问题来了初始比率图本身受云影、阴影干扰协方差矩阵 $\mathbf{C}_{R}$ 不干净 → 导致第一轮权重 $\mathbf{W}_1$ 偏差大 → 反过来又污染下一轮比率计算。这就是为什么包里必须有IRMAD_Update.m——它不是可选模块而是IR-MAD能落地的关键。该函数执行三步闭环用当前权重 $\mathbf{W}_k$ 计算加权比率图 $R_k \mathbf{W}_k^T (\mathbf{im2} ./ \mathbf{im1})$对 $R_k$ 做Otsu阈值分割生成变化掩膜 $M_k$只保留前10%高响应像素用 $M_k$ 掩膜后的像素重算 $\mathbf{C}{R}$更新 $\mathbf{W}{k1}$提示IRMAD_Update.m默认迭代5次但实际项目中我常设为8次——第6次后权重变化率1e-4才停止避免早停导致边缘变化漏检。2.2 MAD把“变化”定义为统计异常而非绝对差异MAD的哲学是“如果某个像素在所有时相中都表现得和其他像素格格不入那它大概率在变化”。它不依赖两期对比而是对整个时间序列比如10景影像堆叠成 $N \times H \times W$ 张量做奇异值分解。关键步骤在DAcom.m中% 输入data_3d [band1; band2; ...; bandB] × (H×W) 矩阵每列是一个像素的时间序列 [U, S, V] svd(data_3d, econ); % U: B×B, S: B×B, V: (H×W)×(H×W) % 第一主成分U(:,1)代表“最共性的时间模式”V(:,1)是对应的空间权重 % 变化强度 所有像素到第一主成分的正交距离 residual data_3d - U(:,1) * U(:,1) * data_3d; % 投影残差 mad_map sqrt(sum(residual.^2, 1)); % 每列即每个像素的L2残差注意DAcom.m输出的mad_map是一维向量需用reshape(mad_map, H, W)恢复为空间图。这里有个隐藏陷阱——原始代码默认用全部像素参与SVD但城市区域和水体的时间序列模式天差地别强行全局拟合会稀释建筑区变化信号。我的做法是在New_main.m里加预筛选% 在调用DAcom前先剔除NDVI0.05裸土/水体和NDVI0.8浓密林冠的像素 ndvi (im_nir - im_red) ./ (im_nir im_red eps); valid_mask (ndvi 0.05) (ndvi 0.8); data_3d data_3d(:, valid_mask(:));2.3 CVA向量夹角比模长更重要CVA看似最简单CVAImageTaizhou_IntensityImage.m仅37行但最容易误用。它把每个像素看作 $B$ 维向量 $\mathbf{p}_1$时相1和 $\mathbf{p}_2$时相2变化向量 $\mathbf{v} \mathbf{p}_2 - \mathbf{p}_1$然后计算变化强度$|\mathbf{v}|_2$欧氏距离变化方向$\theta \arccos\left(\frac{\mathbf{p}_1 \cdot \mathbf{p}_2}{|\mathbf{p}_1| |\mathbf{p}_2|}\right)$余弦夹角但原始代码只输出强度图CVAImageTaizhou_IntensityImage.mat。真正有用的其实是方向图——比如水稻田收割后近红外波段暴跌而红光波段微升$\theta$ 接近180°而新建厂房的混凝土反射在全波段同步升高$\theta$ 接近0°。我在CVADemo.m末尾补了方向图生成% 补充方向图计算单位度 p1_norm sqrt(sum(im1.^2, 3)); p2_norm sqrt(sum(im2.^2, 3)); dot_prod sum(im1 .* im2, 3); cos_theta dot_prod ./ (p1_norm .* p2_norm eps); theta_deg acos(cos_theta) * 180 / pi; % 保存为CVAImageTaizhou_DirectionImage.mat save(CVAImageTaizhou_DirectionImage.mat, theta_deg);注意方向图对辐射定标极度敏感必须确保im1和im2已做相对辐射归一化如用freadenvi.m读取后执行im1 im1 ./ mean(im1(im10))。2.4 PCA降维不是目的是给噪声“划隔离带”PCA在变化检测中常被误解为“压缩数据”其实它的核心价值是解耦变化信号与系统噪声。以泰州影像为例前3个主成分PC1-PC3承载了85%的地物光谱信息水体、植被、建筑而PC4主要反映大气散射、传感器噪声等与地表无关的干扰。PCA.m的关键不在分解而在选择哪个主成分做差分错误做法直接对原始影像做PCA再对PC1图做差PC1_im2 - PC1_im1→ 丢失跨波段变化关联正确做法对两期影像分别PCA再对同一主成分层做差PC1_im2 - PC1_im1,PC2_im2 - PC2_im1...最后加权融合PCADemo.m中的融合权重LastWeight.mat就是这么来的——它不是固定值而是用变化样本如已知的拆迁区训练出的各PC层敏感度。如果你换用其他地区数据必须重新生成LastWeight.mat% 假设change_roi是手动勾画的变化区域掩膜二值图 pc_diffs zeros(H, W, nPC); % nPC5 for i 1:nPC pc_diffs(:,:,i) pc2(:,:,i) - pc1(:,:,i); end % 计算各PC层在变化区的均值响应 weights zeros(nPC, 1); for i 1:nPC weights(i) mean(pc_diffs(change_roi, i)); end weights weights / sum(weights); % 归一化 save(MyRegion_LastWeight.mat, weights);3. 运行全流程从ENVI数据加载到四算法结果比对3.1 数据准备HDR头文件不是摆设它决定波段顺序生死包里所有.hdr文件如PCAImageTaizhou_IntensityImage.hdr都遵循ENVI标准但必须确认波段顺序与你的原始影像一致。例如泰州数据是WorldView-3影像波段顺序应为[Coastal, Blue, Green, Yellow, Red, RedEdge, NIR1, NIR2]8波段而代码中freadenvi.m默认按BSQBand Sequential方式读取若你的.hdr里写的是BILBand Interleaved by Linefreadenvi.m会把数据读成乱码。检查方法% 用freadenvi读取后立即验证单波段空间连续性 im_raw freadenvi(your_data.dat, your_data.hdr); figure; imshow(im_raw(:,:,1), []); title(Band 1 - should be spatially smooth); % 如果出现条纹状噪声说明BIL/BSQ不匹配解决方案修改.hdr文件中的interleave字段为bsq或改用enviwrite2.m它支持显式指定interleave类型% 用enviwrite2.m安全写入推荐 enviwrite2(output.dat, im_processed, output.hdr, interleave, bsq, ... data_type, 4, header_offset, 0);3.2 主流程New_main.m的三个硬编码雷区New_main.m是入口脚本但藏着三个必须手动改的路径和参数影像路径硬编码第12行im1_path data/Taizhou_2020.dat;→ 改为你自己的.dat路径波段数声明第18行nBands 8;→ 若你的数据是Sentinel-213波段或Landsat-811波段必须同步修改输出目录权限第45行mkdir(result);→ 若无写入权限会静默失败。建议改为if ~exist(result, dir), mkdir(result); end % 并在每步save前加校验 if ~isdir(result), error(Result directory not writable!); end3.3 四算法结果生成文件名背后的逻辑链运行New_main.m后你会得到以下关键输出文件按算法分类算法核心输出文件物理意义后续处理建议IR-MADIRMAD_Update_result.mat迭代收敛后的加权差值图单波段用KmeansMap.m做3类聚类不变/微变/剧变MADMADGet_result.mat每个像素到主成分的正交距离单波段必须用covw.m计算局部协方差加权否则水体伪变化泛滥CVACVAImageTaizhou_IntensityImage.mat变化向量模长图必须叠加方向图见2.3节补充代码才能区分变化类型PCAPCAImageTaizhou_BinaryValue.hdr二值变化图0/1实际是PC1_diff经Otsu阈值后的结果阈值存于PCAImageTaizhou_BinaryValue.hdr的description字段提示所有.mat文件都保存为结构体主变量名与文件名一致如CVAImageTaizhou_IntensityImage.mat里变量名为CVAImageTaizhou_IntensityImage直接load即可无需解析。3.4 结果可视化createfigure.m的致命缺陷与修复createfigure.m用于生成四算法对比图但它默认将所有结果拉伸到[0,1]显示导致弱变化区域如农田休耕完全不可见。修复方案% 替换createfigure.m中imshow行 % 原始imshow(result_map, []); % 改为计算95%分位数作为上限保留细节 p95 prctile(result_map(result_map0), 95); % 排除零值干扰 imshow(result_map, [0, p95]); % 强制0-95%线性拉伸同时Change Result Comparing.m脚本会生成compare_result.png但默认用jet色图——在遥感中极易误导红色≠剧烈变化只是数值高。我强制替换为parula% 在Change Result Comparing.m末尾加 colormap(parula); % 比jet更符合人眼感知的色图 caxis([0, max(max(result_all))]); % 统一colorbar尺度4. 避坑指南四个算法在泰州数据上踩过的5个真实血泪坑4.1 IR-MAD迭代发散初始权重全为NaN现象运行IRMAD_Update.m时第1次迭代后W矩阵全为NaN后续迭代崩溃原因输入影像存在全零波段如某波段因云覆盖全为0导致比率图im2./im1出现0/0NaN协方差矩阵含NaN→svd返回全NaN解决在IRMAD_Update.m开头加数据清洗% 清洗零值波段用邻近波段均值填充 for b 1:size(im1,3) if all(im1(:, :, b) 0) || all(im2(:, :, b) 0) % 找非零波段均值 valid_bands setdiff(1:size(im1,3), b); im1(:, :, b) mean(im1(:, :, valid_bands), 3); im2(:, :, b) mean(im2(:, :, valid_bands), 3); end end4.2 MAD检测水体伪变化太湖区域整片亮红现象MADGet_result.mat中太湖水面呈现高强度变化但实地无变化原因水体在不同时间的镜面反射受风速、太阳角影响极大时间序列波动远超陆地被MAD误判为“异常”解决用NDWI归一化水体指数预先掩膜% 在DAcom.m调用前计算NDWI掩膜 ndwi (im_green - im_nir) ./ (im_green im_nir eps); water_mask ndwi 0.3; % 水体阈值 % 将水体像素的时间序列置为全0排除参与SVD data_3d(:, water_mask(:)) 0;4.3 CVA方向图全为0°所有像素夹角都是0现象theta_deg图全为0或接近0失去方向判别能力原因两期影像未做辐射归一化im1和im2的DN值量级不同如im1均值1000im2均值1500导致点积dot_prod主导余弦值趋近1解决强制归一化到同一动态范围% 在CVA计算前统一缩放 im1 im1 / max(im1(:)); im2 im2 / max(im2(:)); % 或更鲁棒用百分位数截断 p99_1 prctile(im1(:), 99); p99_2 prctile(im2(:), 99); im1 im1 / p99_1; im2 im2 / p99_2;4.4 PCA结果空洞化建筑区变化图出现规则方块缺失现象PCAImageTaizhou_BinaryValue.hdr中高楼群区域呈棋盘状空白原因PCA.m中默认使用imresize降采样加速计算第62行但双三次插值在建筑边缘产生振铃效应降采样后PC1图丢失高频边缘信息解决关闭降采样改用blockproc分块处理% 替换PCA.m中imresize行 % 原始im_low imresize(im, 0.5); % 改为分块均值下采样保边缘 fun (block_struct) mean(block_struct.data, all); im_low blockproc(im, [8 8], fun);4.5 ENVI头文件写入失败enviwrite.m生成的.hdr缺少波段名称现象用enviwrite.m保存结果后ArcGIS无法识别波段显示为Band 1,Band 2...原因enviwrite.m未写入band_names字段而enviwrite2.m支持该参数解决统一改用enviwrite2.m并显式传入波段名band_names {IR-MAD_Change, MAD_Residual, CVA_Magnitude, PCA_Diff}; enviwrite2(fused_result.dat, fused_img, fused_result.hdr, ... band_names, band_names, data_type, 4);5. 进阶技巧用KmeansMap.m做变化程度分级以及如何验证结果可信度5.1 变化分级不是Kmeans而是“变化强度空间连续性”双约束聚类KmeansMap.m表面是Kmeans聚类但原始代码只对变化图做单波段聚类导致结果碎片化一个建筑屋顶被分成“微变”“剧变”两块。真正的工程做法是加入空间先验% 改写KmeansMap.m核心逻辑替换原kmeans行 % 步骤1提取变化强度图如IR-MAD结果 change_intensity load(IRMAD_Update_result.mat).IRMAD_Update_result; % 步骤2计算每个像素的8邻域方差衡量空间突变性 neighbor_var imgaussfilt(change_intensity, 1); % 先高斯平滑去噪 neighbor_var imfilter(neighbor_var, fspecial(laplacian), replicate); % 拉普拉斯锐化 % 步骤3拼接双特征向量 [强度; 邻域方差] features [change_intensity(:), abs(neighbor_var(:))]; % 步骤4Kmeans聚类k3不变/微变/剧变 [idx, C] kmeans(features, 3, MaxIter, 100); % 步骤5形态学后处理消除孤立点 idx_img reshape(idx, size(change_intensity)); idx_img bwareaopen(idx_img 2, 50); % 仅保留面积50像素的“微变”区这样生成的KmeansMap_result.mat中idx_img2就是连片的、中等强度的变化区如新建道路路基比原始单特征聚类可靠得多。5.2 验证结果可信度三步交叉验证法算法输出只是中间产物最终要回答“这个变化图准不准”我坚持用三步验证第一步光谱轨迹回溯对KmeansMap标记的“剧变”像素提取其在两期影像中的光谱曲线8波段值用plot可视化% 随机抽10个剧变像素 change_pixels find(idx_img 3); sample_idx change_pixels(randperm(length(change_pixels), 10)); figure; hold on; for i 1:10 plot(im1(sample_idx(i), :), b-o, MarkerSize, 3); plot(im2(sample_idx(i), :), r-s, MarkerSize, 3); end xlabel(Band Index); ylabel(DN Value); legend(2020, 2023); % 合理变化应呈现整体抬升建筑或特定波段暴跌植被砍伐第二步空间一致性检验用bwmorph检测变化图的连通域% 计算剧变区的连通域数量和平均面积 bw_dramatic idx_img 3; CC bwconncomp(bw_dramatic); num_regions CC.NumObjects; mean_area mean(cellfun(numel, CC.PixelIdxList)); % 若num_regions 500 且 mean_area 20 → 过度碎片化需调高IR-MAD迭代次数或改用PCA第三步与公开矢量数据比对下载泰州自然资源局发布的2022年土地利用变更图斑GeoJSON格式用shaperead转为MATLAB多边形% 加载矢量变更区假设文件为change_parcels.shp S shaperead(change_parcels.shp); % 将矢量转为二值掩膜与影像同分辨率 mask_vector poly2mask([S.X], [S.Y], H, W); % 计算算法变化图与矢量的交集率 mask_algo idx_img 3; iou nnz(mask_algo mask_vector) / nnz(mask_algo | mask_vector); % IOU 0.65 视为合格 0.4 需检查辐射定标或算法选型从那以后我每次交付变化检测报告都强制走一遍这三步验证——不是为了证明算法多牛而是确保客户指着屏幕问“这个红框为什么不算变化”时我能立刻调出光谱曲线和矢量比对图而不是翻代码猜原因。遥感变化检测没有银弹只有把数学原理、数据特性和业务需求焊死在一条链上才能让算法真正长出眼睛。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

我是Agent 小白

我是Agent 小白

一、基础概念,讲讲你对agent的理解 Agent不是简单的工具调用,是一套完整的智能决策系统。 1. 什么是AI Agent?与传统的LLM应用的核心区别是什么? 传统LLM应用是“一问一答”的单次交互,用户问-模型答-结束。模型不会主…

2026/10/18 22:56:12 阅读更多 →
OpenManus本地部署并测试:国产GPU也能跑的TaoToken接入教程

OpenManus本地部署并测试:国产GPU也能跑的TaoToken接入教程

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

2026/10/18 22:56:12 阅读更多 →
【干货】MCP+AI Agent 保姆级实战教程:从入门到精通,TaoToken 统一 Key 打通 VSCode 与 Smolagents

【干货】MCP+AI Agent 保姆级实战教程:从入门到精通,TaoToken 统一 Key 打通 VSCode 与 Smolagents

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

2026/10/18 22:56:12 阅读更多 →

最新新闻

三则AI新闻揭示应用临界点:轻量模型、免费旗舰与团队回迁

三则AI新闻揭示应用临界点:轻量模型、免费旗舰与团队回迁

10月8日早上,我的朋友圈和几个技术群几乎同时被三则AI新闻刷屏:一家主流模型厂商发布了新的轻量快速模型H 5.5,另一家巨头把第六代旗舰模型向普通用户免费开放,还有一个此前把部分团队搬到外地的智能体产品团队,宣布要…

2026/10/18 23:39:35 阅读更多 →
语言模型中的语法伪相关:模型为何学错教训?

语言模型中的语法伪相关:模型为何学错教训?

看到标题里的“Syntactic-Domain Spurious Correlations”,我第一反应是想起自己踩过的一个坑:训练文本蕴含模型时,验证集上“矛盾”标签的准确率一路飙升到95%以上,当时我还以为模型真的学会了推理。结果我把一个用规则改写出来的…

2026/10/18 23:39:35 阅读更多 →
恒星级AI时代:AI短剧生产管线与数字分身序章

恒星级AI时代:AI短剧生产管线与数字分身序章

1. 从“恒星级AI”说起:这个标题到底在讲什么“恒星级AI时代降临”这个说法,第一次看到的时候我愣了一下。恒星级的能量量级是什么概念?太阳每秒释放的能量大约是3.8乘以10的26次方瓦,人类目前全球总发电功率大概在3乘10的12次方瓦…

2026/10/18 23:39:35 阅读更多 →
OpenSpec:规范优先开发的工程实践与CI/npm落地指南

OpenSpec:规范优先开发的工程实践与CI/npm落地指南

1. OpenSpec 是什么:一个被低估的规范优先开发实践工具链OpenSpec 不是一个 npm 包名,也不是某个具体开源项目的代号——它是一套正在快速成型的、以机器可读规范(Spec)为唯一事实源(Single Source of Truth&#xff0…

2026/10/18 23:38:35 阅读更多 →
空间复用与数据对齐实战:内存池、缓存行与SIMD优化指南

空间复用与数据对齐实战:内存池、缓存行与SIMD优化指南

空间复用和数据对齐这两件事,很多人是在踩了坑之后才回头补课的。我刚开始接触算法实现时,习惯把所有临时数据都放在堆上现申请现释放,结构体字段怎么顺手怎么排,跑起来也没觉得有什么问题——直到有一次把数据规模抬到千万级&…

2026/10/18 23:38:35 阅读更多 →
Sakurairo WordPress 主题指南:从零到一搭出你的多彩博客

Sakurairo WordPress 主题指南:从零到一搭出你的多彩博客

Sakurairo WordPress 主题指南:从零到一搭出你的多彩博客 【免费下载链接】Sakurairo A WordPress theme that is built with AI-assisted reading features, colorful, user-friendly, well-rounded, and rich in functionalities. Support Chinese, English, Japa…

2026/10/18 23:38:35 阅读更多 →

日新闻

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

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

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

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

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

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

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

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

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

2026/10/18 0:00:55 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 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/18 0:55:02 阅读更多 →
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/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练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/18 12:16:16 阅读更多 →