Richardson-Lucy (RL) 反卷积算法 —— 通过不断迭代更新图像估计值
文章目录
- 一、RL反卷积算法
- (1)主要特点
- (2)基本原理
- (3)关键步骤
- (4)优化算法
- 二、项目实战
- (1)RL 反卷积
- (2)优化:RL 反卷积 + Total Variation (TV) 正则化 —— 相比于RL反卷积,效果各有千秋
- (3)优化:RL 反卷积 + 动态停止迭代 —— 用于设置较大迭代次数(如:100)
- (4)优化:RL 反卷积 + 多分辨率(分辨率层数越多,效果越好) —— 相比于输入图像略有提升,但不如RL反卷积
一、RL反卷积算法
Richardson-Lucy(RL)反卷积算法
:是一种基于最大似然估计(Maximum Likelihood Estimation, MLE)的图像去卷积方法,常用于去模糊和图像增强。通过不断地更新图像估计值,来最小化模糊图像和恢复图像之间的误差,逐步消除模糊,最终接近真实的原始图像,每次迭代都会根据当前估计的图像来修正下次迭代的结果。该算法最初由 Richardson 和 Lucy 在 1972 年提出,应用于天文学中的 X 射线成像,但随后被广泛应用于各类图像处理领域,尤其是在医学成像、显微镜图像分析、遥感图像恢复等领域取得了显著的应用成果。
(1)主要特点
- RL 算法在处理具有已知点扩散函数(Point Spread Function,PSF)的图像时表现较好,适用于泊松噪声或高斯噪声的图像。对于强噪声或未知 PSF 的图像,算法的效果可能受到影响。
- (1)不仅能恢复模糊图像,还能处理一定类型的噪声 —— 最适合处理泊松噪声,对高斯噪声也有一定的适应性。
- (2)点扩散函数(PSF)是描述成像系统模糊特性的函数,它决定了图像的模糊程度。RL 反卷积的性能与 PSF 的估计精度密切相关。RL 反卷积能够很好地恢复使用已知 PSF 的图像,并且可以处理某些复杂的模糊(如运动模糊和焦距模糊),但对未知或不准确估计的 PSF 较为敏感,恢复效果较差。
已知的PSF(效果最优)
- 适用情况:如果模糊过程中的 PSF 已知,RL 反卷积能够利用该信息进行精准的图像恢复。这是 RL 反卷积最常见的应用场景。
- 效果:在这种情况下,RL 可以准确地去除图像中的模糊,恢复出接近原始图像的细节。
未知的PSF(效果打折)
- 适用情况:在实际应用中,PSF 可能并不完全已知,这时需要通过其他方法进行估计。常见的 PSF 估计方法包括自适应估计、图像梯度法等。
- 效果:如果 PSF 的估计不准确,RL 反卷积的恢复效果会显著降低,因为不准确的 PSF 可能导致图像恢复过程中出现严重的伪影或不真实的细节。在这种情况下,RL 的效果会大打折扣,恢复出的图像质量可能不如预期。
扩展的PSF(效果复杂)
- 适用情况:在一些情况下,模糊过程可能是由多个不同的模糊源引起的。例如,图像可能同时经历了不同类型的运动模糊和焦距模糊,这些模糊可能由不同的 PSF 共同作用。
- 效果:RL 算法能够处理一定程度的复合模糊(即多个 PSF 的组合),但需要足够的迭代次数和合适的初始估计,效果较为复杂且不一定完全精确。
(2)基本原理
- 基本思想:利用图像的模糊模型,通过迭代过程逐步逼近原始图像。
- 模糊过程:通常可以通过卷积(或乘积)来表示,即假设
模糊图像 𝑔
是原始图像 𝑓
与点扩散函数(PSF)ℎ
的卷积操作∗
:𝑔 = 𝑓 * ℎ + noise
。 - 迭代更新:通过对 𝑔 进行迭代更新,逐步恢复 𝑓,即寻找一个最佳的 𝑓,使得通过卷积得到的结果最接近模糊图像 𝑔。
(3)关键步骤
- 初始化:首先需要选择一个初始图像,通常可以选择为全 1 图像或其他合适的初值。
- 迭代更新:根据最大似然估计,通过不断迭代更新图像估计值。在每次迭代中,根据当前图像估计与模糊图像的比值进行更新,直到达到停止条件(如达到最大迭代次数或收敛)。
- 停止条件:通常基于误差的收敛或达到预设的最大迭代次数来停止。
(4)优化算法
Richardson-Lucy 反卷积算法在图像去模糊和恢复过程中,可能会放大噪声,导致伪影和失真。为了提高恢复质量,可以采用以下优化策略:
- 噪声抑制:在 RL 迭代过程中,噪声可能会被放大,因此可以引入以下方法进行抑制:
- Wiener 滤波:在 RL 迭代前或后使用 Wiener 滤波,以抑制高频噪声并平滑图像。
- 约束最小二乘 (Constrained Least Squares, CLS):在 RL 过程中加入约束条件,减少噪声放大,增强稳定性。
- 迭代终止准则:RL 反卷积的迭代次数过多可能导致过拟合噪声,可以采取以下策略动态终止:
- 计算相邻两次迭代结果的差异,若变化幅度低于阈值,则停止迭代。
- 根据噪声水平设定最大迭代次数,防止过度增强噪声。
- 正则化技术:在 RL 反卷积过程中,可加入正则化约束,以避免恢复过程中过度增强噪声或出现伪影:
- Total Variation (TV) 正则化:通过抑制图像的总变差,减少高频噪声,同时保留边缘信息。TV 正则化可与 RL 结合,在每次迭代后进行 TV 去噪。
- L2 正则化:通过约束恢复图像的幅值变化,减少震荡效应,增强鲁棒性。
- 多分辨率策略:对于复杂模糊情况,可以使用多分辨率(图像金字塔) 进行优化:
- 低分辨率恢复 → 逐步细化至高分辨率:先在低分辨率图像上进行 RL 反卷积,然后逐步增加分辨率,细化细节。
- 拉普拉斯金字塔分解:在不同尺度恢复低频信息,并逐层添加高频细节,避免直接高分辨率恢复带来的噪声放大问题。
- 结合深度学习
- 使用深度神经网络(如 U-Net、GAN)辅助 RL 反卷积,提高去模糊效果。
- 通过深度学习预测更合理的 PSF(点扩散函数),提升恢复质量。
二、项目实战
(1)RL 反卷积
import numpy as np
import cv2
import matplotlib.pyplot as plt
from scipy.ndimage import gaussian_filterdef generate_psf(size=5, sigma=3):"""更灵活的生成 PSF"""psf = np.zeros((size, size))psf[size//2, size//2] = 1 # 设置中心点psf = gaussian_filter(psf, sigma=sigma) # 高斯模糊psf /= psf.sum() # 归一化return psfdef richardson_lucy_deconvolution(image, psf, iterations=10):"""使用 Richardson-Lucy 算法进行图像去卷积(去模糊)。参数::param image: 输入的模糊图像。:param psf: 点扩散函数(PSF)。:param iterations: 迭代次数。:return: 去模糊后的图像。"""# (1)初始化估计图像# estimate = np.copy(image).astype(np.float32) # 使用输入图像,作为初始估计图像estimate = np.ones_like(image, dtype=np.float32) # 使用全 1 的图像,作为初始估计图像# (2)获取 PSF 的共轭矩阵psf_conj = np.conj(psf) # 共轭矩阵 = 矩阵的转置 + 虚数单位矩阵# (3)迭代过程for _ in range(iterations):convolved = cv2.filter2D(estimate, -1, psf) # 计算卷积(估计图像与 PSF)relative_blur = image / (convolved + 1e-8) # 计算比值(模糊图像与卷积结果) ———— 1e-8防止除零错误correction = cv2.filter2D(relative_blur, -1, psf_conj) # 计算卷积(比值图像与 PSF 的共轭矩阵)estimate *= correction # 更新估计图像return estimateif __name__ == '__main__':image = cv2.imread('YH220_235_gaussianBlur.png', cv2.IMREAD_GRAYSCALE)###################################################################################"""定义高斯PSF"""psf = cv2.getGaussianKernel(5, 3) # 5x5 高斯核psf = psf @ psf.T # 生成 2D 高斯核print("psf =", psf)"""##################################################################################函数说明:cv2.getGaussianKernel(ksize, sigma)参数说明:ksize(核大小):生成的1D高斯核。如 5×1,通过 @ 矩阵乘法扩展成 5×5。核的尺寸一般为奇数(如 3、5、7...),以保证卷积中心对称。较小高斯核:仅影响邻近像素,去模糊能力较弱。较大高斯核:影响范围更大,适合更大尺度的模糊或去噪。sigma(标准差):控制高斯分布的 扩散程度,值越大,高斯分布越平滑(即模糊范围更大)。较小sigma:高斯核集中,影响范围小(锐化效果更强)。较大sigma:高斯核扩展,影响范围大(模糊效果更强)。###################################################################################"""value = 1if value == 0:"""单次测试"""restored_image = richardson_lucy_deconvolution(image, psf, iterations=10)plt.figure(figsize=(12, 6))plt.subplot(1, 2, 1), plt.title("Blurred Image"), plt.imshow(image, cmap='gray'), plt.axis('off')plt.subplot(1, 2, 2), plt.title("Restored Image"), plt.imshow(restored_image, cmap='gray'), plt.axis('off')plt.show()elif value != 0:"""多次测试"""results = []for iters in range(12):results.append(richardson_lucy_deconvolution(image, psf, iterations=iters))# 可视化plt.figure(figsize=(12, 8))for i, (img, iters) in enumerate(zip(results, range(12))):plt.subplot(3, 4, i+1)plt.imshow(img, cmap='gray')plt.title(f'iterations: {iters}')plt.axis('off')plt.tight_layout()plt.show()
(2)优化:RL 反卷积 + Total Variation (TV) 正则化 —— 相比于RL反卷积,效果各有千秋
import numpy as np
import cv2
import matplotlib.pyplot as plt
from skimage.restoration import denoise_tv_chambolledef richardson_lucy_deconvolution(image, psf, iterations=10, tv_denoise=True):estimate = np.ones_like(image, dtype=np.float32) # 初始化估计图像psf_conj = np.flip(psf) # 取 PSF 的翻转(近似共轭)for i in range(iterations):convolved = cv2.filter2D(estimate, -1, psf)relative_blur = image / (convolved + 1e-8)correction = cv2.filter2D(relative_blur, -1, psf_conj)estimate *= correctionif tv_denoise:print(f"iterations: {i}, TV denoise: {tv_denoise}")estimate = denoise_tv_chambolle(estimate, weight=0.2) # TV 去噪return estimateif __name__ == '__main__':# 读取输入图像(灰度图)image = cv2.imread('YH220_235_gaussianBlur.png', cv2.IMREAD_GRAYSCALE)if image is None:raise FileNotFoundError("图像文件未找到,请检查路径!")# 定义高斯 PSF(点扩散函数)psf = cv2.getGaussianKernel(5, 3) # 5x1 高斯核psf = psf @ psf.T # 生成 5x5 2D 高斯核# 进行 Richardson-Lucy 反卷积restored_image = richardson_lucy_deconvolution(image, psf, iterations=10)# 显示结果plt.figure(figsize=(12, 6))plt.subplot(1, 2, 1), plt.title("Blurred Image"), plt.imshow(image, cmap='gray'), plt.axis('off')plt.subplot(1, 2, 2), plt.title("Restored Image"), plt.imshow(restored_image, cmap='gray'), plt.axis('off')plt.show()
(3)优化:RL 反卷积 + 动态停止迭代 —— 用于设置较大迭代次数(如:100)
采用 PSNR、MSE 或 SSIM 作为衡量标准,动态决定何时停止迭代。
目前你的代码采用的是固定 10 次迭代,但在实际应用中,RL 迭代次数的选择很重要:
- 过少迭代:图像仍然模糊,恢复效果不理想。
- 过多迭代:可能放大噪声,导致伪影。
import numpy as np
import cv2
import matplotlib.pyplot as plt
from skimage.metrics import peak_signal_noise_ratio as psnrdef richardson_lucy_deconvolution(image, psf, iterations=50, tol=1e-3):estimate = np.ones_like(image, dtype=np.float32)psf_conj = np.flip(psf)prev_psnr = 0for i in range(iterations):convolved = cv2.filter2D(estimate, -1, psf)relative_blur = image / (convolved + 1e-8)correction = cv2.filter2D(relative_blur, -1, psf_conj)estimate *= correction# 计算 PSNR,若提升不明显则终止迭代current_psnr = psnr(image, estimate)print(f"Iteration {i + 1},"f"prev_psnr = {prev_psnr:.2f}, "f"current_psnr: {current_psnr:.2f}, "f"PSNR DIFF: {abs(current_psnr - prev_psnr):.2f}")if abs(current_psnr - prev_psnr) < tol:print(f"Early stopping at iteration {i + 1}")breakprev_psnr = current_psnrreturn estimateif __name__ == '__main__':# 读取输入图像(灰度图)image = cv2.imread('YH220_235_gaussianBlur.png', cv2.IMREAD_GRAYSCALE)if image is None:raise FileNotFoundError("图像文件未找到,请检查路径!")# 定义高斯 PSF(点扩散函数)psf = cv2.getGaussianKernel(5, 3) # 5x1 高斯核psf = psf @ psf.T # 生成 5x5 2D 高斯核# 进行 Richardson-Lucy 反卷积restored_image = richardson_lucy_deconvolution(image, psf, iterations=100, tol=0.5)# 显示结果plt.figure(figsize=(12, 6))plt.subplot(1, 2, 1), plt.title("Blurred Image"), plt.imshow(image, cmap='gray'), plt.axis('off')plt.subplot(1, 2, 2), plt.title("Restored Image"), plt.imshow(restored_image, cmap='gray'), plt.axis('off')plt.show()
"""
Iteration 1,prev_psnr = 0.00, current_psnr: 43.01, PSNR DIFF: 43.01
Iteration 2,prev_psnr = 43.01, current_psnr: 48.22, PSNR DIFF: 5.20
Iteration 3,prev_psnr = 48.22, current_psnr: 43.99, PSNR DIFF: 4.22
Iteration 4,prev_psnr = 43.99, current_psnr: 42.24, PSNR DIFF: 1.75
Iteration 5,prev_psnr = 42.24, current_psnr: 41.34, PSNR DIFF: 0.91
Iteration 6,prev_psnr = 41.34, current_psnr: 40.78, PSNR DIFF: 0.55
Iteration 7,prev_psnr = 40.78, current_psnr: 40.41, PSNR DIFF: 0.37
Early stopping at iteration 7
"""
(4)优化:RL 反卷积 + 多分辨率(分辨率层数越多,效果越好) —— 相比于输入图像略有提升,但不如RL反卷积
import numpy as np
import cv2
import matplotlib.pyplot as pltdef richardson_lucy_deconvolution(image, psf, iterations=10):"""使用 Richardson-Lucy 反卷积进行图像去模糊"""estimate = np.ones_like(image, dtype=np.float32) # 初始估计图像psf_conj = np.flip(psf) # PSF 共轭矩阵(对 PSF 进行翻转)for _ in range(iterations):convolved = cv2.filter2D(estimate, -1, psf) # 计算卷积relative_blur = image / (convolved + 1e-8) # 计算比值correction = cv2.filter2D(relative_blur, -1, psf_conj) # 计算修正项estimate *= correction # 更新估计图像return estimatedef build_gaussian_pyramid(image, levels):"""构建高斯金字塔(用于多尺度处理)"""pyramid = [image]for _ in range(levels - 1):image = cv2.pyrDown(image) # 逐层降采样pyramid.append(image)return pyramiddef build_laplacian_pyramid(gaussian_pyramid):"""构建拉普拉斯金字塔(保存高频细节)"""laplacian_pyramid = []for i in range(len(gaussian_pyramid) - 1):upsampled = cv2.pyrUp(gaussian_pyramid[i + 1],dstsize=(gaussian_pyramid[i].shape[1], gaussian_pyramid[i].shape[0])) # 调整大小high_freq = cv2.subtract(gaussian_pyramid[i], upsampled) # 计算高频laplacian_pyramid.append(high_freq)laplacian_pyramid.append(gaussian_pyramid[-1]) # 顶层保持不变return laplacian_pyramiddef multi_scale_richardson_lucy(image, psf, iterations=10, levels=3):"""多尺度 Richardson-Lucy 反卷积"""# 1️⃣ 构建高斯金字塔gaussian_pyramid = [image.astype(np.float32)]for _ in range(levels - 1):image = cv2.pyrDown(image)gaussian_pyramid.append(image.astype(np.float32))# 2️⃣ 构建拉普拉斯金字塔(保存高频信息)laplacian_pyramid = build_laplacian_pyramid(gaussian_pyramid)# 3️⃣ 低分辨率层开始反卷积estimate = richardson_lucy_deconvolution(gaussian_pyramid[-1], psf, iterations)# 4️⃣ 从低分辨率逐层恢复for i in range(levels - 2, -1, -1):estimate = cv2.pyrUp(estimate, dstsize=(gaussian_pyramid[i].shape[1], gaussian_pyramid[i].shape[0])) # 放大estimate = cv2.resize(estimate, (laplacian_pyramid[i].shape[1], laplacian_pyramid[i].shape[0])) # 确保尺寸匹配# 🚀 **确保数据类型一致**estimate = estimate.astype(np.float32)laplacian_pyramid[i] = laplacian_pyramid[i].astype(np.float32)# 叠加高频信息estimate = cv2.add(estimate, laplacian_pyramid[i])return estimateif __name__ == '__main__':"""加载图像"""image = cv2.imread('YH220_235_gaussianBlur.png', cv2.IMREAD_GRAYSCALE)"""定义高斯PSF"""psf = cv2.getGaussianKernel(5, 3) # 5×5 高斯核psf = psf @ psf.T # 生成 2D 高斯核"""使用多尺度 RL 反卷积进行去模糊"""restored_image = multi_scale_richardson_lucy(image, psf, iterations=10, levels=50)"""可视化结果"""plt.figure(figsize=(12, 6))plt.subplot(1, 2, 1), plt.title("Blurred Image"), plt.imshow(image, cmap='gray'), plt.axis('off')plt.subplot(1, 2, 2), plt.title("Restored Image"), plt.imshow(restored_image, cmap='gray'), plt.axis('off')plt.show()
相关文章:
Richardson-Lucy (RL) 反卷积算法 —— 通过不断迭代更新图像估计值
文章目录 一、RL反卷积算法(1)主要特点(2)基本原理(3)关键步骤(4)优化算法 二、项目实战(1)RL 反卷积(2)优化:RL 反卷积 …...
2025.04.10-拼多多春招笔试第四题
📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围OJ 04. 优惠券最优分配问题 问题描述 LYA是一家电商平台的运营经理,负责促销活动的策划。现在平台上有 n n n...
------------------V2024-2信息收集完结------------------
第二部分信息收集完结撒花*★,*:.☆( ̄▽ ̄)/$:*.★* 。 进入开发部分,工具要求:phpstorm Adobe Navicat16 小皮 准备完毕 php开发起飞起飞~~~~~...
Java Lambda与方法引用:函数式编程的颠覆性实践
在Java 8引入Lambda表达式和方法引用后,函数式编程范式彻底改变了Java开发者的编码习惯。本文将通过实战案例和深度性能分析,揭示如何在新项目中优雅运用这些特性,同时提供传统代码与函数式代码的对比优化方案。 文章目录 一、Lambda表达式&a…...
2025年常见渗透测试面试题- PHP考察(题目+回答)
网络安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 PHP考察 php的LFI,本地包含漏洞原理是什么?写一段带有漏洞的代码。手工的话如何发掘&am…...
【在校课堂笔记】南山 - 第 10 节课 总结
- 第 92 篇 - Date: 2025 - 04 - 10 Author: 郑龙浩/仟墨 【Python 在校课堂笔记】 南山 - 第 10 节课 文章目录 南山 - 第 10 节课一 in –> 存在性测试 - 基础介绍二 in –> 例题 - 火车票 - 使用 in 优化**问题**【代码 - 以前的代码】【代码 - 使用存在性测试 in】 …...
GaussDB ECPG与Oracle Pro_C深度对比:嵌入式SQL开发者的迁移指南
GaussDB ECPG与Oracle Pro*C深度对比:嵌入式SQL开发者的迁移指南 一、体系架构差异 关键组件对比表 二、语法兼容性分析 核心语法差异对比 c /* Pro*C示例 */ EXEC SQL SELECT empno INTO :emp_id FROM employees WHERE ename :name;/* ECPG等效实现 */ EXEC…...
debian系统中文输入法失效解决
在 Debian 9.6 上无法切换中文输入法的问题通常与输入法框架(如 Fcitx 或 IBus)的配置或依赖缺失有关。以下是详细的解决步骤: 1. 安装中文语言包 确保系统已安装中文语言支持: sudo apt update sudo apt install locales sudo…...
2025年危化品安全管理人员备考指南|智能题库+核心考点解析
作为危化品生产单位安全管理人员(主要负责人),考试内容主要涵盖三大模块: 法律法规体系 《安全生产法》修订要点(2023版) 危险化学品重大危险源辨识标准(GB 18218) 最新《化工过…...
我为女儿开发了一个游戏网站
大家好,我是星河。 自从协助妻子为女儿开发了算数射击游戏后,星河就一直有个想法:为女儿打造一个专属的学习游戏网站。之前的射击游戏虽然有趣,但缺乏难度分级,无法根据女儿的学习进度灵活调整。而且,仅仅…...
SpringBoot企业级开发之【用户模块-更新用户基本信息】
接口文档: 开发前我们先看一下接口文档: 这是实现的预想结果: 实现思路: 设计一下我们的实现思路 拿起家伙实操: 1.controller 定义一个方法去修改用户: 注意!是【put请求】 //更改用户信…...
循环神经网络 - 长短期记忆网络的门控机制
长短期记忆网络(LSTM)的门控机制是其核心设计,用来解决普通 RNN 在长程依赖中遇到的梯度消失与信息混淆问题。为了更进一步理解长短期记忆网络,本文我们来深入分析一下其门控机制。 一、理解长短期记忆网络的“三个门” 所谓门控…...
AutoKeras 处理图像回归预测
AutoKeras 是一个自动机器学习库,在处理图像回归预测问题时,它可以自动选择最佳的模型架构和超参数,从而简化深度学习模型的构建过程。 AutoKeras 主要用于分类和回归任务,它同样可以进行图像数据的回归预测。 步骤 1: 安装 Auto…...
批量清空图片的相机参数、地理位置等敏感元数据
我们在使用相机或者手机拍摄照片的时候,照片中都会带有一些敏感元数据信息,比如说相机的型号,参数,拍摄的时间地点等等。这些信息虽说不是那么引人注意,但是在某些时候他是非常隐私非常重要的。如果我们将这些信息泄露…...
驱动-字符设备驱动框架
简要了解 字符设备驱动框架 整个流程 文章目录 基本知识:实际应用效果说明 参考资料字符设备驱动框架基本结构关键数据结构 - 文件操作结构体(file_operations)struct module *ownerssize_t (*read) (struct file *, char __user *, size_t, loff_t *);ssize_t (*wr…...
RK3588芯片NPU的使用:Windows11 Docker中运行PPOCRv4例子
本文的目标 本文将在RKNN Docker环境中练习PPOCR示例,并通过adb工具部署到RK3588开发板。 开发环境说明 主机系统:Windows11目标设备:搭载RK3588芯片的安卓开发板核心工具:包含rknn-toolkit2、rknn_model_zoo等工具的Docker镜像…...
88.高效写入文件—StringBuilder C#例子 WPF例子
在处理文件写入操作时,选择合适的方法可以显著影响程序的性能。本文将通过两个示例代码,对比使用 StringBuilder 和直接写入文件的性能差异,并提供具体的实现步骤。 问题背景 在实际开发中,我们经常需要将大量数据写入文件。然而…...
redis 延迟双删
Redis延迟双删是一种用于解决缓存与数据库数据一致性问题的策略,通常在高并发场景下使用。以下是其核心内容: 1. 问题背景 当更新数据库时,如果未及时删除或更新缓存,可能导致后续读请求仍从缓存中读取旧数据,造成数…...
如何在CentOS部署青龙面板并实现无公网IP远程访问本地面板
青龙面板的功能多多,可以帮助我们自动化处理很多需要手动操作的事情,比如京东领京豆,阿里云盘签到白嫖 vip、掘金签到等等,本教程使用 Docker 搭建青龙面板,并结合 cpolar 内网穿透实现使用公网地址远程访…...
VectorBT量化入门系列:第五章 VectorBT性能评估与分析
VectorBT量化入门系列:第五章 VectorBT性能评估与分析 本教程专为中高级开发者设计,系统讲解VectorBT技术在量化交易中的应用。通过结合Tushare数据源和TA-Lib技术指标,深度探索策略开发、回测优化与风险评估的核心方法。从数据获取到策略部署…...
新能源商用车能耗终极优化指南:悬架、制动、电驱桥全链路硬核拆解(附仿真代码)
引言:新能源商用车的“续航战争”与工程师的破局点 1.1 行业现状:政策红利与技术瓶颈的博弈 数据冲击: 2023年中国新能源商用车销量突破50万辆,但平均续航仅为燃油车的55%(数据来源:中汽协)。…...
Maven笔记
Maven作用 依赖管理、版本控制标准化项目结构、自动化构建项目生命周期管理细分项目模块自动化构建、通过插件拓展构建过程 Maven下载及配置 https://blog.csdn.net/qq_29689343/article/details/135566775 使用IDEA 构建Maven工程 https://blog.csdn.net/qq_29689343/art…...
Java——接口扩展
JDK8开始接口中新增的方法 JDK7以前:接口中只能定义抽象方法。 JDK8的新特性:接口中可以定义有方法体的方法。(默认、静态) JDK9的新特性:接口中可以定义私有方法。 默认方法 需要使用关键字default修饰 作用: 解决接口升级的问题 接口中默认方法的定义格式: 格式: public d…...
COD任务论文--MAMIFNet
摘要 提示:论文机翻 由于难以从复杂背景中区分高度相似的目标,伪装物体检测(COD)仍然是计算机视觉领域的一项具有挑战性的任务。现有的伪装物体检测方法往往在场景理解和信息利用方面存在困难,导致精度不足,…...
基于MCP协议调用的大模型agent开发04
目录 MCP客户端Client开发流程 uv工具 uv安装流程 uv的基本用法介绍 MCP极简客户端搭建流程 MCP客户端接入OpenAI、DeepSeek在线模型流程 参考来源及学习推荐: Anthropic MCP发布通告:https://www.anthropic.com/news/model-context-protocol MC…...
ComfyUI_Echomimic部署问题集合
本博客总结自己在从WebUI转到ComfyUI的过程配置Echomimic遇到的一些问题和解决方法。 默认大家已经成功安装ComfyUI,我之前装的是ComfyU桌面版,现在用的是B站秋葉大佬的整合包。但内核都一样,错误也是通用的。遇到问题时,应该先去…...
音频转文本:如何识别音频成文字
Python脚本:MP4转MP3并语音识别为中文 以下是一个完整的Python脚本,可以将MP4视频转换为MP3音频,然后使用语音识别模型将音频转换为中文文本。 准备工作 首先需要安装必要的库: pip install moviepy pydub SpeechRecognition openai-whisper完整脚本 import os from m…...
脑科学与人工智能的交叉:未来智能科技的前沿与机遇
引言 随着科技的迅猛发展,脑科学与人工智能(AI)这两个看似独立的领域正在发生深刻的交汇。脑机接口、神经网络模型、智能机器人等前沿技术,正带来一场跨学科的革命。这种结合不仅推动了科技进步,也在医疗、教育、娱乐等…...
Linux | I.MX6ULL外设功能验证(11)
01 CSI 摄像头测试 I.MX6ULL 终结者开发板引出了一路 CSI 的摄像头接口,支持【007】的 OV5640 摄像头模块。首先我们连接OV5640 摄像头模块到开发板上,如下图所示(大家在连接的时候一定要注意方向,摄像头朝向开发板的内侧,千万不要接反):...
AI助手:Claude
一、简介 Claude 是由 Anthropic 公司开发的一款人工智能助手,类似于 OpenAI 的 ChatGPT。它以 Anthropic 提出的“宪法式 AI(Constitutional AI)”为核心设计理念,强调安全性、透明性和可控性。以下是对 Claude 的一个简要介绍&…...
vue项目proxy代理的方式
以下是一个详细的 Vue 项目配置 Proxy 代理 的示例和说明,用于解决开发环境跨域问题: 1. 基础代理配置 vue.config.js 配置文件 // vue.config.js module.exports {devServer: {proxy: {// 代理所有以 /api 开头的请求/api: {target: http://localhos…...
多项目并行时如何避免资源冲突
多项目并行时避免资源冲突需做到:精确的资源规划与调度、建立统一的资源管理体系、设置清晰的优先级策略、实时监控资源使用状况、优化团队沟通与协调。其中,精确的资源规划与调度尤其重要,它决定了项目资源能否高效利用,防止资源…...
求x的c(n,m)次方
近期看到一类很有趣的题啊,其最基础的表现形式为求 mod P的值。 所以我们来拿一道小例题讲讲。 题面:给定 x,n,m,求: mod 1000003471的值。 首先我们注意到,题目给定的模数1000003471为质数,根据费马…...
VS Code 的 .S 汇编文件里面的注释不显示绿色
1. 确认文件语言模式 打开 .S 文件后,查看 VS Code 右下角的状态栏,确认当前文件的识别模式(如 Assembly、Plain Text 等)。如果显示为 Plain Text 或其他非汇编模式: 点击状态栏中的语言模式(如 Plain Te…...
Apipost自定义函数深度实战:灵活处理参数值秘籍
在开发过程中,为了更好地处理传递给接口的参数值,解决在调试过程中的数据处理问题,我们经常需要用到函数处理数据。 过去,我们通过预执行脚本来处理数据,先添加脚本,然后将处理后的结果再赋值给请求参数。…...
ADI的BF561双核DSP怎么做开发,我来说一说(十)驱动直流电机和步进电机
作者的话 ADI的双核DSP,最早的一颗是Blackfin系列的BF561,这颗DSP我用了很久,比较熟悉,且写过一些给新手的教程。 硬件准备 ADZS-BF561-EZKIT开发板:ADI原厂评估板 AD-ICE20000仿真器:ADI现阶段性能最好…...
JS包装类型Object
包装类型 1 对象 Object 声明普通对象 学习静态方法,只能由Object自己调用 1.获得所有属性 2.获得所有属性值 3.对象拷贝...
【C++初阶】--- vector容器功能模拟实现
1.什么是vector? 在 C 里,std::vector 是标准模板库(STL)提供的一个非常实用的容器类,它可以看作是动态数组 2.成员变量 iterator _start;:指向 vector 中第一个元素的指针。 iterator _finish;&#x…...
FreeRTOS项目工程完善指南:STM32F103C8T6系列
FreeRTOS项目工程完善指南:STM32系列 本文是FreeRTOS STM32开发系列教程的一部分。我们将完善之前移植的FreeRTOS工程,添加串口功能并优化配置文件。 更多优质资源,请访问我的GitHub仓库:https://github.com/Despacito0o/FreeRTO…...
多值字典表设计:优雅处理一对多关系的数据库方案
在数据库设计中,我们经常需要处理一对多的关系数据。传统做法是创建关联表,但有时这种方式会显得过于复杂。今天,我将分享一种简单而实用的多值字典表设计方案,它适用于那些不需要对单个值进行复杂操作的场景。 为什么需要多值字典表? 在许多应用场景中,我们需要存储一…...
如何在Linux系统Docker部署Dashy并远程访问内网服务界面
## 简介 Dashy 是一个开源的自托管的导航页配置服务,具有易于使用的可视化编辑器、状态检查、小工具和主题等功能。你可以将自己常用的一些网站聚合起来放在一起,形成自己的导航页。一款功能超强大,颜值爆表的可定制专属导航页工…...
GRBL运动控制算法(五)脉冲生成Bresenham算法
前言 在数控系统和运动控制领域,脉冲信号的精确生成是实现高精度位置控制的核心。GRBL作为一款高效、开源的嵌入式运动控制固件,其底层脉冲生成机制直接决定了步进电机的运动平滑性、响应速度及整体性能。而这一机制的核心,正是经典的Bresen…...
Java学习手册:Java发展历史与版本特性
Java作为全球最流行的编程语言之一,其发展历程不仅见证了技术的演进,也反映了软件开发模式的变革。从1995年的首次发布到如今的持续更新,Java始终保持着强大的生命力和广泛的影响力。本文将简要回顾Java的发展历程,并重点介绍其关…...
25年时代电服社招入职Verify测评SHL题库语言理解数字推理考什么?
宁德时代语言理解 语言理解部分主要考察应聘者的语言表达和逻辑思维能力,题型包括阅读理解、逻辑填空和语句排序。阅读理解要求应聘者快速捕捉文章的主旨和细节信息,能够迅速把握文章的核心观点;逻辑填空需要在给定的语句中填入最合适的词汇…...
【C++】右值引用、移动语义与完美转发
左值、右值是C常见的概念,那么什么是右值引用,移动语义,完美转发呢?本UP带大家了解一下C校招常问的C11新特性。 左值与右值 左值:明确存储未知、可以取地址的表达式 右值:临时的、即将被销毁的ÿ…...
AIGC3——AIGC的行业应用与生产力变革:医疗、教育、影视与工业设计的突破
引言 人工智能生成内容(AIGC)技术正在深刻改变多个行业的生产方式,从医疗诊断到影视创作,从个性化教育到工业设计,其应用不仅提升了效率,还创造了全新的工作模式。本文将聚焦医疗、教育、影视、工业设计四…...
Java从入门到“放弃”(精通)之旅——启航①
🌟Java从入门到“放弃 ”精通之旅🚀 今天我将要带大家一起探索神奇的Java世界!希望能帮助到同样初学Java的你~ (๑•̀ㅂ•́)و✧ 🔥 Java是什么?为什么这么火? Java不仅仅是一门编程语言,更…...
Web前端之Vue+Element实现表格动态不同列合并多行、localeCompare、forEach、table、push、sort、Map
MENU 效果图公共数据数据未排序时(需要合并的行数据未处于相邻位置)固定合并行(写死)动态合并行方法(函数)执行 效果图 公共数据 Html <el-table :data"tableData" :span-method"chang…...
JavaScript(JS进阶)
目录 00闭包 01函数进阶 02解构赋值 03通过forEach方法遍历数组 04深入对象 05内置构造函数 06原型 00闭包 <!-- 闭包 --><html><body><script>// 定义:闭包内层函数(匿名函数)外层函数的变量(s&…...
学习51单片机Day02---实验:点亮一个LED灯
目录 1.先看原理图 2.思考一下(sbit的使用): 3.给0是要让这个LED亮(LED端口设置为低电平) 4.完成的代码 1.先看原理图 比如我们要让LED3亮起来,对应的是P2^2。 2.思考一下(sbit的使用&…...