DIP——添加运动模糊与滤波
1.运动模糊
为了模拟图像退化的过程,在这里创建了一个用于模拟运动模糊的点扩散函数,具体模糊的方向取决于输入的motion_angle。如果运动方向接近水平,则模糊效果近似水平,如果运动方向接近垂直,则模糊效果近似垂直。具体操作如下。首先创建二维数组PSF,并将其所有元素初始化为零,作为点扩散函数的初始值。之后计算图像的中心位置。然后,计算运动方向的斜率的正切值以及余切值。根据运动方向的斜率的正切值以及余切值去判断运动方向。如果斜率的正切值小于等于1,表示运动方向接近水平,所采取的操作是在点扩散函数的相应位置设置值为1,形成一条近似水平的模糊效果。这个相应位置的计算方式是中心加上偏移量。垂直方向同理。运动模糊这一块的代码具体如下。
def motion_process(image_size, motion_angle):# 创建一个大小为image_size的二维数组PSF,并将其所有元素初始化为零,作为点扩散函数的初始值。PSF = np.zeros(image_size)print(image_size)# 计算图像的中心位置,由于数组索引是从0开始的,所以需要减1。center_position = (image_size[0] - 1) / 2print(center_position)# 计算运动方向的斜率的正切值。这里的motion_angle是以度为单位的运动方向角度。slope_tan = math.tan(motion_angle * math.pi/ 180)# 计算斜率的余切值。slope_cot = 1/slope_tan# 如果斜率的正切值小于等于1,表示运动方向接近水平。if slope_tan <=1:for i in range(15):# 计算相对于中心位置的水平偏移。round函数用于将浮点数四舍五入为整数。offset = round(i * slope_tan) #((center_position-i)*slope_tan)# 在点扩散函数的相应位置设置值为1,形成一条近似水平的模糊效果。PSF [int (center_position + offset), int(center_position - offset)] = 1# 将点扩散函数进行归一化,确保其总和为1。return PSF/PSF.sum() #对点扩散函数进行归一化亮度# 如果斜率的正切值大于1,表示运动方向接近垂直。else:for i in range(15):# 计算相对于中心位置的垂直偏移。offset = round(i * slope_cot)# :在点扩散函数的相应位置设置值为1,形成一条近似垂直的模糊效果。PSF[int(center_position - offset),int(center_position + offset)] = 1# 将点扩散函数进行归一化,确保其总和为1。return PSF / PSF.sum()
之后,对点扩散函数(PSF)进行二维傅里叶变换。这里加上e是为了避免除零错误。之后 将输入图像的傅里叶变换与点扩散函数的傅里叶变换进行逐元素相乘,在将结果进行逆傅里叶变换,得到模糊处理后的图像。最后用fftshift将频谱移到图像中心,然后取绝对值,得到最终的模糊图像。
总结一下,第一步是为了得到点扩散函数,可以理解为一个模糊的模板,这一步,是在进行时域卷积,频域乘积,对输入图像和模糊模板进行卷积,得到输出。
得到模糊图像的代码如下。
def make_blurred(input, PSF, eps):# 对输入图像进行二维傅里叶变换。input_fft = fft.fft2(input) # 进行二维数组的傅里叶变换# 对点扩散函数(PSF)进行二维傅里叶变换,并添加一个小的常数eps以避免除零错误。这是在频域进行卷积操作的准备步骤。PSF_fft = fft.fft2(PSF) + eps# input_fft * PSF_fft, 将输入图像的傅里叶变换与点扩散函数的傅里叶变换进行逐元素相乘,这相当于在时域中进行卷积。# 之后对相乘结果进行逆傅里叶变换,得到模糊处理后的图像。blurred = fft.ifft2(input_fft * PSF_fft)# 用fftshift将频谱移到图像中心,然后取绝对值,得到最终的模糊图像。blurred = np.abs(fft.fftshift(blurred))return blurred
2.逆滤波
对图像和点扩散函数(PSF)分别进行傅里叶变换,同时将将PSF的频域表示进行平移,将其中心移到图像中心。这是为了避免逆滤波后的图像进行旋转。简单而言,就是将频域中的输入图像和PSF的傅里叶变换进行逐元素相除,然后进行逆傅里叶变换,就实现了逆滤波操作。具体代码如下。
def inverse (input, PSF, eps):input_fft = fft.fft2(input) # 进行二维数组的傅里叶变换,将图像转换到频域PSF_fft =fft.fft2(PSF)+ eps # 噪声功率,这是已知的,考虑epsilon# 为避免逆滤波后的图像进行旋转,将PSF的中心移到图像中心PSF_fft_shifted = fft.fftshift(PSF_fft) # 将PSF的中心移到图像中心# 对频域中的输入图像和PSF的傅里叶变换进行逐元素相除,然后进行逆傅里叶变换。这一步实现了逆滤波操作。result = fft.fft2(input_fft / PSF_fft_shifted)# 对逆滤波得到的频域结果进行频谱中心平移,取其绝对值,得到逆滤波后的时域图像。result = np.abs(fft.fftshift(result))return result
3.维纳滤波
同理,对图像和点扩散函数(PSF)分别进行傅里叶变换。之后,计算维纳滤波的频域滤波器。将输入图像的傅里叶变换与维纳滤波器的傅里叶变换逐元素相乘,然后进行逆傅里叶变换,得到维纳滤波后的时域结果。具体代码如下。
def wiener(input,PSF,eps,K=0.01): # 维纳滤波,K=0.01# 对输入图像进行二维傅里叶变换,将图像转换到频域。input_fft = fft.fft2(input)# 点扩散函数(PSF)进行傅里叶变换,同时考虑了噪声功率 eps。这一步是为了在频域中进行维纳滤波操作的准备。PSF_fft = fft.fft2(PSF) + eps# 计算维纳滤波的频域滤波器。np.conj()是复共轭操作,这里计算的是维纳滤波器的分母,其中 K 是维纳滤波的参数,用于控制噪声增强的程度。PSF_fft_1 = np.conj(PSF_fft) /(np.abs(PSF_fft)** 2 + K)# 将输入图像的傅里叶变换与维纳滤波器的傅里叶变换逐元素相乘,然后进行逆傅里叶变换,得到维纳滤波后的时域结果。result = fft.ifft2(input_fft * PSF_fft_1)# 将维纳滤波后的频域结果进行频谱中心平移,取其绝对值,得到维纳滤波后的时域图像。result = np.abs(fft.fftshift(result))return result
4.函数调用与绘图
这块比较简单,直接附上代码
image = cv2.imread('R.jpg')
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
img_h =image.shape[0]
img_w =image.shape[1]
plt.figure(1)
plt.rcParams['font.sans-serif'] = ['SimHei'] # 选择一个包含中文字符的字体
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
plt.xlabel("原始图像")
plt.gray()
plt.imshow(image) #显示原图像
plt.figure(2)
plt.gray()# 进行运动模糊处理
PSF = motion_process((img_h, img_w), 60)
blurred = np.abs(make_blurred(image, PSF, 1e-3))
plt.subplot(231)
plt.xlabel(" 进行模糊 ")
plt.imshow(blurred)
result = inverse(blurred, PSF, 1e-3)
# 逆滤波,对图像进行滤波处理
result = np.flipud(result)
result = np.fliplr(result)
plt.subplot(232)
plt.xlabel("对进行模糊的图像进行逆滤波")
plt.imshow(result)result = wiener(blurred, PSF, 1e-3) # 维纳滤波
plt.subplot(233)
plt.xlabel("对模糊后的图像进行维纳滤波(k=0.01)")
plt.imshow(result)# 在模糊图像上进一步添加呈正态分布的噪声
blurred_noisy = blurred + 0.1 * blurred.std()*\np.random.standard_normal(blurred.shape) # 添加噪声,standard_normal# 产生随机的函数
plt.subplot(234)
plt.xlabel("在模糊图像上引入噪声")
plt.imshow(blurred_noisy) # 显示添加噪声且运动模糊的图像result=inverse(blurred_noisyPSF,0.1+1e-3) # 对添加噪声的图像进行逆滤波
plt.subplot(235)
plt.xlabel("对模糊和加噪的图片进行逆滤波")
plt.imshow(result)
result = wiener(blurred_noisy, PSF,0.1 + 1e-3) # 对添加噪声的图像进行维纳滤波
plt.subplot(236)
plt.xlabel("对模糊和加噪的图片进行维纳滤波(k=0.01) ")
plt.imshow(result)
plt.tight_layout()
plt.show()
5.运行结果


