混沌置换与矩阵变换:图像加密传输的Matlab实现
图像加密这个方向最近被问得比较多。不管是做课题、写论文还是实际项目中需要在网络上传图纸、截图这类敏感图像“基于混沌置换和矩阵变换实现图像安全传输”都是一个高频出现的选题。这篇内容围绕这条技术路线把混沌置换、矩阵变换、异或扩散这三层操作完整拆开讲一遍附带可以直接运行的Matlab代码以及我在调试过程中踩过的坑和总结出来的经验。适合刚接触图像加密的同学也适合已经跑过几轮常见算法但想真正理解“为什么这么设计”的读者。图像加密的直观诉求很简单发送方把图像变成一团完全看不出内容的“噪声图”接收方拿密钥还原。但这只是表象真正麻烦的是怎么保证变换可逆、密钥够强、而且能扛得住统计分析和差分攻击。只看论文公式很难落地很多实现跑出来要么解密全是条纹要么加密后边缘轮廓还隐约可见。下面就从设计思路开始一步步把一套能跑通的完整方案搭出来。1. 整体设计与方案选型1.1 为什么是混沌系统而不是普通伪随机数做图像置乱最直觉的办法是用Matlab自带的伪随机数比如randperm直接生成一套随机索引打乱像素位置解密时用同一个rng种子逆回来。这种做法写出来非常简单但工程上和密码学上都有明显短板伪随机序列的种子空间有限安全性偏弱而且很多内置随机数生成器在同一个进程里的行为是可复现但可预测的。如果攻击者知道算法和种子生成逻辑就非常被动。混沌系统的好处是“初值敏感”。以经典的Logistic映射为例给定两个完全不同的初始值哪怕差别只有小数点后十几位迭代几次之后序列也会迅速分道扬镳。这意味着只要把密钥设计成“初始值参数量”接收方用同一个密钥才能生成完全一样的混沌序列密钥差一点点都解不开。这个特性天然契合加密需求而且每次通信只要换初始值就用不到提前预存大段随机数表运行成本也不高。在工程实现里混沌序列需要先“暂态丢弃”。因为从初始值开始迭代的前几百项往往还带有明显的收敛过程直接拿来做密钥流会让加密结果出现规律性纹理。通常的做法是丢弃前500到2000项我自己的测试里drop取1000比较稳妥既避免暂态又不至于让序列生成时间明显拉长。1.2 置换、矩阵变换、扩散三层组合的设计逻辑如果只做像素位置置换也就是把整幅图看成拼图重新排列那么像素的颜色值本身没有改变。攻击者把置换后的图像做直方图统计依然能拿到原始像素值的分布信息灰度图更是容易被看出轮廓。所以仅仅“换位置”不够还得让像素值本身发生改变。这里采用的思路是三层组合混沌置换层负责把所有像素的位置彻底打乱。矩阵变换层把相邻像素两两成组做模256的矩阵乘法让每个像素的新值同时受到另一个像素影响。混沌扩散层用另一段混沌序列生成伪随机矩阵与图像逐像素按位异或进一步掩盖统计特征。三层组合就像把一封信先撕成碎片、再给每块碎片重新涂色、最后再套一层随机密文信封。单纯一层置换容易被直方图攻击单纯一层异或则缺少位置变化三者叠起来才是常见的“置乱-扩散”密码结构。矩阵变换层尤其重要它让单个像素值的变化能够影响同组像素为后续抗差分攻击打下基础。1.3 加密解密流程与安全性定位整个加密流程是由密钥(u, x0)生成两段混沌序列分别叫permStream和xorStream。用permStream排序得到索引把图像像素做一维全图置换。把置换结果恢复成矩阵按行相邻两列像素成对做矩阵变换结果对256取模。把xorStream映射成0到255的整数矩阵与上一步结果逐像素按位异或得到最终密文。解密流程则完全反过来先异或还原再做矩阵逆变换最后逆置换。密码学上这是对称加密发送端和接收端必须共享同一份密钥。安全边界上也必须承认序列的随机性来源于混沌映射但密钥传输本身需要额外保障这部分不在图像算法范围内实际项目要结合密钥交换方案一起设计。注意千万不要把加密后的图像直接当成“安全通道”。密文图像只是让截获者无法直接读取内容密钥的保密性和完整性依旧是整个系统的命门。2. 核心原理与准备工作2.1 Logistic混沌映射的数学基础与参数选择Logistic映射公式[ x_{n1} u \cdot x_n \cdot (1 - x_n) ]其中 (u) 在 0 到 4 之间(x_n) 在 0 到 1 之间。当 (u) 处于 3.5699 到 4 范围内时系统进入混沌区迭代序列看起来随机且对初始值极其敏感。参数选择有几个常见坑。第一(x_0) 不能取 0、0.25、0.5、0.75、1 这类特殊点否则序列会收敛到固定值或进入短周期。第二(u) 不是越接近4越好理论上接近4时混沌特性更强但在浮点运算下也可能更快进入周期退化所以我习惯取u 3.999配合丢弃前1000个点来规避退化风险。第三双精度浮点实际上只能提供约 (2^{53}) 量级的有效状态空间严格评价密码强度时不能拍着胸脯说“无限大”但工程场景下已经远高于普通暴力破解成本。序列生成在Matlab里就是循环迭代注意这里不要用向量化偷懒因为每一步都依赖上一步结果老老实实用for循环最清晰。真实的加密过程中同样的代码在发送端和接收端各跑一遍只要(u, x0)一致生成的序列就完全一致。2.2 矩阵变换与模256逆矩阵矩阵变换这层的核心是一个2×2矩阵 (A)和一个由两个像素组成的列向量做乘法[ \begin{bmatrix} y_1 \ y_2 \end{bmatrix} A \cdot \begin{bmatrix} x_1 \ x_2 \end{bmatrix} \mod 256 ]这里选[ A \begin{bmatrix} 1 1 \ 1 2 \end{bmatrix} ]行列式为 (1)这是一个刻意选择。因为图像像素值范围是0到255所有运算都要落回模256的整数环上。如果矩阵行列式与256不互质矩阵就不可逆解密时会丢失信息。行列式是1意味着不仅可逆而且逆矩阵也是整数矩阵计算非常干净。用伴随矩阵法可以算出模256下的逆阵[ A^{-1} \begin{bmatrix} 2 -1 \ -1 1 \end{bmatrix} \mod 256 \begin{bmatrix} 2 255 \ 255 1 \end{bmatrix} ]我第一次算的时候直接用了inv(A)结果得到一堆小数解密图像全是噪点。后来手动按模逆元算才会明白这里的逆矩阵必须在模256意义下成立而不是实数矩阵的逆。这个细节是很多初学实现跑不通的根源。2.3 Matlab运行环境与代码结构规划需要准备的工作很少只需要一个能运行Matlab的环境推荐R2016b以上版本基本图像处理和矩阵运算函数都够用。示例代码可以用Matlab自带的灰度测试图cameraman.tif没有的话用rice.png、pout.tif都行或者用uint8(rand(256,256)*255)生成随机灰度图做测试。代码结构规划为三个部分加密函数chaos_encrypt输入原始灰度图和密钥输出密文图。解密函数chaos_decrypt输入密文图和相同密钥输出还原图。测试脚本读取图片、调用加解密、显示结果、计算安全指标。把加解密封装成独立函数而不是全部堆在主脚本里后面做密钥敏感性测试、差分攻击测试时只需要循环调用函数不用反复复制粘贴代码。这是我在项目X里养成的习惯模块化越细调试越快。3. 完整实现与关键步骤解读3.1 加密端实现下面给出一份可运行的加密函数。这里默认处理灰度图且图像宽度为偶数方便矩阵变换时两两分组。奇数尺寸的处理方案在第5节单独说明。function cipher chaos_encrypt(img, u, x0, drop) % 混沌图像加密置换 矩阵变换 异或扩散 % 输入: img - uint8灰度图 % u, x0 - Logistic混沌参数与初值 % drop - 丢弃暂态点数 % 输出: cipher - 密文图像, uint8, 尺寸与原图一致 [M, N] size(img); p double(img(:)); % 生成两段混沌序列: % 段1 permStream 用于位置置换 % 段2 xorStream 用于异或扩散 totalLen 2 * M * N drop; x zeros(totalLen, 1); x(1) x0; for i 2 : totalLen x(i) u * x(i-1) * (1 - x(i-1)); end seq x(drop1 : end); permStream seq(1 : M*N); xorStream seq(M*N1 : 2*M*N); % 第一步: 一维全局位置置换 [~, permIdx] sort(permStream); permuted p(permIdx); pMat reshape(permuted, M, N); % 第二步: 矩阵变换, 按行相邻两列成对处理 left pMat(:, 1:2:N); right pMat(:, 2:2:N); pairs [left(:); right(:)]; A [1 1; 1 2]; transPairs mod(A * pairs, 256); transMat pMat; transMat(:, 1:2:N) reshape(transPairs(1,:), M, N/2); transMat(:, 2:2:N) reshape(transPairs(2,:), M, N/2); % 第三步: 混沌矩阵异或扩散 keyMat uint8(floor(xorStream * 255)); cipher bitxor(uint8(transMat), keyMat); end这段代码里最容易被忽略的地方是pairs的组织方式。按行相邻两列分组本质上把每个像素对当作一个2维向量矩阵变换会让left位置的新值同时依赖原始left和right两个值。这样单个像素的改动会传播到另一个位置为扩散效果铺垫。第二个容易踩坑的地方是数据格式。img(:)是uint8如果不转double直接与A相乘Matlab可能会做类型截断矩阵乘法的结果会和预期完全不同。我在代码里用double显式转换算完再转回uint8这就是为了保证模256运算精确。3.2 解密端实现解密端代码与加密端对称但每一步都要用对应的逆操作。顺序必须严格遵守先逆异或再逆矩阵变换最后逆置换。function img chaos_decrypt(cipher, u, x0, drop) [M, N] size(cipher); totalLen 2 * M * N drop; x zeros(totalLen, 1); x(1) x0; for i 2 : totalLen x(i) u * x(i-1) * (1 - x(i-1)); end seq x(drop1 : end); permStream seq(1 : M*N); xorStream seq(M*N1 : 2*M*N); % 第一步: 逆异或 keyMat uint8(floor(xorStream * 255)); xored bitxor(uint8(cipher), keyMat); % 第二步: 逆矩阵变换 Ainv [2 255; 255 1]; left xored(:, 1:2:N); right xored(:, 2:2:N); pairs [left(:); right(:)]; invPairs mod(Ainv * double(pairs), 256); invMat zeros(M, N); invMat(:, 1:2:N) reshape(uint8(invPairs(1,:)), M, N/2); invMat(:, 2:2:N) reshape(uint8(invPairs(2,:)), M, N/2); % 第三步: 逆置换 [~, permIdx] sort(permStream); invFlat double(invMat(:)); restored zeros(M*N, 1); restored(permIdx) invFlat; img reshape(uint8(restored), M, N); end解密的关键是“逆置换”的实现方式。加密时permuted p(permIdx)可以理解为原图的第permIdx(i)个像素被搬到了第i个位置。解密时反过来把当前第i个位置的值搬回permIdx(i)所指向的原始位置所以用restored(permIdx) invFlat一行代码就完成了。这里如果写成invFlat(permIdx)结果就会变成二次置换解密图像必然花屏。3.3 测试脚本与效果验证加解密函数写完主脚本非常简单clear; clc; close all; img imread(cameraman.tif); % 自备灰度图也可以 u 3.999; x0 0.123456789; drop 1000; cipher chaos_encrypt(img, u, x0, drop); dec chaos_decrypt(cipher, u, x0, drop); subplot(1,3,1); imshow(img); title(原图); subplot(1,3,2); imshow(cipher); title(密文); subplot(1,3,3); imshow(dec); title(解密图);跑完后肉眼观察密文图应呈现类似雪花般的随机噪声原图的轮廓、亮暗分布、纹理信息完全不可辨解密图应与原图完全相同像素级误差为0而不是“看起来差不多”。如果解密图出现条纹、网格或局部偏色优先检查逆矩阵是否算对、逆置换方向是否写反。4. 安全性评估与对抗能力分析4.1 可视化检查与直方图密文图看着像噪声只是第一步更硬的指标是直方图。原始灰度图的直方图通常有明显峰值和起伏攻击者可以从直方图推测图像内容。加密后直方图应该趋向一条接近水平的均匀分布峰值被抹平。Matlab里看直方图用imhist(cipher)。如果密文直方图仍然呈现明显双峰或周期条纹说明扩散层没有完全掩盖像素分布可能是混沌序列量化方式不够均匀或者矩阵变换分组太小导致局部相关性残留。出现这种情况时可以考虑把floor(xorStream * 255)改成更精细的量化方法例如把连续混沌值映射到0到255的整数时加入取模偏移。4.2 信息熵、相邻像素相关性信息熵衡量像素值分布的均匀程度。对8位灰度图理想的随机图信息熵是8比特。加密后密文熵越接近8说明分布越均匀。计算公式counts imhist(cipher); p counts / sum(counts); p p(p 0); entropy -sum(p .* log2(p));明文图的熵通常远小于8加密后能到7.99以上就算合格。相邻像素相关性是另一个常见指标。自然图像在水平、垂直、对角方向上相邻像素的灰度值高度相关相关系数接近1。加密后应该接近0。测试时随机抽取若干像素对计算相关系数rng(1); [M, N] size(cipher); idx randperm(M*N, 3000); [rows, cols] ind2sub([M, N], idx); keep cols N; rows rows(keep); cols cols(keep); lin1 sub2ind([M, N], rows, cols); lin2 sub2ind([M, N], rows, cols 1); v1 double(cipher(lin1)); v2 double(cipher(lin2)); corrVal corrcoef(v1, v2); corrVal corrVal(1, 2);实测中主要看绝对值密文相关系数落在0.01到0.05之间都算正常偶尔出现负相关也不必担心绝对值越小越好。4.3 密钥敏感性测试密钥敏感性是混沌加密最核心的卖点。测试方法很简单用密钥A加密一张图然后用“只改一小点”的密钥B尝试解密看结果是否完全变样。例如把x0 0.123456789改为x0 0.123456790也就是小数点后第9位差1然后调用解密函数。理想情况下解密输出还是一团噪声与原图完全不同。可以用immse或直接isequal判断正常应有接近100%的像素不一致。这个测试也直接关联到密钥空间。双精度浮点数能提供的有效初值数量不是无限多但差异在 (10^{-9}) 量级都已经解不开说明密钥空间在工程层面足够宽。需要提一句的是严谨的学术评价还会考虑明文敏感性也就是“原图只改一个像素加密后结果应该剧烈变化”这就是差分攻击测试。4.4 抗差分攻击能力NPCR与UACI差分攻击的思路是攻击者小幅修改明文观察密文变化通过规律反推密钥或算法结构。对应指标是像素变化率NPCR和统一平均变化强度UACI。NPCR表示两张密文图像之间不同像素的比例理想加密算法应达到99%以上。UACI表示像素值平均变化程度理想值约为33%。计算方式如下diffMask double(cipher1 ~ cipher2); npcr sum(diffMask(:)) / numel(cipher1) * 100; uaci sum(abs(double(cipher1(:)) - double(cipher2(:))) / 255) / numel(cipher1) * 100;测试时准备两张只有1个像素不同的明文图分别加密得到cipher1和cipher2。由于矩阵变换会把改动传播到同组像素再叠加异或扩散层整个图像的像素值都会被牵动最终NPCR通常会非常接近99.6%UACI靠近33%。如果这两个指标明显偏低说明扩散能力不足需要注意增加混沌序列与明文之间的耦合常见做法是增加一轮加密或让密钥流依赖明文特征。5. 常见问题与调试实录5.1 解密图像出现条纹或花屏这是最常遇到的问题几乎每个第一次实现这个方案的人都会撞上。条纹和花屏的根源大概率是逆操作顺序错误或者逆矩阵用错。以我自己的排查顺序为例先确认异或层是否还原把解密代码中的异或部分单拎出来对比bitxor(bitxor(cipher, key), key)是否等于原值。再确认矩阵变换的逆阵用mod(A * Ainv, 256)看是否得到单位阵。最后确认逆置换方向手动用4个像素的小矩阵推演一遍而不是直接跑大图。之前有个阶段解密图出现“局部正确、整体错乱”最后定位就是逆置换索引方向写反了。5.2 图像数据类型带来的溢出问题Matlab的uint8直接参与乘法和加法会自带饱和截断超过255自动变成255这不符合模256运算的要求。因此所有矩阵变换步骤都必须先转double计算取模后再转回uint8。相似的坑也出现在bitxor里。bitxor要求输入类型一致如果左边是uint8右边是double会直接报错。因此密钥矩阵也要先转uint8。这类类型错误本身不难解决麻烦的是有时候Matlab不报错而是静默做类型转换结果悄悄出错解密时才暴露。5.3 混沌序列周期退化Logistic映射在浮点环境下迭代几千次后可能出现周期退化或局部收敛。最直接的缓解办法就是drop取大一些把暂态彻底丢掉。更稳健的方案是引入双混沌系统比如Logistic和Tent映射交叉迭代或者每迭代一定次数后对序列值加上一个扰动偏移破坏可能形成的周期。如果做课题评审建议在论文里如实写清楚使用双精度浮点的局限并说明采取了哪些补偿手段。这比硬吹“密钥空间无穷大”要可信得多。实际项目中还可以考虑用高精度符号计算或者自定义整数域混沌但那又会牺牲速度需要根据场景取舍。5.4 非偶数尺寸图像怎么办矩阵变换按两列分组图像宽度为奇数时最后一列没有配对。最简单的处理方式是在加密前给图像右侧补一列值可以补128或随机值解密后裁剪掉最后一列。这样虽然增加了一列冗余但能保证流程统一。另一个思路是改用“整体一维两两分组”把所有像素平铺成一维数组从第一个像素开始两个一组做矩阵变换末尾若剩一个像素则保持不变。这种方式对行列尺寸都不敏感但会让一维顺序与二维图像空间失去直接对应关系实现时稍微绕一点。两种方案各有取舍我给出的主代码保持了“按行相邻两列分组”的直观性读者可以自行替换。5.5 彩色图像的处理策略彩色图像是三通道结构每个通道是一张灰度图。直接三通道分别调用chaos_encrypt会破坏通道间的相关性而且密文图会变成三通道独立的噪声解密时只要三通道分别还原再合并即可算法本身没有障碍。另一个更常见的做法是先把RGB转成YCbCr只对亮度分量Y做加密色彩分量Cb和Cr保持原样或做轻量置乱。这样做的理由是人的视觉系统对亮度更敏感加密Y分量足以隐藏主要内容同时计算量降到原来的三分之一。具体选哪种要看应用场景对安全性的要求有多高以及带宽是否紧张。5.6 密钥分发与安全传输的边界再强调一次图像加密算法保护的是“图像在传输过程中不被直接读取”。发送端和接收端之间如何安全地共享(u, x0)属于密钥管理问题可以用线下约定、非对称加密协商等方式解决。如果把密钥和密文放在同一个通道里传输攻击者截获后一解便知整个加密就形同虚设。实际落地时建议把密钥单独序列化例如组合成字符串u3.999,x00.123456789,drop1000再交给上层安全模块。接收端解析后传入解密函数。还要注意算法版本和参数校验密钥字符串里加上版本号可以避免未来升级算法后旧密文无法解开。我个人在实际操作中的体会是这种三层结构的混沌图像加密原理并不复杂真正花时间的地方全在“可逆性”和“数据类型”这些细节上。第一次把逆矩阵换成模256下的整数矩阵、把逆置换写成restored(permIdx) invFlat之后解密图不是“接近原图”而是完全一致那一刻整条链路才算真正打通。最后再分享一个小技巧调试混沌加密时不要一上来就跑256×256的大图先用8×8或16×16的小矩阵把流程跑通并用disp打印中间结果手算一遍验证对了再放大图。图像尺寸越小问题暴露得越快。等小图完全无误再换标准测试图做安全指标分析这样能省下非常多排错时间。这个框架后续还可以扩展成多轮加密、三通道彩色处理、混沌参数动态更新等方向但核心的置换、矩阵变换、异或扩散三层结构不变把基础打牢比堆花活重要得多。

