自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(108)
  • 收藏
  • 关注

原创 线性代数之向量、矩阵求导公式

本文系统梳理了矩阵求导的基本概念与运算规则。主要内容包括:1)两种布局约定(分子布局和分母布局)及其维度关系;2)不同变量组合的求导定义(标量对向量/矩阵、向量对标量/矩阵等);3)核心运算法则(线性法则和乘积法则)。重点阐述了向量对向量求导的两种布局形式及其转换关系,并给出了标量对矩阵求导的具体示例。文中通过表格和公式清晰地展示了各类求导结果的维度关系,为矩阵微积分运算提供了系统的参考框架。

2025-08-01 07:30:00 341

原创 通过MATLAB符号计算推导透视逆变换

本文系统介绍了透视变换及其逆变换的推导过程。透视变换是一种将图像从一个视角投影到另一个视角的3×3矩阵变换,可以将矩形映射为任意四边形,广泛应用于图像校正和视角变换。文章详细阐述了透视变换的数学原理和参数含义,重点推导了透视逆变换的解析解,通过MATLAB符号计算和克莱姆法则两种方法得到一致结果。验证表明,两种推导方式虽然表达式不同但均正确有效。透视逆变换在计算机视觉中具有重要应用价值,如反投影和去畸变等场景,其适用条件是变换矩阵行列式不为零。

2025-07-28 07:30:00 1508

原创 如何使用MATLAB内置函数solve进行符号计算(求解方程)

本文介绍了MATLAB中符号计算(solve)和数值求解(fsolve)两种方法的区别与应用。符号计算基于数学定理推导,可得到解析解,适用于代数方程和微分方程求解;数值计算则通过离散化处理获得近似解,适用于复杂非线性方程组。文中通过具体示例展示了两种方法的实现步骤,包括单变量方程、多变量方程组以及微分方程的求解过程,并对比了二者的计算精度与适用场景,为工程计算和理论研究提供了实用参考。

2025-07-26 07:45:00 595

原创 矩阵分解技术全面综述:原理、算法与应用

本文系统介绍了矩阵分解的核心方法,主要包括LU分解、LDLT分解及其应用。LU分解将方阵分解为单位下三角矩阵L和上三角矩阵U的乘积,适用于主元非零的方阵,可用于线性方程组求解和矩阵求逆。LDLT分解是LU分解的对称形式,将对称矩阵分解为LDL^T形式,适用于对称正定矩阵,在优化问题和数值分析中有重要应用。文章详细阐述了各分解方法的数学原理、算法实现步骤(附MATLAB/Python代码)和典型计算示例,为矩阵计算提供了系统的理论基础和实用工具。

2025-07-21 07:15:00 715

原创 图像压缩技术总结(SVD,下采样,DCT,霍夫曼编码)

图像压缩技术分为无损和有损两大类。无损压缩(如霍夫曼编码、LZW)保留原始数据,适合文档和医学图像;有损压缩(如JPEG、WebP)通过DCT变换、量化等技术大幅减少数据量,适用于照片和网络图像。核心方法包括空间域压缩(下采样、预测编码)、变换域压缩(DCT、小波变换)和熵编码(霍夫曼、算术编码)。现代技术如深度学习和SVD提供更高压缩比。JPEG等标准流程结合变换、量化和熵编码实现高效压缩。未来趋势是深度学习与感知优化的结合,不同场景需权衡压缩率、质量和计算复杂度。

2025-07-17 07:30:00 1606

原创 使用MATLAB对符号函数进行求导、积分、求极限

本文介绍了MATLAB符号数学工具箱在函数解析计算中的应用,主要包括符号求导、积分和极限运算。通过diff()函数可实现一阶、高阶导数及偏导数的精确计算;int()函数支持不定积分、定积分及反常积分的求解;limit()函数可计算函数在特定点的极限值,包括左右极限和无穷极限。文章还对比了符号计算与数值计算的差异,并展示了使用subs()函数对符号表达式进行赋值运算的方法。这些功能为数学分析和工程应用提供了强大的解析计算工具,相比数值近似能获得更精确的结果。

