MATLAB曲线图片识别程序:从论文截图中自动提取数据点
简介一款基于MATLAB的曲线图片识别程序主要面向需要从科研图像中自动提取曲线坐标的研究人员与工程技术人员。该工具能够对图片进行灰度化、二值化、去噪等预处理并通过边缘检测、轮廓追踪和曲线拟合等步骤将论文或实验图像中的曲线数据快速还原为可分析绘图的数据点有效避免重复造轮子的低效工作。压缩包共14个文件以12张png示例图为主体辅以1个mat数据文件和1个m源程序整体大小仅459KB结构简洁便于上手。目前已有2018人学习适合具备一定MATLAB基础、希望掌握图像处理与曲线提取流程的读者。资源附带了多组不同形态的曲线示例图片、可直接运行的MATLAB源程序以及配套的数据存储文件可对照代码熟悉im2gray、edge、regionprops、polyfit等关键函数的使用方法并迁移到自己的数据处理任务中。1. 曲线图片识别程序从论文截图里把数据点抠出来做科研复现时最头疼的一件事是论文里的曲线图没有配套数据表想拿人家结果跟自己算法对比只能对着截图手动取点。放大、对准、记坐标一张图几十个点搞一晚上费眼费神还带主观误差。这个MATLAB程序就是干这个的——把一张曲线图片论文截图、示波器导出图、手绘草图都行自动识别出曲线像素位置再通过标定点映射成真实数据坐标最后导出一份可以直接用的数据文件。它适合有MATLAB环境、需要从图表反向提取数值的研究者或工程师也适合想学习图像处理基础流程的入门开发者。整个项目从图像预处理到数据导出大概三百行代码核心逻辑清晰是典型的用MATLAB做数字图像处理的落地案例。2. 整体架构与文件结构一个脚本为什么拆成五个模块2.1 技术选型为什么用MATLAB而不是OpenCV这个项目最开始是用Python写的后来换成了MATLAB原因挺实际识别曲线这事本质是图像形态学操作加数值插值MATLAB的Image Processing Toolbox里imbinarize、bwmorph、regionprops这几个函数直接覆盖了八成需求不需要自己造轮子。而且处理二维矩阵的语法比Python列表推导直观得多调试时可以随手imshow看一眼中间结果这对图像类项目来说太重要了。另一个考虑是目标用户。这个项目的典型使用场景是实验室里复现论文数据而科研场景MATLAB占有率很高。分发一个.m脚本合集对方只要装了就F5跑起来比让他去配Python环境、装opencv和numpy要省事得多。当然代价也有后面会提到——MATLAB的图像函数版本差异是个隐藏的坑。2.2 目录结构与模块职责项目解压后的目录布局是这样的curve_ocr/ main.m # 主脚本编排整个流程 preprocess/ gray_and_binary.m # 灰度化 二值化 反相校正 remove_grid.m # 网格线和边框清理 extract/ trace_curve.m # 逐列扫描提取曲线像素坐标 skeleton_trace.m # 骨架化追踪多值曲线备用方案 calibrate/ pick_axis_points.m # 交互式选取标定点 map_coords.m # 像素坐标到数据坐标的映射 export/ write_csv.m # 导出CSV文件 verify_fit.m # 画出对比图验证提取效果 test/ sample_curve.png # 测试样例带网格的论文折线图 case_loglog.png # 对数轴样例 README.md模块拆分的核心逻辑是每个文件夹对应一类操作preprocess管把图片变成干净的二值图extract管从二值图拿到曲线像素轨迹calibrate管从像素还原到数据export管落地验证。这样做的直接好处是当你拿到一张特别脏的截图时可以在main.m里注释掉remove_grid单独调试预处理环节不用在几百行脚本里翻找。2.3 主脚本main.m的运行序列main.m本身不写具体算法只做流程编排和参数设置。看一下关键序列%% main.m clear; close all; clc; img_path test/sample_curve.png; img_orig imread(img_path); %% 第一步预处理得到干净的二值曲线图 img_bin preprocess.gray_and_binary(img_orig); img_bin_clean preprocess.remove_grid(img_bin); %% 第二步提取曲线像素轨迹 [px_x, px_y] extract.trace_curve(img_bin_clean); px_x px_x(:); px_y px_y(:); %% 第三步交互式标定选坐标轴原点和一个已知点 disp(请在图上依次点击坐标原点、X轴末端已知点、Y轴末端已知点); axis_pts calibrate.pick_axis_points(img_orig); %% 第四步映射到数据坐标 data_xy calibrate.map_coords(px_x, px_y, axis_pts); %% 第五步导出和验证 export.write_csv(result_curve.csv, data_xy); export.verify_fit(img_orig, data_xy, axis_pts);主脚本的思路是把交互环节单独抽出来。pick_axis_points在figure上用ginput等用户点击这一步暂停程序等待人工输入其余步骤全部自动。参数调整集中在脚本头部比如需要改二值化阈值改的是gray_and_binary内部的参数而非主脚本。3. 核心模块拆解一张图片变成一串像素点的完整链路3.1 灰度化与二值化阈值方向是个隐形开关预处理第一步是把彩色图或灰度图转成二值图MATLAB里核心函数是imbinarize。注意这里不要用老掉牙的im2bw它在R2016a之后已经标记为不建议使用而且阈值语义和imbinarize不兼容。看代码function img_bin gray_and_binary(img_orig) % 灰度化彩色图转灰度 if size(img_orig, 3) 3 img_gray rgb2gray(img_orig); else img_gray img_orig; end % 自适应二值化Otsu方法自动确定阈值 img_bin imbinarize(img_gray, global); % 也可以用 adaptive % 反相校正确认曲线是白色前景、背景为黑色 % 计算前景像素占比如果前景超过50%说明二值化方向反了 if mean(img_bin(:)) 0.5 img_bin ~img_bin; end end逻辑说明rgb2gray按亮度加权把RGB转成灰度权重是[0.2989, 0.5870, 0.1140]对绿色分量权重最高这是因为人眼对绿色最敏感。imbinarize(img_gray, global)用Otsu方法自动算阈值把灰度图分成前景背景两类这个方法在曲线和背景亮度差异明显时效果稳定。参数说明global字符参数指定全局阈值如果把该行的global换成adaptive就会用局部邻域阈值处理亮度不均的图片比如扫描件边缘发暗的图。反相校正是个血泪经验——有的图曲线是黑线白底二值化后前景变成了背景如果不加这个自动判断后面所有步骤都会拿到一个负片提取结果完全错乱。3.2 去除网格线连通域分析锁定长线段论文截图里最普遍的干扰就是网格线。网格在二值图里是一堆横竖直线和曲线交织在一起。这里用bwmorph和regionprops做两轮过滤function img_clean remove_grid(img_bin) % 第一步用形态学开运算去掉细小的孤立噪点 img_clean bwareaopen(img_bin, 80); % 移除面积小于80像素的对象 % 第二步标记连通域并计算形状特征 cc bwconncomp(img_clean); stats regionprops(cc, Area, MajorAxisLength, MinorAxisLength, Eccentricity); % 第三步过滤掉长条状的直线对象网格线 for k 1:cc.NumObjects len stats(k).MajorAxisLength; ecc stats(k).Eccentricity; % 网格线特征是极长且接近标准椭圆形状 if ecc 0.995 len 300 img_clean(cc.PixelIdxList{k}) 0; end end % 第四步闭运算把曲线断口接上 img_clean imclose(img_clean, strel(line, 5, 90)); img_clean imclose(img_clean, strel(line, 5, 0)); end逻辑说明bwareaopen按8连通域面积过滤80这个值是把扫描产生的孤立墨点、噪点清掉。接着regionprops对每个连通域求主轴长度和偏心率——网格线是一条很长的直线偏心率接近1eccentricity0是圆1是直线长度往往超过图像宽度的三分之一。这两个条件同时满足的就判定为网格线直接置零清除。这里有个参数调整技巧len 300这个阈值要参考你的图片尺寸如果图片是2000像素宽300会放过一部分短网格如果图片是500像素宽300可能误杀曲线。我一般会在调试时用stats打印前20条连通域的len分布人工看一眼阈值该划在哪。闭运算的strel(line,5,90)是沿着垂直方向做5像素长的闭运算把曲线因为网格遮挡产生的断点接续起来90表示角度0表示水平方向。3.3 逐列扫描提取曲线像素坐标这是整个项目最核心的一段代码。思路非常朴素对于单值函数曲线x轴方向上每个x只对应一个y从上到下逐列扫描记录每一列第一个遇到的前景像素的行号这个行号就是该x位置处的曲线纵坐标像素值。function [px_x, px_y] trace_curve(img_bin) [H, W] size(img_bin); px_x []; px_y []; for col 1:W % 取当前列的所有像素 col_data img_bin(:, col); % 找到该列所有前景像素的行索引 row_inds find(col_data); if ~isempty(row_inds) % 取最上方的点适用于实线曲线 y_pixel row_inds(1); px_x(end1) col; px_y(end1) y_pixel; else % 该列没有曲线像素记录NaN占位 px_x(end1) col; px_y(end1) NaN; end end % 去掉两端无效的NaN避免边界噪声 valid ~isnan(px_y); px_x px_x(valid); px_y px_y(valid); end逻辑说明find(col_data)返回该列所有值为1的元素的行号row_inds(1)取第一个也就是最上面的点。为什么取最上面因为用MATLAB画图时曲线是在白色背景上像素坐标的y轴向下增长曲线粗细一般是1到3个像素取顶端能保持轨迹稳定。如果这一列完全没有前景像素说明曲线在这里有断口或超出边界用NaN占位后续可以插值补上。参数说明这个算法对单值函数曲线比如yf(x)的折线图、频谱图有效。如果遇到的是多值曲线比如圆、椭圆、回滞环逐列扫描会丢掉一半数据点这时要改用同目录下的skeleton_trace.m——先用bwmorph(img_bin, skel, Inf)把曲线细化成单像素骨架再用8邻域追踪把整个连通域的像素坐标全部输出。两种方案在同一输出接口下互换主脚本里只需改一行调用函数名。4. 坐标标定与数据导出像素坐标变成真实数据的最后一步4.1 标定点选取三点击穿坐标系曲线像素坐标本身没有物理意义x对应的是图片列数y对应的是行数。要还原成实际数据必须知道图片中坐标轴的比例尺和原点位置。这里用的办法是交互式点击三个点即原点、X轴已知刻度点、Y轴已知刻度点然后用仿射映射把像素坐标转换到数据坐标。function axis_pts pick_axis_points(img_orig) imshow(img_orig); title(依次点击原点 - X轴已知点 - Y轴已知点右键结束); hold on; % ginput以像素坐标返回点击位置n3表示等3个点 [x_px, y_px] ginput(3); axis_pts.px [x_px(:), y_px(:)]; % 输入这些点对应的实际数据值 prompt {X轴末端点对应数值:, Y轴末端点对应数值:, 原点对应数值:}; default_vals {10, 5, 0}; answer inputdlg(prompt, 标定数据, [1 30], default_vals); axis_pts.x_axis_end str2double(answer{1}); axis_pts.y_axis_end str2double(answer{2}); axis_pts.origin_val str2double(answer{3}); hold off; end逻辑说明ginput(3)阻塞等待用户在图窗上点击三个位置返回的是像素坐标。注意MATLAB的figure坐标系y轴向下所以点击得到的y_px是图像行号。随后inputdlg弹窗询问这三个点分别对应的真实数据值把像素位置和数据数值绑定成映射关系。返回值axis_pts是一个结构体被后续的map_coords消费。4.2 仿射映射两个轴独立缩放拿到了三对映射点后x轴和y轴可以分开做线性映射。x方向通过原点像素坐标和X轴末端像素坐标确定缩放比例y方向通过原点和Y轴末端确定缩放比例。注意y像素坐标需要翻转因为图片原点在左上角而数据坐标系原点通常在图左下角。function data_xy map_coords(px_x, px_y, axis_pts) % 数值解构 ox_px axis_pts.px(1,1); % 原点像素x oy_px axis_pts.px(1,2); % 原点像素y xend_px axis_pts.px(2,1); % X轴末端像素x yend_px axis_pts.px(3,2); % Y轴末端像素y ox_val axis_pts.origin_val; xend_val axis_pts.x_axis_end; yend_val axis_pts.y_axis_end; % 像素差转数据差的比例尺 scale_x (xend_val - ox_val) / (xend_px - ox_px); scale_y (yend_val - ox_val) / (oy_px - yend_px); % 注意分母的翻转 % 批量转换 data_x ox_val (px_x - ox_px) * scale_x; data_y ox_val (oy_px - px_y) * scale_y; % 图像y方向取反 data_xy [data_x(:), data_y(:)]; end逻辑说明scale_x是X轴上单位像素对应的数据增量scale_y的分母(oy_px - yend_px)是负的因为图像上Y轴末端yend_px在原点上方行号更小而数据值更大。这一步的翻转是新手最常见的翻车点——不取反的话提取出的曲线会上下镜像。data_y ox_val (oy_px - px_y) * scale_y中当px_y越小图像中越靠上时oy_px - px_y越大对应数据y越大就正确还原了图像上方数据值大的物理含义。参数说明当前这个三点击法假设两个坐标轴都是线性刻度。如果是对数坐标图比如Bode图、log-log图在调用map_coords前需要把输入的轴末端值取对数% 对数轴适配比如X轴是log刻度 axis_pts.x_axis_end log10(axis_pts.x_axis_end); % 映射后还原 data_xy(:,1) 10.^data_xy(:,1);不加这段处理对数图提取的数据是严重弯曲的。项目test/case_loglog.png就是专门用来验证这个场景的。4.3 导出CSV与可视化验证数据拿到之后不能直接信先用verify_fit.m把提取的数据点重新叠画到原图上肉眼检查轨迹是否贴合function verify_fit(img_orig, data_xy, axis_pts) figure; imshow(img_orig); hold on; % 把数据坐标映射回像素坐标叠加显示反向计算 ox_px axis_pts.px(1,1); oy_px axis_pts.px(1,2); scale_x (axis_pts.x_axis_end - axis_pts.origin_val) / (axis_pts.px(2,1) - ox_px); scale_y (axis_pts.y_axis_end - axis_pts.origin_val) / (oy_px - axis_pts.px(3,2)); back_x ox_px (data_xy(:,1) - axis_pts.origin_val) / scale_x; back_y oy_px - (data_xy(:,2) - axis_pts.origin_val) / scale_y; scatter(back_x, back_y, 8, red, filled); title(红色点为提取结果检查是否贴合原曲线); end逻辑说明这段代码的核心思想是逆变换验证——把导出的数据坐标再用标定参数映射回图像像素坐标以散点形式叠加在原图上。如果提取正确红色散点会精确排列在原始曲线轨迹上如果有偏差会直观看到某些点漂移到曲线外这时回去调二值化参数或标定点位置。导出CSV的部分用了MATLAB的writetablefunction write_csv(filepath, data_xy) T array2table(data_xy, VariableNames, {x, y}); writetable(T, filepath); fprintf(数据已导出到%s共%d个点\n, filepath, size(data_xy, 1)); end这里用array2table而不是直接csvwrite是因为新版本的MATLAB对csvwrite也标记了不建议使用而且writetable能自动带列名后续读入别的工具时更友好。5. 常见问题排查二值化反相、断线与坐标翻转的血泪记录5.1 提取出的曲线上下倒置现象导出的数据画出来跟原图曲线完全镜像峰变谷谷变峰。原因map_coords中y轴像素坐标没有翻转。MATLAB的图像坐标系原点在左上角y值向下增长而数学坐标系原点通常在左下角y值向上增长。写了scale_y (yend_val - ox_val) / (yend_px - oy_px)这种顺向公式就会得到镜像数据。解决y方向的映射必须用(oy_px - px_y)作为像素差从图像上方的Y轴末端到原点像素行号是减小的数据值从大到小一正一负正好抵消还原。在map_coords.m里强制加一条注释提醒y_px越小data_y越大这是正确的。5.2 曲线提取结果断裂成一段一段现象trace_curve返回的像素点在某些区间突然消失曲线图上有明显的缺口对应位置恰好是网格线覆盖的地方。原因网格线比曲线粗二值化后网格线区域完全覆盖了曲线像素。remove_grid把网格线删掉的同时也把它覆盖住的曲线像素一并删除了导致曲线上留下空洞。解决两个办法。一是在remove_grid闭运算那步把结构元素从5像素加大到9像素让闭运算填补更大的缺口。二是提取策略改成先删网格再描曲线而是在提取时跳过被网格占据的列改用相邻列的曲线位置插值补上。我一般先用imclose补断口补不上的局部缺口靠插值% 对px_y中的NaN做线性插值 nan_pos isnan(px_y); px_y(nan_pos) interp1(px_x(~nan_pos), px_y(~nan_pos), px_x(nan_pos), linear);5.3 二值化后曲线变成背景、背景变成曲线现象预处理后imshow看到的是黑白反转的图原本的黑线变白底、白底变黑线提取结果完全乱套。原因某些论文图表是白底深色曲线imbinarize的Otsu方法把深色像素识别为前景得到的二值图是黑线白底导致逐列扫描时每一列都从顶部就开始记录前景像素。解决前面gray_and_binary里的自动反相判断就是为这个准备的。mean(img_bin(:)) 0.5这个条件是启发式的——正常二值化后曲线只占图面很少比例前景像素占比远低于50%。如果高于50%基本可以确定前景背景反了直接~img_bin翻转。但要注意如果原图曲线很粗、占图面比例很大比如粗笔画手绘图这个启发式可能误判需要人工看一眼二值化结果再决定是否注释掉翻转。5.4 MATLAB版本差异导致函数报错现象在旧版本R2016a之前跑imbinarize直接报错Undefined function或者在新版本跑im2bw提示不建议使用。原因im2bw、bwlabel等老函数被逐步淘汰imbinarize、bwconncomp是替代方案。版本差异在MATLAB里尤其明显因为Image Processing Toolbox的API演进比较激进。解决项目代码里只用新版API。如果你的环境是旧版降级写法是% 旧版兼容写法不推荐但可用 level graythresh(img_gray); img_bin im2bw(img_gray, level);但bwconncomp在旧版不存在只能用bwlabel加regionprops组合这属于比较费劲的兼容改造。我的建议是直接用MATLAB Online或升级到R2020b之后的版本省去不必要的兼容成本。5.5 ginput点击标定点时不认点现象pick_axis_points弹出了图片但点击三次后程序没有继续执行窗口好像卡住了。原因ginput在等待时会开启figure的鼠标交互但如果你先用imshow显示图片后没有hold on或者figure被其他窗口遮挡点击事件可能没有正确注册。更常见的原因是inputdlg弹窗被系统拦截卡在弹窗等待而未注意。解决在ginput(3)之前加figure(gcf)把当前图窗置前并且ginput的返回值会在右键或回车时提前终止——如果右键点了x_px长度不足3后续索引会越界。稳健写法是加一个循环判断直到收集满3个点才继续while size(pts, 1) 3 [x_tmp, y_tmp] ginput(1); pts(end1, :) [x_tmp, y_tmp]; plot(x_tmp, y_tmp, rx); % 回显已选点 end这样即使误操作右键也能继续补齐点不会莫名其妙中断流程。6. 二次开发方向把脚本改造成带界面的批量取数工具脚本化方案的优点是逻辑透明缺点是每处理一张图都得改路径、调参数、手动标定。如果想要更顺手的体验一个比较实用的改造方向是给它套一个MATLAB App Designer界面。改造思路并不复杂核心是把main.m里五个步骤封装成独立函数这部分项目已经做到了然后在App里拖五个按钮分别对应加载图片、预处理预览、提取像素、标定导出、批量处理。加载图片用uigetfile返回文件路径传给imread预处理预览用axes组件显示中间结果。这样从命令行脚本变成图形界面工具对不熟悉MATLAB命令行操作的同事也更友好。另一个值得做的改造是批量处理。论文复现场景经常是同一篇文章里有五六张折线图每张图单独跑一遍标定确实累。批量思路是先对每张图做预处理和曲线提取保存像素坐标和该图片文件名到内存表格然后一次性对所有图做标定导出% 批量处理伪代码 files dir(paper_figs/*.png); for i 1:length(files) img imread(fullfile(files(i).folder, files(i).name)); img_bin preprocess.gray_and_binary(img); img_bin preprocess.remove_grid(img_bin); [px_x, px_y] extract.trace_curve(img_bin); % 暂存px坐标 raw_result(i).name files(i).name; raw_result(i).px [px_x(:), px_y(:)]; end % 对每张图分别标定 for i 1:length(raw_result) img imread(fullfile(files(i).folder, raw_result(i).name)); axis_pts calibrate.pick_axis_points(img); data_xy calibrate.map_coords(raw_result(i).px(:,1), raw_result(i).px(:,2), axis_pts); export.write_csv(fullfile(output, [raw_result(i).name(1:end-4) _data.csv]), data_xy); end你也可以顺手加一个插值重采样模块让导出的数据点按固定的x间隔比如每隔0.1均匀采样这在进行数值积分或频域分析时特别有用。这个项目我最大的教训是别跳过预处理的可视化确认。之前图快把二值化和网格清除一口气跑完直接提取结果某张图片因为扫描倾斜网格线没有被完整识别曲线轨迹混入大量网格残留点导出的数据画出来是一条锯齿带状的东西。从那以后我每次拿到新类型的图表都强制先看一遍二值化中间结果、再跑一遍叠加验证确认没问题才继续下一张。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