相关新闻

platform-tools r28.0.1详解:Windows下adb与fastboot调试刷机指南

platform-tools r28.0.1详解:Windows下adb与fastboot调试刷机指南

简介:platform-tools_r28.0.1-windows是Android SDK中platform-tools组件的离线压缩包,面向Android应用开发、自动化测试及移动设备管理场景,核心是基于ADB(Android Debug Bridge)命令行的设备通信与调试工具集&#x…

2026/10/16 14:37:43 阅读更多 →
Roblox玩法辅助:乙骨法术随机生成器Lua脚本详解

Roblox玩法辅助:乙骨法术随机生成器Lua脚本详解

这次我们来看一个 Roblox 玩法辅助脚本:乙骨法术随机生成器。它不是 AI 模型,不占显存,也不吃显卡,核心就是一个用 Lua 写的随机配置工具,专门解决一类问题:在乙骨这类技能池很大的角色玩法里,手…

2026/10/16 14:36:43 阅读更多 →
Windows服务器开放8080端口:防火墙配置与常见坑位排查

Windows服务器开放8080端口:防火墙配置与常见坑位排查

简介:针对 Windows 服务器需要开放特定端口的典型场景,这份操作指引以打开 8080 端口为例,面向运维人员、开发者和刚接触服务器管理的初级用户,解决部署 Web 服务或调试应用时因防火墙拦截导致的外部无法访问问题。文档以 docx 格…