2025-07-17 07:30:00 698

原创 SVD、DCT图像压缩实践

摘要:本文介绍了两种图像压缩方法:SVD(奇异值分解)和DCT(离散余弦变换)。SVD通过分解图像矩阵为U、Σ、V三个矩阵,保留前k个奇异值实现压缩,压缩率与图像质量需权衡;实验显示k=50时压缩率为25.70%。DCT则将图像转换到频域,舍弃高频系数(右下角区域)以压缩数据,类似JPEG流程。两种方法均通过MATLAB实现,并对比了不同参数下的压缩效果,SVD直接控制奇异值数量,DCT则通过掩模矩阵选择性保留低频成分。结果表明,两种方法都能有效压缩图像,但压缩率提升会导致质量下降。

2025-07-14 21:58:26 372

原创 LZ4图像压缩实践(大文件数据压缩)

本文介绍了LZ4无损压缩算法的原理及其实现。LZ4基于LZ77算法,通过滑动窗口查找重复数据并用(距离,长度)引用替代,实现高效压缩。其优势在于高速压缩/解压、低CPU占用和可调压缩率。文章详细解析了LZ4的数据格式、压缩流程(扫描+匹配)和解压过程,并提供了C++封装类LZ4ImageProcessor的实现代码,支持RAW数据的压缩和解压功能。该实现通过LZ4官方开源库,在压缩数据前会存储图像宽高信息,解压时进行校验确保数据完整性。

2025-07-14 07:30:00 807

原创 基于霍夫曼(Huffman)编码的图像压缩

摘要 霍夫曼编码是一种基于概率的无损数据压缩算法,通过为高频符号分配短码、低频符号分配长码来构建最优前缀码。本文详细阐述了霍夫曼编码原理,包括构建Huffman树、生成编码表的过程,并以"EABCBAEDBCEEEDCEBABC"为例展示了具体实现步骤。文章还介绍了霍夫曼编解码算法在图像处理中的应用流程,包括树构建、序列化、数据压缩和文件格式规范。最后提供了C++实现的RAW图像压缩代码框架,涵盖频率统计、树构建、编码生成和序列化等关键步骤。该算法能有效减少数据冗余,满足信息熵理论的最小

2025-07-11 07:30:00 796

原创 无约束优化之单纯形法(Nelder-Mead Algorithm)

摘要: 无约束单纯形法(Nelder-Mead方法)是一种无需导数的直接搜索优化算法,适用于求解非线性优化问题。通过维护n维空间的单纯形(n+1个顶点),动态执行反射、扩张、收缩等几何操作调整搜索方向,逐步逼近最优解。其核心优势在于适应非光滑、黑箱函数等复杂场景,但无法保证全局最优性。算法参数包括反射系数(ρ=1)、扩张系数(γ=2)、收缩系数(α=0.5)等,通过迭代更新单纯形结构实现目标函数的最小化。

2025-06-23 07:30:00 590

原创 CUDA编程入门之错误检查

本文介绍了CUDA运行时API的常见错误类型(cudaError_t)及其检测方法,包括cudaSuccess、cudaErrorInvalidValue等常见错误码。文章提供了两种错误检测函数(cudaGetErrorName/GetErrorString)的使用方法,并展示了封装好的错误检查宏CUDA_CHECK和LAST_KERNEL_CHECK的实现代码。此外,还包含了日志打印和设备信息输出的实用函数示例,通过变参实现格式化日志输出,并详细展示了获取GPU设备属性的方法。最后附上了CUDA编程相关参

2025-06-20 21:00:10 889

原创 Python实现图片格式批量转换(支持HEIC)