从入门到精通:企业如何应用BI系统实现数据驱动决策

从入门到精通:企业如何应用BI系统实现数据驱动决策

引言:数据不缺,决策为什么依然难企业在数据上的投入并不少。ERP里有订单,CRM里有客户,供应链系统里有库存,营销平台里有投放效果。据《全国数据资源调查报告(2025年)》显示,2025年全…

2026/10/16 21:53:10 阅读更多 →
Python编程从入门到实践:压缩包学习路线与避坑指南

Python编程从入门到实践:压缩包学习路线与避坑指南

简介:这份资源是面向Python零基础学习者与转行人群的入门到实践配套资料包,围绕《Python编程:从入门到实践》的知识脉络整理,帮助读者跨越语法门槛、建立编程思维。内容覆盖变量与数据类型、条件语句与循环、函数、面向对象编程中…

2026/10/16 21:53:10 阅读更多 →
免安装JDK 1.8配置指南:多版本共存与避坑实践

免安装JDK 1.8配置指南:多版本共存与避坑实践

简介:这份资源是面向Java开发者、尤其是需要快速搭建或切换开发环境的64位系统用户的JDK1.8免安装包,解压即可使用,省去传统安装流程,适合多版本共存、临时调试或教学演示等场景。压缩包采用7z格式,共1474个文件&#…