2026/10/16 14:36:43 阅读更多 →

最新新闻

嵌入式源码怎么读?6大经典项目拆解状态机、PID与低功耗实战

嵌入式源码怎么读?6大经典项目拆解状态机、PID与低功耗实战

简介:这个资源汇集了6个可直接研读的经典嵌入式项目源码,面向嵌入式初学者与进阶开发者,尤其适合希望了解ARM处理器外设驱动、启动初始化及通信协议实现的工程师。整个压缩包共含约300个文件,以C源码、H头文件为核心,并…

2026/10/16 15:54:19 阅读更多 →
ROS2网络摄像头驱动:基于GStreamer的RTSP拉流Demo全解析

ROS2网络摄像头驱动:基于GStreamer的RTSP拉流Demo全解析

简介:这是一套基于ROS2的海康网络RTSP摄像头驱动Demo,主要面向在Ubuntu20.04环境下开展机器人开发、视觉SLAM或目标检测的开发者,解决海康网络摄像头接入ROS2生态时缺乏即用驱动的问题。资源包整体约8KB,仅9个文件,以2…

2026/10/16 15:54:19 阅读更多 →
FATFS R0.14b移植与配置详解:从底层原理到量产避坑

FATFS R0.14b移植与配置详解:从底层原理到量产避坑