图像批量转换工具摘要 本文介绍了两种基于Python的批量图像格式转换方案:1)常规图像格式转换,使用Pillow库支持JPG/PNG/BMP等常见格式互转;2)HEIC特殊格式转换,需配合pillow_heif插件处理。两种方案均支持:批量处理文件夹(保留子目录结构)、异常文件自动跳过、输出质量优化。对于HEIC格式的EXIF数据过长问题,提供了清除元数据的解决方案。文章还给出了多线程加速版本,并详细说明使用方法(需安装Pillow和pillow_heif依赖),适用于婚礼照片等大批量图像格式转换场景。

2025-06-18 07:30:00 502

原创 向量/矩阵的范数、谱半径和条件数

本文介绍了向量和矩阵的常见范数定义及计算方法。向量的范数包括L1范数(绝对值之和)、L2范数(欧几里得距离)和无穷范数(最大绝对值);矩阵范数涵盖1范数(最大列和)、2范数(最大奇异值)、无穷范数(最大行和)和Frobenius范数(元素平方和的平方根)。此外还介绍了谱半径(特征值绝对值的最大值)和条件数(衡量矩阵稳定性的指标)。文中给出了各种范数的数学定义、计算示例和对应的MATLAB实现代码,便于实际应用参考。这些概念在线性代数、数值计算等领域具有重要作用。

2025-05-26 07:30:00 958

原创 C++实时统计数据均值、方差和标准差

采用Welford 算法:避免传统方法(如先计算总和再求均值)的浮点数精度损失,保证了数值稳定性。处理边界条件:当数据量(n < 2)时,方差返回0.0。本文算法的优势:内存效率高,仅需要维护3个成员变量,适合实时或大数据场景。对比传统算法:避免存储全部数据,计算复杂度O(1)。

2025-04-28 21:37:30 922

原创 衡量矩阵数值稳定性的关键指标:矩阵的条件数

矩阵的条件数衡量矩阵对扰动或误差的敏感性。对于非奇异矩阵A∈Rn×nA∈Rn×nCondA∥A∥⋅∥A−1∥CondA∥A∥⋅∥A−1∥其中∥⋅∥∥⋅∥为矩阵范数。2-范数(谱条件数)Cond2Aσmax⁡σmin⁡Cond2​Aσmin​σmax​​σmax⁡σmax​和σmin⁡σmin​分别为最大和最小奇异值。1-范数和∞-范数。

2025-04-27 23:05:53 1388

原创 TensorRT入门:ONNX转换为TensorRT引擎文件

trtexec 工具是 TensorRT 的命令行工具,位于 TensorRT 的安装目录中,随 TensorRT 的安装就可以直接使用。trtexec,不仅打包了几乎所有 TensorRT 脚本可以完成的工作,并且扩展丰富的推理性能测试的功能。通常我们使用 trtexec 完成下面三个方面的工作,一是由 Onnx 模型文件生成 TensorRT 推理引擎,并且可以序列化为 .plan 文件。二是可以查看 Onnx 或者 .plan 文件的网络的逐层信息。

2025-04-27 07:30:00 1670

原创 pytorch手动调整学习率

在此,将进行拓展,学习如何手动更新学习率(即不使用pytorch自带的学习率调度器)。当我们在使用预训练的模型时,需要对分类层进行单独修改并进行初始化,其他层的参数采用预训练的模型参数进行初始化,这个时候我们希望在进行训练过程中,除分类层以外的层只进行微调,不需要过多改变参数,因此需要设置较小的学习率。总而言之,通过引入学习率衰减,在模型训练初期,会使用较大的学习率进行模型优化,随着迭代次数增加,模型逐渐收敛,学习率会逐渐进行减小,保证模型在训练后期不会有太大的波动,从而更加接近最优解。

2025-04-22 07:30:00 1114

原创 C++(OpenCV)实现MATLAB的edge(I, “sobel“)边缘检测

函数的C++代码,我们需要复现其完整的边缘检测流程,包括梯度计算、非极大值抑制和阈值处理。此代码实现了类似MATLAB的Sobel边缘检测流程,结合非极大值抑制和自动阈值处理,能够有效提取图像边缘。为了实现类似于MATLAB的。