2026/10/16 21:53:10 阅读更多 →

最新新闻

STM32H系列ADC高精度采集全链路解析:从硬件架构到工业级落地

STM32H系列ADC高精度采集全链路解析:从硬件架构到工业级落地

1. 这不是“调通ADC”而是重建对模拟世界的感知能力很多人第一次在STM32H系列芯片上敲下HAL_ADC_Start(),心里想的是:“终于把ADC初始化好了”,但实际那一刻,你真正启动的是一套精密的模拟-数字转换系统——它不只读电压&#xff…

2026/10/16 22:40:05 阅读更多 →
STM32F407+W5500混合板开发避坑指南

STM32F407+W5500混合板开发避坑指南

简介:本资源是一套基于STM32F407与W5500以太网控制器协同开发的嵌入式网络通信实战工程,面向嵌入式初学者、物联网开发工程师及高校电子类专业学生,解决ARM Cortex-M4平台快速接入以太网并实现TCP/UDP通信的核心问题。压缩包共110个文件&…

2026/10/16 22:40:05 阅读更多 →
SAP对外接口开发:Linux下RFC SDK 7.5.0从安装到排错全攻略

SAP对外接口开发:Linux下RFC SDK 7.5.0从安装到排错全攻略

简介:SAP NetWeaver RFC SDK 7.5.0 是一套用于开发 SAP RFC 接口的官方 SDK 依赖包,面向需要在 Windows 与 Linux 环境下连接 SAP 系统的开发人员,解决 SapNwRfc 库依赖缺失或版本不匹配问题。压缩包内共 56 个文件,涵盖 C/C 头文…