6.总结
本次实验对原来的图像进行运动模糊后,分别采用逆滤波和维纳滤波进行对图像的恢复。之后在模糊图像的基础上进一步添加呈标准正态分布的噪声。再次,分别采用逆滤波和维纳滤波进行对图像的恢复。但是从实验结果来看,还是存在一定的振铃效应。
因为开头要导入一些必要的库。完整代码如下。
import matplotlib.pyplot as plt
import numpy as np
from numpy import fft
import math
import cv2# 对退化过程进行建模
def motion_process(image_size, motion_angle):# 创建一个大小为image_size的二维数组PSF,并将其所有元素初始化为零,作为点扩散函数的初始值。PSF = np.zeros(image_size)print(image_size)# 计算图像的中心位置,由于数组索引是从0开始的,所以需要减1。center_position = (image_size[0] - 1) / 2print(center_position)# 计算运动方向的斜率的正切值。这里的motion_angle是以度为单位的运动方向角度。slope_tan = math.tan(motion_angle * math.pi/ 180)# 计算斜率的余切值。slope_cot = 1/slope_tan# 如果斜率的正切值小于等于1,表示运动方向接近水平。if slope_tan <=1:for i in range(15):# 计算相对于中心位置的水平偏移。round函数用于将浮点数四舍五入为整数。offset = round(i * slope_tan) #((center_position-i)*slope_tan)# 在点扩散函数的相应位置设置值为1,形成一条近似水平的模糊效果。PSF [int (center_position + offset), int(center_position - offset)] = 1# 将点扩散函数进行归一化,确保其总和为1。return PSF/PSF.sum() #对点扩散函数进行归一化亮度# 如果斜率的正切值大于1,表示运动方向接近垂直。else:for i in range(15):# 计算相对于中心位置的垂直偏移。offset = round(i * slope_cot)# :在点扩散函数的相应位置设置值为1,形成一条近似垂直的模糊效果。PSF[int(center_position - offset),int(center_position + offset)] = 1# 将点扩散函数进行归一化,确保其总和为1。return PSF / PSF.sum()#
def make_blurred(input, PSF, eps):# 对输入图像进行二维傅里叶变换。input_fft = fft.fft2(input) # 进行二维数组的傅里叶变换# 对点扩散函数(PSF)进行二维傅里叶变换,并添加一个小的常数eps以避免除零错误。这是在频域进行卷积操作的准备步骤。PSF_fft = fft.fft2(PSF) + eps# input_fft * PSF_fft, 将输入图像的傅里叶变换与点扩散函数的傅里叶变换进行逐元素相乘,这相当于在时域中进行卷积。# 之后对相乘结果进行逆傅里叶变换,得到模糊处理后的图像。blurred = fft.ifft2(input_fft * PSF_fft)# 用fftshift将频谱移到图像中心,然后取绝对值,得到最终的模糊图像。blurred = np.abs(fft.fftshift(blurred))return blurred# 逆滤波的目标是尽可能地从经过模糊和添加噪声的图像中恢复原始图像
# 逆滤波
def inverse (input, PSF, eps):input_fft = fft.fft2(input) # 进行二维数组的傅里叶变换,将图像转换到频域PSF_fft =fft.fft2(PSF)+ eps # 噪声功率,这是已知的,考虑epsilon# 为避免逆滤波后的图像进行旋转,将PSF的中心移到图像中心PSF_fft_shifted = fft.fftshift(PSF_fft) # 将PSF的中心移到图像中心# 对频域中的输入图像和PSF的傅里叶变换进行逐元素相除,然后进行逆傅里叶变换。这一步实现了逆滤波操作。result = fft.fft2(input_fft / PSF_fft_shifted)# 对逆滤波得到的频域结果进行频谱中心平移,取其绝对值,得到逆滤波后的时域图像。result = np.abs(fft.fftshift(result))return result
def wiener(input,PSF,eps,K=0.01): # 维纳滤波,K=0.01# 对输入图像进行二维傅里叶变换,将图像转换到频域。input_fft = fft.fft2(input)# 点扩散函数(PSF)进行傅里叶变换,同时考虑了噪声功率 eps。这一步是为了在频域中进行维纳滤波操作的准备。PSF_fft = fft.fft2(PSF) + eps# 计算维纳滤波的频域滤波器。np.conj()是复共轭操作,这里计算的是维纳滤波器的分母,其中 K 是维纳滤波的参数,用于控制噪声增强的程度。PSF_fft_1 = np.conj(PSF_fft) /(np.abs(PSF_fft)** 2 + K)# 将输入图像的傅里叶变换与维纳滤波器的傅里叶变换逐元素相乘,然后进行逆傅里叶变换,得到维纳滤波后的时域结果。result = fft.ifft2(input_fft * PSF_fft_1)# 将维纳滤波后的频域结果进行频谱中心平移,取其绝对值,得到维纳滤波后的时域图像。result = np.abs(fft.fftshift(result))return resultimage = cv2.imread('R.jpg')
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
img_h =image.shape[0]
img_w =image.shape[1]
plt.figure(1)
plt.rcParams['font.sans-serif'] = ['SimHei'] # 选择一个包含中文字符的字体
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
plt.xlabel("原始图像")
plt.gray()
plt.imshow(image) #显示原图像
plt.figure(2)
plt.gray()# 进行运动模糊处理
PSF = motion_process((img_h, img_w), 60)
blurred = np.abs(make_blurred(image, PSF, 1e-3))
plt.subplot(231)
plt.xlabel(" 进行模糊 ")
plt.imshow(blurred)
result = inverse(blurred, PSF, 1e-3)
# 逆滤波,对图像进行滤波处理
result = np.flipud(result)
result = np.fliplr(result)
plt.subplot(232)
plt.xlabel("对进行模糊的图像进行逆滤波")
plt.imshow(result)result = wiener(blurred, PSF, 1e-3) # 维纳滤波
plt.subplot(233)
plt.xlabel("对模糊后的图像进行维纳滤波(k=0.01)")
plt.imshow(result)# 在模糊图像上进一步添加呈正态分布的噪声
blurred_noisy = blurred + 0.1 * blurred.std()*\np.random.standard_normal(blurred.shape) # 添加噪声,standard_normal# 产生随机的函数
plt.subplot(234)
plt.xlabel("在模糊图像上引入噪声")
plt.imshow(blurred_noisy) # 显示添加噪声且运动模糊的图像result=inverse(blurred_noisyPSF,0.1+1e-3) # 对添加噪声的图像进行逆滤波
plt.subplot(235)
plt.xlabel("对模糊和加噪的图片进行逆滤波")
plt.imshow(result)
result = wiener(blurred_noisy, PSF,0.1 + 1e-3) # 对添加噪声的图像进行维纳滤波
plt.subplot(236)
plt.xlabel("对模糊和加噪的图片进行维纳滤波(k=0.01) ")
plt.imshow(result)
plt.tight_layout()
plt.show()
相关文章:
DIP——添加运动模糊与滤波
1.运动模糊 为了模拟图像退化的过程,在这里创建了一个用于模拟运动模糊的点扩散函数,具体模糊的方向取决于输入的motion_angle。如果运动方向接近水平,则模糊效果近似水平,如果运动方向接近垂直,则模糊效果近似垂直。具…...
SQL Server查询计划(Query Plan)——SQL处理过程
6. 查询计划(Query Plan) 6.1. SQL处理过程 就SQL语句的处理过程而言,各关系库间大同小异,尤其是商业库之间实现机制和细节差别更小些,其功能及性能支持方面也更加强大和完善。SQL Server作为商业库中的后起之秀,作为SQL语句处理过程的主要支撑和保障,其优化器及相关机…...
【动手学深度学习】(十二)现代卷积神经网络
文章目录 一、深度卷积神经网络AlexNet1.理论知识 一、深度卷积神经网络AlexNet 1.理论知识 ImageNet(2010) 图片自然物体的彩色图片手写数字的黑色图片大小468 * 38728*28样本数1.2M60K类数100010 AlexNet AlexNet赢了2012ImageNet竞赛更深更大的LeNet主要改进ÿ…...
【小沐学Python】Python实现TTS文本转语音(speech、pyttsx3、百度AI)
文章目录 1、简介2、Windows语音2.1 简介2.2 安装2.3 代码 3、pyttsx33.1 简介3.2 安装3.3 代码 4、ggts4.1 简介4.2 安装4.3 代码 5、SAPI6、SpeechLib7、百度AI8、百度飞桨结语 1、简介 TTS(Text To Speech) 译为从文本到语音,TTS是人工智能AI的一个模组…...
TCP通信
第二十一章 网络通信 本章节主要讲解的是TCP和UDP两种通信方式它们都有着自己的优点和缺点 这两种通讯方式不通的地方就是TCP是一对一通信 UDP是一对多的通信方式 接下来会一一讲解 TCP通信 TCP通信方式呢 主要的通讯方式是一对一的通讯方式,也有着优点和缺点…...
2023济南大学acm新生赛题解
通过答题情况的难度系数: 签到:ACI 铜牌题:BG 银牌题:EF 金牌题:DHJKO 赛中暂未有人通过:LMNP A - AB Problem 直接根据公式计算就行。 #include<stdio.h> int main(){int a,b;scanf("%…...
docker-compose安装教程
1.确认docker-compose是否安装 docker-compose -v如上图所示表示未安装,需要安装。 如上图所示表示已经安装,不需要再安装,如果觉得版本低想升级,也可以继续安装。 2.离线安装 下载docker-compose安装包,上传到服务…...
【rabbitMQ】rabbitMQ用户,虚拟机地址(添加,修改,删除操作)
rabbitMQ的下载,安装和配置 https://blog.csdn.net/m0_67930426/article/details/134892759?spm1001.2014.3001.5502 rabbitMQ控制台模拟收发消息 https://blog.csdn.net/m0_67930426/article/details/134904365?spm1001.2014.3001.5502 目录 用户 添加用户…...
Python高级算法——动态规划
Python中的动态规划:高级算法解析 动态规划是一种解决多阶段决策问题的数学方法,常用于优化问题。它通过将问题分解为子问题,并在解决这些子问题的基础上构建全局最优解。在本文中,我们将深入讲解Python中的动态规划,…...
MySQL在Centos7环境安装
说明: • 安装与卸载中,⽤⼾全部切换成为root,⼀旦 安装,普通⽤⼾能使⽤的 1. 卸载不要的环境 [roothcss-ecs-1036 ~]# ps ajx |grep mariadb # 先检查是否有mariadb存在 13134 14844 14843 13134 pts/0 14843 S 1005 0:00 gr…...
halcon视觉缺陷检测常用的6种方法
一、缺陷检测综述 缺陷检测是视觉需求中难度最大一类需求,主要是其稳定性和精度的保证。首先常见缺陷:凹凸、污点瑕疵、划痕、裂缝、探伤等。常用的手法有六大金刚(在halcon中的ocv和印刷检测是针对印刷行业的检测,有对应算子封装): 1.blob+特征 2.blob+差分+特征 3.光度…...
openGauss学习笔记-151 openGauss 数据库运维-备份与恢复-物理备份与恢复之gs_basebackup
文章目录 openGauss学习笔记-151 openGauss 数据库运维-备份与恢复-物理备份与恢复之gs_basebackup151.1 背景信息151.2 前提条件151.3 语法151.4 示例151.5 从备份文件恢复数据 openGauss学习笔记-151 openGauss 数据库运维-备份与恢复-物理备份与恢复之gs_basebackup 151.1 …...
报错:Uncaught ReferenceError: Cannot access ‘l‘ before initialization
在文件 .babelrc 或 babel.config.js ,webpack.config.js 下配置 .babel 或 babel.config.js "plugins": ["babel/plugin-transform-runtime" ] webpack.config.js,详见 Webpack target module.exports {target: [web, es5], }...
计算机视觉-机器学习-人工智能顶会 会议地址
计算机视觉-机器学习-人工智能顶会 会议地址 最近应该要整理中文资料的参考文献,很多会议文献都需要补全会议地点(新国标要求)。四处百度感觉也挺麻烦的,而且没有比较齐全的网站可以搜索。因此自己整理了一下计算机视觉-机器学习…...
784. 字母大小写全排列
字母大小写全排列 描述 : 给定一个字符串 s ,通过将字符串 s 中的每个字母转变大小写,我们可以获得一个新的字符串。 返回 所有可能得到的字符串集合 。以 任意顺序 返回输出。 题目 : LeetCode 784.字母大小写全排列 : 784. 字母大小写全排列 分析…...
HarmonyOS鸿蒙应用开发——HTTP网络访问与封装
文章目录 基本使用封装参考 基本使用 鸿蒙应用发起HTTP请求的基本使用,如下: 导入http模块创建httpRequest对象发起http请求,并处理响应结果 第一、导入http模块: import http from ohos.net.http第二、创建httpRequest对象&a…...
vscode 编写爬虫爬取王者荣耀壁纸
网上关于爬虫大部分教程和编辑器用的都不是vscode ,此教程用到了vscode、Python、bs4、requests。 vscode配置Python安装环境可以看看这个大佬的教程 03-vscode安装和配置_哔哩哔哩_bilibili vscode配置爬虫环境可以参考这个大佬的教程【用Vscode实现简单的python…...
spring boot + uniapp 微信公众号 jsapi 支付
后端支付类 package com.ruoyi.coupon.payment;import com.google.gson.Gson; import com.ruoyi.coupon.payment.dto.PayParamJsapiDto; import com.ruoyi.coupon.payment.dto.RefundParam; import com.ruoyi.coupon.service.ICouponConfigService; import com.wechat.pay.jav…...
【数学建模】《实战数学建模:例题与讲解》第九讲-时间序列分析(含Matlab代码)
【数学建模】《实战数学建模:例题与讲解》第九讲-时间序列分析(含Matlab代码) 基本概念确定性时间序列分析方法平稳时间序列模型ARIMA模型季节性序列 习题8.11. 题目要求2.解题过程3.程序4.结果 习题8.21. 题目要求2.解题过程3.程序4.结果 习…...
大话数据结构-查找-有序表查找
注:本文同步发布于稀土掘金。 3 有序表查找 3.1 折半查找 折半查找(Binary Search)技术,又称为二分查找,它的前提是线性表中的记录必须是关键码有序(通常从小到大有序),线性表必须…...
如何免越狱定制iPhone界面:Cowabunga Lite完整使用指南
如何免越狱定制iPhone界面:Cowabunga Lite完整使用指南 【免费下载链接】CowabungaLite iOS 15 Customization Toolbox 项目地址: https://gitcode.com/gh_mirrors/co/CowabungaLite Cowabunga Lite是一款专为iOS 15设备设计的系统定制工具,让普通…...
CyberChef:数据处理的万能工具箱
CyberChef:数据处理的万能工具箱 【免费下载链接】CyberChef The Cyber Swiss Army Knife - a web app for encryption, encoding, compression and data analysis 项目地址: https://gitcode.com/GitHub_Trending/cy/CyberChef 数据处理的困境与破局之道 你…...
Figma转JSON完全实战方案:实现设计数据与开发流程的无缝对接
Figma转JSON完全实战方案:实现设计数据与开发流程的无缝对接 【免费下载链接】figma-to-json 项目地址: https://gitcode.com/gh_mirrors/fi/figma-to-json Figma-to-JSON是一款创新的开源工具,专为解决设计工具与开发流程之间的数据鸿沟而生。通…...
微信小程序uView实战:u-picker三级联动避坑指南(附完整代码)
uView框架下u-picker三级联动的深度实践与性能优化 在微信小程序开发中,地区选择器几乎是每个涉及用户地址功能的必备组件。uView作为一款优秀的小程序UI框架,其u-picker组件提供了强大的多级联动功能,但在实际开发中,不少开发者会…...
TranslucentTB 架构深度解析:Windows 任务栏透明化技术实现与工程化实践
TranslucentTB 架构深度解析:Windows 任务栏透明化技术实现与工程化实践 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB Tran…...
OpenClaw技能组合实战:Phi-3-vision-128k实现完整会议纪要自动化
OpenClaw技能组合实战:Phi-3-vision-128k实现完整会议纪要自动化 1. 为什么需要会议纪要自动化 作为经常参加跨时区会议的开发者,我长期被会议纪要整理工作困扰。传统流程需要手动录音转文字、整理白板照片、提取行动项,最后还要同步到日历…...
终端设置显示项目的分支名
function parse_git_branch() {git branch 2> /dev/null | sed -n -e s/^\* \(.*\)/[\1]/p}setopt PROMPT_SUBSTexport PROMPT%F{grey}%n%f %F{green}$(parse_git_branch)%f %F{normal}$%f 在.zshrc中设置以上即可...
精准定位CPU核心稳定性:CoreCycler单核心测试全指南
精准定位CPU核心稳定性:CoreCycler单核心测试全指南 【免费下载链接】corecycler Script to test single core stability, e.g. for PBO & Curve Optimizer on AMD Ryzen or overclocking/undervolting on Intel processors 项目地址: https://gitcode.com/gh…...
Tao-8k处理长文本技术详解:突破上下文窗口限制
Tao-8k处理长文本技术详解:突破上下文窗口限制 你是不是也遇到过这样的烦恼?想把一篇几十页的行业报告丢给AI,让它帮你总结要点,结果它告诉你“文本太长了,我处理不了”。或者,你希望AI能帮你分析一个完整…...
Youtu-VL-4B-Instruct效果展示:高清OCR+精准Box定位+多轮图文对话作品集
Youtu-VL-4B-Instruct效果展示:高清OCR精准Box定位多轮图文对话作品集 1. 引言:当“看图说话”进化成“看图办事” 你有没有遇到过这种情况?看到一张复杂的图表,想快速提取里面的数据,却要手动一个个去数;…...