2025-04-17 20:54:46 503

原创 C++动态链接库的创建及使用

运行时加载:程序运行时动态加载,节省内存。独立更新:更新库无需重新编译主程序。可重用性:由于多个应用程序可以共享一个DLL,因此它们可以共享相同的代码和数据,从而提高了代码的可重用性。节省内存:由于DLL在运行时才加载到内存中,因此它们可以在不占用过多内存的情况下提供所需的功能。稳定性:由于多个应用程序共享相同的DLL,因此如果DLL中的代码或数据发生问题,则可以在一次更新后修复所有使用该DLL的应用程序。

2025-04-17 08:00:00 1828

原创 C#调用C++动态库时出现`System.DllNotFoundException`错误的解决思路

确认DLL位置:将DLL放在C#输出目录。检查依赖项:确保所有依赖的DLL存在。缺少目标XXXdll的依赖,例如要用到的是A.dll,A.dll用到时需要添加B.dll动态库文件,在用到时需要两个dll同时存在。其中,B.dll导出有问题时通过dumpbin检查A.dll不能检查出来,需要进一步检查B.dll。匹配平台:统一x86或x64。验证导出函数:使用dumpbin检查名称。安装VC++运行时:确保目标机器已安装。通过逐步排查上述问题,通常可以解决。

2025-04-07 21:02:43 1382

原创 Dumpbin 完全指南:深入解析所有命令与实战技巧

Dumpbin 是 Microsoft Visual Studio 提供的 COFF/PE 二进制文件分析工具,可以深入分析 EXE、DLL、OBJ、LIB 等文件格式的内部结构。它是逆向工程、性能优化和调试的强大助手。显示文件简要统计信息。

2025-04-07 08:00:00 2404

原创 使用dumpbin和depends查看dll(exe)的依赖

dumpbin只能查看一级依赖,如果需要一次查看所有依赖则需要使用Dependency Walker。Dependency Walker 可以自定义搜索目录,合理设置搜索目录,会大大提高搜索速度!默认情况下,Dependency Walker 会搜索 PATH 指定的路径,所以也可以通过修改 PATH 环境变量的值达到相同的效果。如果长时间(大概 5 秒钟)没有处理界面消息的话,界面就会无响应。VS2017 程序在新电脑环境出现 “无法加载DLL “xxxx.dll“:找不到指定模块。

2025-03-29 20:31:51 1805

原创 相机标定之DLT算法学习

世界坐标系、相机坐标系、图像坐标系、像素坐标系。

2025-03-18 21:12:53 1411

原创 向量内积(点乘)和外积(叉乘)

向量 P 在 Q上的投影可以看作 P 的线性变换

2025-03-09 22:59:49 3022 1

原创 线性代数之矩阵特征值与特征向量的数值求解方法

特征方程与求解方法根据定义A−λIu0A−λIu0若A−λIA−λI非奇异,则方程只有零解。det⁡A−λI0。

2025-03-08 17:11:42 3539

原创 MATLAB实现最小二乘法拟合直线

最小二乘法拟合直线的核心思想是:给定一组数据点xiyi(x_i, y_i)xi​yi​,其中i=1, 2, …, N,我们希望找到一条直线y = kx + b,使得这些点到直线的垂直距离的平方和最小。这里的k是直线的斜率,b是直线的截距。

2025-03-03 08:00:00 1658

原创 SVD拟合平面原理及MATLAB实现

对于平面或直线的拟合,可以采用SVD分解进行求解,其中都是求解最小二乘问题。

2025-03-03 07:30:00 1162

原创 最小二乘法拟合直线(平面和空间)