2026/10/16 22:40:05 阅读更多 →
线性回归与深度学习:用神经网络视角重写基础模型

线性回归与深度学习:用神经网络视角重写基础模型

很多人觉得线性回归是最古老的统计工具,跟深度学习这种“高科技”八竿子打不着。但实际上,你要是真的把深度学习框架拆开看,第一层几乎都是纯线性的。我自己当年学深度学习时,把线性回归用神经网络的方式重写了一遍之后&#xff0…

2026/10/16 22:40:05 阅读更多 →
数模国赛A题热控建模代码骨架:分段PID+ODE求解+约束优化

数模国赛A题热控建模代码骨架:分段PID+ODE求解+约束优化

简介:本资源为2020年全国大学生数学建模竞赛A题的完整MATLAB实现代码包,面向数学建模初学者、参赛学生及算法实践者,聚焦热传导建模、参数反演与多目标优化等典型赛题场景。压缩包共22个文件,含19个核心MATLAB源码(.m&…

2026/10/16 22:40:05 阅读更多 →
K3 Flight 项目全解:2.8万亿参数 Kimi K3 为什么能在纯 CPU 上本地运行?

K3 Flight 项目全解:2.8万亿参数 Kimi K3 为什么能在纯 CPU 上本地运行?

【免费下载链接】K3Flight Run Kimi K3 locally on CPU with ~55GB measured runtime RAM. A single-file Linux inference server powered by cPilot Runtime. 项目地址: https://gitcode.com/gh_mirrors/k3/K3Flight 点击查看 免费下载 K3 Flight 是一个 Linux 单…

2026/10/16 22:39:04 阅读更多 →

日新闻

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

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

2026/10/16 0:00:05 阅读更多 →
信号与系统频域分析作业解题指南

信号与系统频域分析作业解题指南

1. 作业背景与核心要求解析信号与系统作为电子信息类专业的核心基础课,其作业设计往往直接关联课程的核心知识框架。2026年春季第六次作业的布置,通常对应着课程进展到频域分析的关键阶段。根据常规教学进度推测,本次作业可能涉及以下核心内容…

2026/10/16 0:00:05 阅读更多 →
Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

1. 从一个"四不像"的练手项目说起如果你已经看完了Django的官方教程前几章,跟着敲完了投票应用,大概会有一种"我好像会了,又好像什么都不会"的割裂感。教程里每个知识点都是拆开的——这一章讲模型,下一章讲视…

2026/10/16 0:00:05 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/16 21:35:51 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 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/16 21:54:38 阅读更多 →
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/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练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/16 14:23:36 阅读更多 →