当前位置: 首页 > news >正文

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反卷积算法&#xff08;1&#xff09;主要特点&#xff08;2&#xff09;基本原理&#xff08;3&#xff09;关键步骤&#xff08;4&#xff09;优化算法 二、项目实战&#xff08;1&#xff09;RL 反卷积&#xff08;2&#xff09;优化&#xff1a;RL 反卷积 …...

2025.04.10-拼多多春招笔试第四题

📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围OJ 04. 优惠券最优分配问题 问题描述 LYA是一家电商平台的运营经理,负责促销活动的策划。现在平台上有 n n n...

------------------V2024-2信息收集完结------------------

第二部分信息收集完结撒花*★,*:.☆(&#xffe3;▽&#xffe3;)/$:*.★* 。 进入开发部分&#xff0c;工具要求&#xff1a;phpstorm Adobe Navicat16 小皮 准备完毕 php开发起飞起飞~~~~~...

Java Lambda与方法引用:函数式编程的颠覆性实践

在Java 8引入Lambda表达式和方法引用后&#xff0c;函数式编程范式彻底改变了Java开发者的编码习惯。本文将通过实战案例和深度性能分析&#xff0c;揭示如何在新项目中优雅运用这些特性&#xff0c;同时提供传统代码与函数式代码的对比优化方案。 文章目录 一、Lambda表达式&a…...

2025年常见渗透测试面试题- PHP考察(题目+回答)

网络安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 PHP考察 php的LFI&#xff0c;本地包含漏洞原理是什么&#xff1f;写一段带有漏洞的代码。手工的话如何发掘&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深度对比&#xff1a;嵌入式SQL开发者的迁移指南 一、体系架构差异 关键组件对比表 二、语法兼容性分析 核心语法差异对比 c /* Pro*C示例 */ EXEC SQL SELECT empno INTO :emp_id FROM employees WHERE ename :name;/* ECPG等效实现 */ EXEC…...

debian系统中文输入法失效解决

在 Debian 9.6 上无法切换中文输入法的问题通常与输入法框架&#xff08;如 Fcitx 或 IBus&#xff09;的配置或依赖缺失有关。以下是详细的解决步骤&#xff1a; 1. 安装中文语言包 确保系统已安装中文语言支持&#xff1a; sudo apt update sudo apt install locales sudo…...

2025年危化品安全管理人员备考指南|智能题库+核心考点解析

作为危化品生产单位安全管理人员&#xff08;主要负责人&#xff09;&#xff0c;考试内容主要涵盖三大模块&#xff1a; 法律法规体系 《安全生产法》修订要点&#xff08;2023版&#xff09; 危险化学品重大危险源辨识标准&#xff08;GB 18218&#xff09; 最新《化工过…...

我为女儿开发了一个游戏网站

大家好&#xff0c;我是星河。 自从协助妻子为女儿开发了算数射击游戏后&#xff0c;星河就一直有个想法&#xff1a;为女儿打造一个专属的学习游戏网站。之前的射击游戏虽然有趣&#xff0c;但缺乏难度分级&#xff0c;无法根据女儿的学习进度灵活调整。而且&#xff0c;仅仅…...

SpringBoot企业级开发之【用户模块-更新用户基本信息】

接口文档&#xff1a; 开发前我们先看一下接口文档&#xff1a; 这是实现的预想结果&#xff1a; 实现思路&#xff1a; 设计一下我们的实现思路 拿起家伙实操&#xff1a; 1.controller 定义一个方法去修改用户&#xff1a; 注意&#xff01;是【put请求】 //更改用户信…...

循环神经网络 - 长短期记忆网络的门控机制

长短期记忆网络&#xff08;LSTM&#xff09;的门控机制是其核心设计&#xff0c;用来解决普通 RNN 在长程依赖中遇到的梯度消失与信息混淆问题。为了更进一步理解长短期记忆网络&#xff0c;本文我们来深入分析一下其门控机制。 一、理解长短期记忆网络的“三个门” 所谓门控…...

AutoKeras 处理图像回归预测

AutoKeras 是一个自动机器学习库&#xff0c;在处理图像回归预测问题时&#xff0c;它可以自动选择最佳的模型架构和超参数&#xff0c;从而简化深度学习模型的构建过程。 AutoKeras 主要用于分类和回归任务&#xff0c;它同样可以进行图像数据的回归预测。 步骤 1: 安装 Auto…...

批量清空图片的相机参数、地理位置等敏感元数据

我们在使用相机或者手机拍摄照片的时候&#xff0c;照片中都会带有一些敏感元数据信息&#xff0c;比如说相机的型号&#xff0c;参数&#xff0c;拍摄的时间地点等等。这些信息虽说不是那么引人注意&#xff0c;但是在某些时候他是非常隐私非常重要的。如果我们将这些信息泄露…...

驱动-字符设备驱动框架

简要了解 字符设备驱动框架 整个流程 文章目录 基本知识&#xff1a;实际应用效果说明 参考资料字符设备驱动框架基本结构关键数据结构 - 文件操作结构体(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示例&#xff0c;并通过adb工具部署到RK3588开发板。 开发环境说明 主机系统&#xff1a;Windows11目标设备&#xff1a;搭载RK3588芯片的安卓开发板核心工具&#xff1a;包含rknn-toolkit2、rknn_model_zoo等工具的Docker镜像…...

88.高效写入文件—StringBuilder C#例子 WPF例子

在处理文件写入操作时&#xff0c;选择合适的方法可以显著影响程序的性能。本文将通过两个示例代码&#xff0c;对比使用 StringBuilder 和直接写入文件的性能差异&#xff0c;并提供具体的实现步骤。 问题背景 在实际开发中&#xff0c;我们经常需要将大量数据写入文件。然而…...

redis 延迟双删

Redis延迟双删是一种用于解决缓存与数据库数据一致性问题的策略&#xff0c;通常在高并发场景下使用。以下是其核心内容&#xff1a; 1. 问题背景 当更新数据库时&#xff0c;如果未及时删除或更新缓存&#xff0c;可能导致后续读请求仍从缓存中读取旧数据&#xff0c;造成数…...

如何在CentOS部署青龙面板并实现无公网IP远程访问本地面板

&#xfeff;青龙面板的功能多多&#xff0c;可以帮助我们自动化处理很多需要手动操作的事情&#xff0c;比如京东领京豆&#xff0c;阿里云盘签到白嫖 vip、掘金签到等等&#xff0c;本教程使用 Docker 搭建青龙面板&#xff0c;并结合 cpolar 内网穿透实现使用公网地址远程访…...

VectorBT量化入门系列:第五章 VectorBT性能评估与分析

VectorBT量化入门系列&#xff1a;第五章 VectorBT性能评估与分析 本教程专为中高级开发者设计&#xff0c;系统讲解VectorBT技术在量化交易中的应用。通过结合Tushare数据源和TA-Lib技术指标&#xff0c;深度探索策略开发、回测优化与风险评估的核心方法。从数据获取到策略部署…...

新能源商用车能耗终极优化指南:悬架、制动、电驱桥全链路硬核拆解(附仿真代码)

引言&#xff1a;新能源商用车的“续航战争”与工程师的破局点 1.1 行业现状&#xff1a;政策红利与技术瓶颈的博弈 数据冲击&#xff1a; 2023年中国新能源商用车销量突破50万辆&#xff0c;但平均续航仅为燃油车的55%&#xff08;数据来源&#xff1a;中汽协&#xff09;。…...

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

摘要 提示&#xff1a;论文机翻 由于难以从复杂背景中区分高度相似的目标&#xff0c;伪装物体检测&#xff08;COD&#xff09;仍然是计算机视觉领域的一项具有挑战性的任务。现有的伪装物体检测方法往往在场景理解和信息利用方面存在困难&#xff0c;导致精度不足&#xff0c…...

基于MCP协议调用的大模型agent开发04

目录 MCP客户端Client开发流程 uv工具 uv安装流程 uv的基本用法介绍 MCP极简客户端搭建流程 MCP客户端接入OpenAI、DeepSeek在线模型流程 参考来源及学习推荐&#xff1a; Anthropic MCP发布通告&#xff1a;https://www.anthropic.com/news/model-context-protocol MC…...

ComfyUI_Echomimic部署问题集合

本博客总结自己在从WebUI转到ComfyUI的过程配置Echomimic遇到的一些问题和解决方法。 默认大家已经成功安装ComfyUI&#xff0c;我之前装的是ComfyU桌面版&#xff0c;现在用的是B站秋葉大佬的整合包。但内核都一样&#xff0c;错误也是通用的。遇到问题时&#xff0c;应该先去…...

音频转文本:如何识别音频成文字

Python脚本:MP4转MP3并语音识别为中文 以下是一个完整的Python脚本,可以将MP4视频转换为MP3音频,然后使用语音识别模型将音频转换为中文文本。 准备工作 首先需要安装必要的库: pip install moviepy pydub SpeechRecognition openai-whisper完整脚本 import os from m…...

脑科学与人工智能的交叉:未来智能科技的前沿与机遇

引言 随着科技的迅猛发展&#xff0c;脑科学与人工智能&#xff08;AI&#xff09;这两个看似独立的领域正在发生深刻的交汇。脑机接口、神经网络模型、智能机器人等前沿技术&#xff0c;正带来一场跨学科的革命。这种结合不仅推动了科技进步&#xff0c;也在医疗、教育、娱乐等…...

Linux | I.MX6ULL外设功能验证(11)

01 CSI 摄像头测试 I.MX6ULL 终结者开发板引出了一路 CSI 的摄像头接口,支持【007】的 OV5640 摄像头模块。首先我们连接OV5640 摄像头模块到开发板上,如下图所示(大家在连接的时候一定要注意方向,摄像头朝向开发板的内侧,千万不要接反):...

AI助手:Claude

一、简介 Claude 是由 Anthropic 公司开发的一款人工智能助手&#xff0c;类似于 OpenAI 的 ChatGPT。它以 Anthropic 提出的“宪法式 AI&#xff08;Constitutional AI&#xff09;”为核心设计理念&#xff0c;强调安全性、透明性和可控性。以下是对 Claude 的一个简要介绍&…...

vue项目proxy代理的方式

以下是一个详细的 Vue 项目配置 Proxy 代理 的示例和说明&#xff0c;用于解决开发环境跨域问题&#xff1a; 1. 基础代理配置 vue.config.js 配置文件 // vue.config.js module.exports {devServer: {proxy: {// 代理所有以 /api 开头的请求/api: {target: http://localhos…...

多项目并行时如何避免资源冲突

多项目并行时避免资源冲突需做到&#xff1a;精确的资源规划与调度、建立统一的资源管理体系、设置清晰的优先级策略、实时监控资源使用状况、优化团队沟通与协调。其中&#xff0c;精确的资源规划与调度尤其重要&#xff0c;它决定了项目资源能否高效利用&#xff0c;防止资源…...

求x的c(n,m)次方

近期看到一类很有趣的题啊&#xff0c;其最基础的表现形式为求 mod P的值。 所以我们来拿一道小例题讲讲。 题面&#xff1a;给定 x,n,m&#xff0c;求&#xff1a; mod 1000003471的值。 首先我们注意到&#xff0c;题目给定的模数1000003471为质数&#xff0c;根据费马…...

VS Code 的 .S 汇编文件里面的注释不显示绿色

1. 确认文件语言模式 打开 .S 文件后&#xff0c;查看 VS Code 右下角的状态栏&#xff0c;确认当前文件的识别模式&#xff08;如 Assembly、Plain Text 等&#xff09;。如果显示为 Plain Text 或其他非汇编模式&#xff1a; 点击状态栏中的语言模式&#xff08;如 Plain Te…...

Apipost自定义函数深度实战:灵活处理参数值秘籍

在开发过程中&#xff0c;为了更好地处理传递给接口的参数值&#xff0c;解决在调试过程中的数据处理问题&#xff0c;我们经常需要用到函数处理数据。 过去&#xff0c;我们通过预执行脚本来处理数据&#xff0c;先添加脚本&#xff0c;然后将处理后的结果再赋值给请求参数。…...

ADI的BF561双核DSP怎么做开发,我来说一说(十)驱动直流电机和步进电机

作者的话 ADI的双核DSP&#xff0c;最早的一颗是Blackfin系列的BF561&#xff0c;这颗DSP我用了很久&#xff0c;比较熟悉&#xff0c;且写过一些给新手的教程。 硬件准备 ADZS-BF561-EZKIT开发板&#xff1a;ADI原厂评估板 AD-ICE20000仿真器&#xff1a;ADI现阶段性能最好…...

JS包装类型Object

包装类型 1 对象 Object 声明普通对象 学习静态方法&#xff0c;只能由Object自己调用 1.获得所有属性 2.获得所有属性值 3.对象拷贝...

【C++初阶】--- vector容器功能模拟实现

1.什么是vector&#xff1f; 在 C 里&#xff0c;std::vector 是标准模板库&#xff08;STL&#xff09;提供的一个非常实用的容器类&#xff0c;它可以看作是动态数组 2.成员变量 iterator _start;&#xff1a;指向 vector 中第一个元素的指针。 iterator _finish;&#x…...

FreeRTOS项目工程完善指南:STM32F103C8T6系列

FreeRTOS项目工程完善指南&#xff1a;STM32系列 本文是FreeRTOS STM32开发系列教程的一部分。我们将完善之前移植的FreeRTOS工程&#xff0c;添加串口功能并优化配置文件。 更多优质资源&#xff0c;请访问我的GitHub仓库&#xff1a;https://github.com/Despacito0o/FreeRTO…...

多值字典表设计:优雅处理一对多关系的数据库方案

在数据库设计中,我们经常需要处理一对多的关系数据。传统做法是创建关联表,但有时这种方式会显得过于复杂。今天,我将分享一种简单而实用的多值字典表设计方案,它适用于那些不需要对单个值进行复杂操作的场景。 为什么需要多值字典表? 在许多应用场景中,我们需要存储一…...

如何在Linux系统Docker部署Dashy并远程访问内网服务界面

&#xfeff;## 简介 Dashy 是一个开源的自托管的导航页配置服务&#xff0c;具有易于使用的可视化编辑器、状态检查、小工具和主题等功能。你可以将自己常用的一些网站聚合起来放在一起&#xff0c;形成自己的导航页。一款功能超强大&#xff0c;颜值爆表的可定制专属导航页工…...

GRBL运动控制算法(五)脉冲生成Bresenham算法

前言 在数控系统和运动控制领域&#xff0c;脉冲信号的精确生成是实现高精度位置控制的核心。GRBL作为一款高效、开源的嵌入式运动控制固件&#xff0c;其底层脉冲生成机制直接决定了步进电机的运动平滑性、响应速度及整体性能。而这一机制的核心&#xff0c;正是经典的Bresen…...

Java学习手册:Java发展历史与版本特性

Java作为全球最流行的编程语言之一&#xff0c;其发展历程不仅见证了技术的演进&#xff0c;也反映了软件开发模式的变革。从1995年的首次发布到如今的持续更新&#xff0c;Java始终保持着强大的生命力和广泛的影响力。本文将简要回顾Java的发展历程&#xff0c;并重点介绍其关…...

25年时代电服社招入职Verify测评SHL题库语言理解数字推理考什么?

宁德时代语言理解 语言理解部分主要考察应聘者的语言表达和逻辑思维能力&#xff0c;题型包括阅读理解、逻辑填空和语句排序。阅读理解要求应聘者快速捕捉文章的主旨和细节信息&#xff0c;能够迅速把握文章的核心观点&#xff1b;逻辑填空需要在给定的语句中填入最合适的词汇…...

【C++】右值引用、移动语义与完美转发

左值、右值是C常见的概念&#xff0c;那么什么是右值引用&#xff0c;移动语义&#xff0c;完美转发呢&#xff1f;本UP带大家了解一下C校招常问的C11新特性。 左值与右值 左值&#xff1a;明确存储未知、可以取地址的表达式 右值&#xff1a;临时的、即将被销毁的&#xff…...

AIGC3——AIGC的行业应用与生产力变革:医疗、教育、影视与工业设计的突破

引言 人工智能生成内容&#xff08;AIGC&#xff09;技术正在深刻改变多个行业的生产方式&#xff0c;从医疗诊断到影视创作&#xff0c;从个性化教育到工业设计&#xff0c;其应用不仅提升了效率&#xff0c;还创造了全新的工作模式。本文将聚焦医疗、教育、影视、工业设计四…...

Java从入门到“放弃”(精通)之旅——启航①

&#x1f31f;Java从入门到“放弃 ”精通之旅&#x1f680; 今天我将要带大家一起探索神奇的Java世界&#xff01;希望能帮助到同样初学Java的你~ (๑•̀ㅂ•́)و✧ &#x1f525; Java是什么&#xff1f;为什么这么火&#xff1f; Java不仅仅是一门编程语言&#xff0c;更…...

Web前端之Vue+Element实现表格动态不同列合并多行、localeCompare、forEach、table、push、sort、Map

MENU 效果图公共数据数据未排序时&#xff08;需要合并的行数据未处于相邻位置&#xff09;固定合并行&#xff08;写死&#xff09;动态合并行方法&#xff08;函数&#xff09;执行 效果图 公共数据 Html <el-table :data"tableData" :span-method"chang…...

JavaScript(JS进阶)

目录 00闭包 01函数进阶 02解构赋值 03通过forEach方法遍历数组 04深入对象 05内置构造函数 06原型 00闭包 <!-- 闭包 --><html><body><script>// 定义&#xff1a;闭包内层函数&#xff08;匿名函数&#xff09;外层函数的变量&#xff08;s&…...

学习51单片机Day02---实验:点亮一个LED灯

目录 1.先看原理图 2.思考一下&#xff08;sbit的使用&#xff09;&#xff1a; 3.给0是要让这个LED亮&#xff08;LED端口设置为低电平&#xff09; 4.完成的代码 1.先看原理图 比如我们要让LED3亮起来&#xff0c;对应的是P2^2。 2.思考一下&#xff08;sbit的使用&…...