最小二乘法(英文:least square method)是一种常用的数学优化方法,所谓二乘就是平方的意思。这平方一词指的是在拟合一个函数的时候,通过最小化误差的平方来确定最佳的匹配函数,所以最小二乘、最小平方指的就是拟合的误差平方达到最小。通过上面的式子不难发现,实际计算时,我们只需要计算出t1, t2, t3, t4即可进一步计算a,b。若存在噪声,拟合直线则为最小二乘最优解。求多元函数的极值点,我们可以令其各个偏导数等于0,然后解方程即可。通过解方程进一步得到y=ax+b的参数a和b。

2025-02-23 19:56:56 1149

原创 三维空间中直线的多种表示方法

无论是二维还是三维空间的直线方程,它们都是用来描述满足特定条件的所有点的集合,即直线的轨迹。虽然两者都描述直线,但二维空间直线方程更多地与平面几何相关,表示平面内满足某一条件的所有点的集合。而三维空间直线方程则与立体几何相关,表示空间中满足某一条件的所有点的轨迹,具有更复杂的几何意义。而在三维空间中,由于坐标轴的增多,其表示形式也更多,其中参数方程形式更为常用和直观。这些方法在不同场景下各有优势,参数方程便于生成点,对称式直观,交面式适合代数分析,而Plücker坐标适用于几何计算。

2025-02-23 19:31:59 2954

原创 3D空间中的旋转:欧拉角,旋转矩阵,四元数,旋转向量

一般用一个齐次矩阵表示位姿,即同时表示旋转和平移。MATLAB中的转换函数% 已知按顺序绕n系下x,y,z轴旋转对应角度后得到b系% 即描述物体在n系下的姿态角(角标描述先下后上)% 欧拉角→方向余弦% 欧拉角→四元数% 方向余弦→欧拉角% 方向余弦→四元数% 四元数→方向余弦% 四元数→欧拉角。

2025-02-21 16:13:44 1584

原创 2024年度总结:做一个持续精进的人

这一年过得很快,但只写了38篇博客,对自己并不是很满意,但很庆幸竟然获得了博客之星的评选资格。这入围的条件是什么,我是没有看过的。在此,我也仅仅将个人的想法写了下来,若有不适的地方,敬请大家批评指正。在下一年,将继续不断创作。

2025-01-23 22:58:21 763

原创 C++设计模式学习

设计模式是一种经验总结,它描述了在特定环境中经常出现的问题,并提供了问题解决方案的模板。设计模式就像是一套编程阵法,让你在编程世界中更加游刃有余,掌握了这些阵法,你的代码将更加健壮,逻辑清晰,方便维护。通过学习设计模式,你可以实现代码组件间的高度解耦和协同,让你的应用变得更加稳定和可扩展。使用工厂模式,你可以将对象的创建过程与具体类解耦,让代码更加灵活;使用策略模式,你可以根据不同情境灵活切换算法;使用单例模式,确保一个类只有一个实例,并提供全局访问点;

2024-12-16 16:51:52 1328

原创 UML类图学习

UML类图是UML中最常用的图之一,主要用于描述系统中的类、接口、协作和它们之间的关系,如继承、聚合、组合、依赖和实现。它以反映类的结构(属性、操作)以及类之间的关系为主要目的,描述了软件系统的结构,是一种静态建模方法。类图用来描述系统中有意义的概念,包括具体的概念、抽象的概念、实现方面的概念等,是对现实世界中事物的抽象。类图不仅帮助我们理解系统的静态结构,还能够辅助设计阶段的工作。它们提供了对系统组件的高层次视图,有助于识别系统的关键概念,并促进团队成员之间的交流。

2024-12-12 22:43:39 1310

原创 (C++)堆已损坏CRT detected that the application wrote to memory after end of heap buffer

在使用内存之前,务必一定要确定内存已经分配了,且不要越界,否则会出现此类错误。另外,在调试程序时,最好先在debug模式下跑通,然后再在release下运行,这样也容易排查一些潜在的错误。这篇文章应该就是一个越界使用的例子,本质上也是使用了自己未分配的内存。

2024-12-10 07:30:00 619

原创 pycharm或conda中配置镜像源