简介:FATFS R0.14b是轻量级嵌入式文件系统模块的官方源代码包,由Mizuki Chinen维护,发布于2021年4月。该版本面向STM32等各类微控制器平台,提供标准FAT文件系统读写能力,适合需要在资源受限设备上实现文件存储功能的嵌…

2026/10/16 15:54:19 阅读更多 →
网狐荣耀版十三水UI开发实战:牌桌布局与状态动画避坑指南

网狐荣耀版十三水UI开发实战:牌桌布局与状态动画避坑指南

简介:这是一套面向十三水(罗宋牌)游戏玩家及棋牌UI设计师的界面资源,定位于帮助开发者快速理解并复用网狐荣耀版十三水游戏的视觉与交互方案。压缩包大小约8.15MB,目前已有1458人学习/下载。资源围绕牌面布局、操作按钮…

2026/10/16 15:54:18 阅读更多 →
STM32F407/405标准库串口DMA收发实战:从IDLE中断到双缓冲避坑指南

STM32F407/405标准库串口DMA收发实战:从IDLE中断到双缓冲避坑指南

简介:这份资源面向使用STM32F405/407进行嵌入式开发的工程师与学习者,聚焦标准库下UART串口与DMA协同的数据收发实现,可解决高吞吐量通信中CPU占用过高、实时性不足的问题,适用于工业控制、步进电机控制等对响应速度有要求的场景。…

2026/10/16 15:54:18 阅读更多 →
TensorFlow 2.0实战Wide  Deep模型:原理、代码与调优全解析

TensorFlow 2.0实战Wide Deep模型:原理、代码与调优全解析

TensorFlow 2.0入门到进阶系列写到现在,前面已经跑通了DNN、CNN、RNN这些基础结构。这一篇来聊一个在推荐系统、广告CTR预估场景里非常经典,而且至今还在大量使用的模型——Wide & Deep。我最早接触这个模型,还是在某次技术交流会上&…

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

日新闻

个人 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/15 16:18:54 阅读更多 →
影刀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/15 0:14:36 阅读更多 →
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 阅读更多 →