由于Python在下载包时,容易出现超时等问题,主要是因为Python库的服务器都在国外,国内下载库的速度会很慢,所以需要配置国内镜像源来加快下载速度。打开pycharm,File – Settings – Project-- Project Interpreter。配置镜像源有两种方式这里以清华镜像源举例,具体用哪个可根据实际情况。然后点击“+”添加镜像源地址(建议先把本地镜像源删除)然后点击“Manage Repositories”也可以通过打开文件来增加删除镜像源。

2024-12-01 14:58:57 3110

原创 深度学习之pth转换为onnx时修改模型定义‌

在将PyTorch模型(.pth文件)转换为ONNX格式时,通常的转换过程是通过torch.onnx.export函数来实现的。这个过程主要是将PyTorch模型的计算图导出为ONNX格式,以便在其他框架或环境中使用。在转换过程中,你通常不能直接在原有的PyTorch模型前后“添加函数”,因为ONNX导出的是静态计算图,它表示的是模型在某一时刻的结构和参数,而不是动态的执行过程。不过,你可以通过‌修改模型定义‌的方式来实现类似的功能。

2024-12-01 13:12:25 775

原创 【python, C++, CUDA】双线性插值(Bilinear Interpolation)实现

双线性插值是一种更为平滑的图像缩放算法,它考虑了目标像素周围四个源像素的影响,并根据距离进行加权。其主要经过三次线性插值得到,如下为线性插值的公式,可以将插值点的值解释为两个点的距离加权,其中距离近的点权重大,距离远的点权重小。已知Q11(x1,y1)、Q12(x1,y2)、Q21(x2,y1)、Q22(x2,y2),求其中点P(x,y)的值。不难发现,其中每个点的权重和对角点到点P的距离是相关的(水平距离x垂直距离)。当然,也可以简化为如下的加权公式,可以看到该点由四个点加权求和得到。

2024-11-28 23:59:57 1399

原创 PyCharm 中Debug时如何在断点处编写测试代码

综上所述,虽然 PyCharm 没有一个特定的插件能在断点下直接执行全新代码,但其内置的调试控制台和 “Evaluate Expression” 功能已经提供了相当强大的交互式调试能力。在调试模式下,PyCharm 提供了一个交互式的调试控制台(Debug Console),你可以在这里执行任意的 Python 代码。这是最直接的方法,在断点处检查和修改变量的状态,或者执行新的代码片段。在 PyCharm 中,你可以使用一些内置功能和插件来增强调试体验,包括在断点处编写和执行新的测试代码。

2024-11-24 21:23:16 1112

原创 最优化之各种牛顿法

牛顿法可以用于求解非线性方程的根(零点),也可以用于求函数的极值点。当问题是求非线性方程的根时,f(x)=0;当问题是求函数的极值点时,f(x)'=0,也就是我们常见的最优化问题。本文主要基于最优化问题对牛顿法进行介绍。

2024-11-16 16:03:36 1903

原创 深度学习之pytorch常见的学习率绘制

在PyTorch中,可以通过torch.optim.lr_scheduler模块提供的多个学习率调度器(Learning Rate Scheduler)来实现学习率的动态调整。这些调度器可以帮助优化训练过程,提高模型的性能。

2024-11-11 07:00:00 1356

jsoncpp源码下载直接使用

jsoncpp源码以及github项目 JsonCpp 是 C++ 中一个常用的第三方 Json 解析库,JsonCpp 是开源以及跨平台的。

2024-06-03

vtk学习资料,VTK图形图像开发进阶及源代码

vtk学习资料: 1.VTK图形图像开发进阶及源代码 2.VTKTextbook 3.VTKUsersGuide

2023-04-25

算法工程师-C++和数学基础知识

C++书籍目录: 1.C++编程规范 2.C++沉思录 3.Effective C++ 4.Primer C++ 5.彻底搞懂C指针 6.程序员的自我修养 数学基础: 1.数值分析 2.数字图像处理第三版 3.统计学习方法 4.泛函分析

2023-04-12

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除