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

Python图像处理:频域滤波降噪和图像增强

图像处理已经成为我们日常生活中不可或缺的一部分,涉及到社交媒体和医学成像等各个领域。通过数码相机或卫星照片和医学扫描等其他来源获得的图像可能需要预处理以消除或增强噪声。频域滤波是一种可行的解决方案,它可以在增强图像锐化的同时消除噪声。

快速傅里叶变换(FFT)是一种将图像从空间域变换到频率域的数学技术,是图像处理中进行频率变换的关键工具。通过利用图像的频域表示,我们可以根据图像的频率内容有效地分析图像,从而简化滤波程序的应用以消除噪声。本文将讨论图像从FFT到逆FFT的频率变换所涉及的各个阶段,并结合FFT位移和逆FFT位移的使用。

本文使用了三个Python库,即openCV、Numpy和Matplotlib。

 importcv2importnumpyasnpfrommatplotlibimportpyplotaspltimg=cv2.imread('sample.png',0) # Using 0 to read image in grayscale modeplt.imshow(img, cmap='gray')  #cmap is used to specify imshow that the image is in greyscaleplt.xticks([]), plt.yticks([])  # remove tick marksplt.show()

1、快速傅里叶变换(FFT)

快速傅里叶变换(FFT)是一种广泛应用的数学技术,它允许图像从空间域转换到频率域,是频率变换的基本组成部分。利用FFT分析,可以得到图像的周期性,并将其划分为不同的频率分量,生成图像频谱,显示每个图像各自频率成分的振幅和相位。

 f=np.fft.fft2(img)  #the image 'img' is passed to np.fft.fft2() to compute its 2D Discrete Fourier transform f mag=20*np.log(np.abs(f))plt.imshow(mag, cmap='gray') #cmap='gray' parameter to indicate that the image should be displayed in grayscale.plt.title('Magnitude Spectrum') plt.xticks([]), plt.yticks([])plt.show()

上面代码使用np.abs()计算傅里叶变换f的幅度,np.log()转换为对数刻度,然后乘以20得到以分贝为单位的幅度。这样做是为了使幅度谱更容易可视化和解释。

2、FFT位移

为了使滤波算法应用于图像,利用FFT移位将图像的零频率分量被移动到频谱的中心

 fshift = np.fft.fftshift(f)mag = 20*np.log(np.abs(fshift)) plt.imshow(mag, cmap = 'gray')plt.title('Centered Spectrum'), plt.xticks([]), plt.yticks([])plt.show()

3、过滤

频率变换的的一个目的是使用各种滤波算法来降低噪声和提高图像质量。两种最常用的图像锐化滤波器是Ideal high-pass filter 和Gaussian high-pass filter。这些滤波器都是使用的通过快速傅里叶变换(FFT)方法获得的图像的频域表示。

Ideal high-pass filter(理想滤波器) 是一种无限长的、具有无限频带宽和理想通带和阻带响应的滤波器。其通带内所有频率的信号都被完全传递,而阻带内所有频率的信号则完全被抑制。

在频域上,理想滤波器的幅频响应为:

  • 在通带内,幅频响应为 1
  • 在阻带内,幅频响应为 0

在时域上,理想滤波器的冲激响应为:

  • 在通带内,冲激响应为一个无限长的单位冲激函数序列
  • 在阻带内,冲激响应为零

由于理想滤波器在频域上具有无限带宽,因此它无法在实际应用中实现。实际中使用的数字滤波器通常是基于理想滤波器的逼近,所以才被成为只是一个Ideal。

高斯高通滤波器(Gaussian high-pass filter)是一种在数字图像处理中常用的滤波器。它的作用是在图像中保留高频细节信息,并抑制低频信号。该滤波器基于高斯函数,具有光滑的频率响应,可以适应各种图像细节。

高斯高通滤波器的频率响应可以表示为:

H(u,v) = 1 - L(u,v)

其中,L(u,v)是一个低通滤波器,它可以用高斯函数表示。通过将低通滤波器的响应从1中减去,可以得到一个高通滤波器的响应。在实际中,通常使用不同的参数设置来调整高斯函数,以达到不同的滤波效果。

圆形掩膜(disk-shaped images)是用于定义在图像中进行傅里叶变换时要保留或抑制的频率分量。在这种情况下,理想滤波器通常是指理想的低通或高通滤波器,可以在频域上选择保留或抑制特定频率范围内的信号。将这个理想滤波器应用于图像的傅里叶变换后,再进行逆变换,可以得到经过滤波器处理后的图像。

具体的细节我们就不介绍了,直接来看代码:

下面函数是生成理想高通和低通滤波器的圆形掩膜

 importmathdefdistance(point1,point2):returnmath.sqrt((point1[0]-point2[0])**2+ (point1[1]-point2[1])**2)defidealFilterLP(D0,imgShape):base=np.zeros(imgShape[:2])rows, cols=imgShape[:2]center= (rows/2,cols/2)forxinrange(cols):foryinrange(rows):ifdistance((y,x),center) <D0:base[y,x] =1returnbasedefidealFilterHP(D0,imgShape):base=np.ones(imgShape[:2])rows, cols=imgShape[:2]center= (rows/2,cols/2)forxinrange(cols):foryinrange(rows):ifdistance((y,x),center) <D0:base[y,x] =0returnbase

下面函数生成一个高斯高、低通滤波器与所需的圆形掩膜

 importmathdefdistance(point1,point2):returnmath.sqrt((point1[0]-point2[0])**2+ (point1[1]-point2[1])**2)defgaussianLP(D0,imgShape):base=np.zeros(imgShape[:2])rows, cols=imgShape[:2]center= (rows/2,cols/2)forxinrange(cols):foryinrange(rows):base[y,x] =math.exp(((-distance((y,x),center)**2)/(2*(D0**2))))returnbasedefgaussianHP(D0,imgShape):base=np.zeros(imgShape[:2])rows, cols=imgShape[:2]center= (rows/2,cols/2)forxinrange(cols):foryinrange(rows):base[y,x] =1-math.exp(((-distance((y,x),center)**2)/(2*(D0**2))))returnbase

过滤示例

 fig, ax=plt.subplots(2, 2) # create a 2x2 grid of subplotsfig.suptitle('Filters') # set the title for the entire figure# plot the first image in the top-left subplotim1=ax[0, 0].imshow(np.abs(idealFilterLP(50, img.shape)), cmap='gray')ax[0, 0].set_title('Low Pass Filter of Diameter 50 px')ax[0, 0].set_xticks([])ax[0, 0].set_yticks([])# plot the second image in the top-right subplotim2=ax[0, 1].imshow(np.abs(idealFilterHP(50, img.shape)), cmap='gray')ax[0, 1].set_title('High Pass Filter of Diameter 50 px')ax[0, 1].set_xticks([])ax[0, 1].set_yticks([])# plot the third image in the bottom-left subplotim3=ax[1, 0].imshow(np.abs(gaussianLP(50 ,img.shape)), cmap='gray')ax[1, 0].set_title('Gaussian Filter of Diameter 50 px')ax[1, 0].set_xticks([])ax[1, 0].set_yticks([])# plot the fourth image in the bottom-right subplotim4=ax[1, 1].imshow(np.abs(gaussianHP(50 ,img.shape)), cmap='gray')ax[1, 1].set_title('Gaussian Filter of Diameter 50 px')ax[1, 1].set_xticks([])ax[1, 1].set_yticks([])# adjust the spacing between subplotsfig.subplots_adjust(wspace=0.5, hspace=0.5)# save the figure to a filefig.savefig('filters.png', bbox_inches='tight')

相乘过滤器和移位的图像得到过滤图像

为了获得具有所需频率响应的最终滤波图像,关键是在频域中对移位后的图像与滤波器进行逐点乘法。

这个过程将两个图像元素的对应像素相乘。例如,当应用低通滤波器时,我们将对移位的傅里叶变换图像与低通滤波器逐点相乘。

此操作抑制高频并保留低频,对于高通滤波器反之亦然。这个乘法过程对于去除不需要的频率和增强所需的频率是必不可少的,从而产生更清晰和更清晰的图像。

它使我们能够获得期望的频率响应,并在频域获得最终滤波图像。

4、乘法滤波器(Multiplying Filter)和平移后的图像(Shifted Image)

乘法滤波器是一种以像素值为权重的滤波器,它通过将滤波器的权重与图像的像素值相乘,来获得滤波后的像素值。具体地,假设乘法滤波器的权重为h(i,j),图像的像素值为f(m,n),那么滤波后的像素值g(x,y)可以表示为:

g(x,y) = ∑∑ f(m,n)h(x-m,y-n)

其中,∑∑表示对所有的(m,n)进行求和。

平移后的图像是指将图像进行平移操作后的结果。平移操作通常是指将图像的像素沿着x轴和y轴方向进行平移。平移后的图像与原始图像具有相同的大小和分辨率,但它们的像素位置发生了变化。在滤波操作中,平移后的图像可以用于与滤波器进行卷积运算,以实现滤波操作。

此操作抑制高频并保留低频,对于高通滤波器反之亦然。这个乘法过程对于去除不需要的频率和增强所需的频率是必不可少的,从而产生更清晰和更清晰的图像。

它使我们能够获得期望的频率响应,并在频域获得最终滤波图像。

 fig, ax=plt.subplots()im=ax.imshow(np.log(1+np.abs(fftshifted_image*idealFilterLP(50,img.shape))), cmap='gray')ax.set_title('Filtered Image in Frequency Domain')ax.set_xticks([])ax.set_yticks([])fig.savefig('filtered image in freq domain.png', bbox_inches='tight')

在可视化傅里叶频谱时,使用np.log(1+np.abs(x))和20*np.log(np.abs(x))之间的选择是个人喜好的问题,可以取决于具体的应用程序。

一般情况下会使用Np.log (1+np.abs(x)),因为它通过压缩数据的动态范围来帮助更清晰地可视化频谱。这是通过取数据绝对值的对数来实现的,并加上1以避免取零的对数。

而20*np.log(np.abs(x))将数据按20倍缩放,并对数据的绝对值取对数,这可以更容易地看到不同频率之间较小的幅度差异。但是它不会像np.log(1+np.abs(x))那样压缩数据的动态范围。

这两种方法都有各自的优点和缺点,最终取决于具体的应用程序和个人偏好。

5、逆FFT位移

在频域滤波后,我们需要将图像移回原始位置,然后应用逆FFT。为了实现这一点,需要使用逆FFT移位,它反转了前面执行的移位过程。

 fig, ax=plt.subplots()im=ax.imshow(np.log(1+np.abs(np.fft.ifftshift(fftshifted_image*idealFilterLP(50,img.shape)))), cmap='gray')ax.set_title('Filtered Image inverse fft shifted')ax.set_xticks([])ax.set_yticks([])fig.savefig('filtered image inverse fft shifted.png', bbox_inches='tight')

6、快速傅里叶逆变换(IFFT)

快速傅里叶逆变换(IFFT)是图像频率变换的最后一步。它用于将图像从频域传输回空间域。这一步的结果是在空间域中与原始图像相比,图像减少了噪声并提高了清晰度。

 fig, ax=plt.subplots()im=ax.imshow(np.log(1+np.abs(np.fft.ifft2(np.fft.ifftshift(fftshifted_image*idealFilterLP(50,img.shape))))), cmap='gray')ax.set_title('Final Filtered Image In Spatial Domain')ax.set_xticks([])ax.set_yticks([])fig.savefig('final filtered image.png', bbox_inches='tight')

总结

我们再把所有的操作串在一起显示,

函数绘制所有图像

 defFreq_Trans(image, filter_used):img_in_freq_domain=np.fft.fft2(image)# Shift the zero-frequency component to the center of the frequency spectrumcentered=np.fft.fftshift(img_in_freq_domain)# Multiply the filter with the centered spectrumfiltered_image_in_freq_domain=centered*filter_used# Shift the zero-frequency component back to the top-left corner of the frequency spectruminverse_fftshift_on_filtered_image=np.fft.ifftshift(filtered_image_in_freq_domain)# Apply the inverse Fourier transform to obtain the final filtered imagefinal_filtered_image=np.fft.ifft2(inverse_fftshift_on_filtered_image)returnimg_in_freq_domain,centered,filter_used,filtered_image_in_freq_domain,inverse_fftshift_on_filtered_image,final_filtered_image

使用高通、低通理想滤波器和高斯滤波器的直径分别为50、100和150像素,展示它们对增强图像清晰度的影响。

 fig, axs=plt.subplots(12, 7, figsize=(30, 60))filters= [(f, d) forfin [idealFilterLP, idealFilterHP, gaussianLP, gaussianHP] fordin [50, 100, 150]]forrow, (filter_name, filter_diameter) inenumerate(filters):# Plot each filter output on a separate subplotresult=Freq_Trans(img, filter_name(filter_diameter, img.shape))forcol, title, img_arrayinzip(range(7), ["Original Image", "Spectrum", "Centered Spectrum", f"{filter_name.__name__} of Diameter {filter_diameter} px",f"Centered Spectrum multiplied by {filter_name.__name__}", "Decentralize", "Processed Image"],[img, np.log(1+np.abs(result[0])), np.log(1+np.abs(result[1])), np.abs(result[2]), np.log(1+np.abs(result[3])), np.log(1+np.abs(result[4])), np.abs(result[5])]):axs[row, col].imshow(img_array, cmap='gray')axs[row, col].set_title(title)plt.tight_layout()plt.savefig('all_processess.png', bbox_inches='tight')plt.show()

可以看到,当改变圆形掩膜的直径时,对图像清晰度的影响会有所不同。随着直径的增加,更多的频率被抑制,从而产生更平滑的图像和更少的细节。减小直径允许更多的频率通过,从而产生更清晰的图像和更多的细节。为了达到理想的效果,选择合适的直径是很重要的,因为使用太小的直径会导致过滤器不够有效,而使用太大的直径会导致丢失太多的细节。

一般来说,高斯滤波器由于其平滑性和鲁棒性,更常用于图像处理任务。在某些应用中,需要更尖锐的截止,理想滤波器可能更适合。

利用FFT修改图像频率是一种有效的降低噪声和提高图像锐度的方法。这包括使用FFT将图像转换到频域,使用适当的技术过滤噪声,并使用反FFT将修改后的图像转换回空间域。通过理解和实现这些技术,我们可以提高各种应用程序的图像质量。

https://avoid.overfit.cn/post/8768ec2a60a0456eab327abc33146508

作者:Muhammad Ahmed

相关文章:

Python图像处理:频域滤波降噪和图像增强

图像处理已经成为我们日常生活中不可或缺的一部分&#xff0c;涉及到社交媒体和医学成像等各个领域。通过数码相机或卫星照片和医学扫描等其他来源获得的图像可能需要预处理以消除或增强噪声。频域滤波是一种可行的解决方案&#xff0c;它可以在增强图像锐化的同时消除噪声。 …...

智能手机高端“酣战”,转机在何方?

经过多年发展&#xff0c;如今全世界有七成手机由中国制造&#xff0c;但在利润最丰厚的高端市场&#xff0c;国产厂商在很长一段时间之内都是形单影只&#xff0c;曾经一度跻身高端的“华为”因为封禁成了“绝唱”。 华为“失声”高端之后&#xff0c;其他一众国产厂商或主动…...

K8s pod 动态弹性扩缩容 HPA

一、概述Horizontal Pod Autoscaler&#xff08;HPA&#xff0c;Pod水平自动伸缩&#xff09;&#xff0c;根据平均 CPU 利用率、平均内存利用率或你指定的任何其他自定义指标自动调整 Deployment 、ReplicaSet 或 StatefulSet 或其他类似资源&#xff0c;实现部署的自动扩展和…...

C++中的类简要介绍

文章目录前言一、什么是类什么是对象1.类的概述2.对象的概述二、如何创建使用类三、class和struct创建类时的区别1.访问级别2.继承方式总结前言 本篇文章讲给大家介绍一个C中重要的概念&#xff0c;了解了这个概念大家就明白了为什么C会叫做面向对象编程了。 一、什么是类什么…...

项目管理工具DHTMLX Gantt灯箱元素配置教程:只读模式

DHTMLX Gantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表。可满足项目管理应用程序的大部分开发需求&#xff0c;具备完善的甘特图图表库&#xff0c;功能强大&#xff0c;价格便宜&#xff0c;提供丰富而灵活的JavaScript API接口&#xff0c;与各种服务器端技术&am…...

从LiveData迁移到Kotlin的 Flow,才发现是真的香!

LiveData 对于 Java 开发者、初学者或是一些简单场景而言仍是可行的解决方案。而对于一些其他的场景&#xff0c;更好的选择是使用 Kotlin 数据流 (Kotlin Flow)。虽说数据流 (相较 LiveData) 有更陡峭的学习曲线&#xff0c;但由于它是 JetBrains 力挺的 Kotlin 语言的一部分&…...

【BOOST C++】组件编程(2)-- 组件的设计原理

GitHub - ros2/demos at foxy 一、说明 为了研究ROS2的组件编程&#xff0c;首先要理解如何何为组件。组件本是微软的发明物体&#xff0c;但是在ubuntu上需要自己从底层实现&#xff0c;就说ROS2不用你写&#xff0c;但是就能看明白也是需要一点理论功底的。本篇按照COM内幕的…...

基于单细胞多组学数据无监督构建基因调控网络

在单细胞分辨率下识别基因调控网络&#xff08;GRNs&#xff0c;gene regulatory networks&#xff09;一直是一个巨大的挑战&#xff0c;而单细胞多组学数据的出现为构建GRNs提供了机会。 来自&#xff1a;Unsupervised construction of gene regulatory network based on si…...

蓝桥杯-最优清零方案(2022省赛)

蓝桥杯-最优清零方案1、问题描述2、解题思路3、代码实现1、问题描述 给定一个长度为 N 的数列 1,2,⋯,A1,A2,...,ANA_1,A_2,...,A_NA1​,A2​,...,AN​ 。现在小蓝想通过若干次操作将 这个数列中每个数字清零。 每次操作小蓝可以选择以下两种之一: 1. 选择一个大于 0 的整数, 将…...

Mac免费软件下载网站推荐(最全免费,替代MacWk)

一、Appstorrent 官方网站&#xff1a; https://appstorrent.ru/ 这是一个俄语网站&#xff0c;其他很多网站资源都来自这里。点击右上角切换到中文。不需要登录网站&#xff0c;直接从软件详情页下载即可。体验非常好。 二、Xclient 官方网站&#xff1a; https://xclie…...

GPU是什么

近期ChatGPT十分火爆&#xff0c;随之而来的是M国开始禁售高端GPU显卡。M国想通过禁售GPU显卡的方式阻挡中国在AI领域的发展。 GPU是什么&#xff1f;GPU&#xff08;英语&#xff1a;Graphics Processing Unit&#xff0c;缩写&#xff1a;GPU&#xff09;是显卡的“大脑”&am…...

20230305学习计划

目录 第二天学习开发框架 前言 一、巩固复习第一天20230304学习笔记 二、SpringMVC中的控制器是不是单例模式&#xff1f;如果是&#xff0c;如何保证线程安全&#xff1f; 1、控制器是单例模式&#xff0c;是线程不安全的。 2、Spring中保证线程安全的方法&#xff1a; …...

SocketCan 应用编程

SocketCan 应用编程 由于 Linux 系统将 CAN 设备作为网络设备进行管理&#xff0c;因此在 CAN 总线应用开发方面&#xff0c;Linux 提供了SocketCAN 应用编程接口&#xff0c;使得 CAN 总线通信近似于和以太网的通信&#xff0c;应用程序开发接口更加通用&#xff0c;也更加灵…...

从零学习python - 04函数方法与返回值

函数&#xff1a;Function-也称为方法&#xff0c;是组织好的、可重复使用的&#xff0c;用来实现指定功能的代码块。函数的定义与调用:创建函数目的是封装业务逻辑&#xff0c;实现代码复用# 创建函数关键字:def(definition)def fun1(x, y):print(x y)函数的参数:python函数中…...

MySQL实战之事务到底是隔离的还是不隔离的

1.前言 我们在MySQL实战之事务隔离&#xff1a;为什么你改了我还看不见讲过事务隔离级别的时候提到过&#xff0c;如果是可重复读隔离级别&#xff0c;事务T启动的时候会创建一个视图read-view,之后事务T执行期间&#xff0c;即使有其他事务修改了数据&#xff0c;事务T看到的…...

Elasticsearch:理解 Master,Elections,Quorum 及 脑裂

集群中的每个节点都可以分配多个角色&#xff1a;master、data、ingest、ml&#xff08;机器学习&#xff09;等。 我们在当前讨论中感兴趣的角色之一是 master 角色。 在 Elasticsearch 的配置中&#xff0c;我们可以配置一个节点为 master 节点。master 角色的分配表明该节点…...

【致敬女神】HTMLReport应用之Unittest+Python+Selenium+HTMLReport项目自动化测试实战

HTMLReport应用之UnittestPythonSeleniumHTMLReport项目自动化测试实战1 测试框架结构2 技术栈3 实现思路3.1 使用HtmlTestRunner3.2 使用HTMLReport4 TestRunner参数说明4.1 源码4.2 参数说明5 框架代码5.1 common/reportOut.py5.2 common/sendMain.py5.3 report5.3.1 xxx.htm…...

JAVA的16 个实用代码优化小技巧

一、类成员与方法的可见性最小化 举例&#xff1a;如果是一个private的方法&#xff0c;想删除就删除。 如果一个public的service方法&#xff0c;或者一个public的成员变量&#xff0c;删除一下&#xff0c;不得思考很多。 二、使用位移操作替代乘除法 计算机是使用二进制…...

并发编程的三大挑战之原子性及其解决方案

目录 一、原子性问题 1、带来原子性问题的原因 2、如何解决线程切换带来的原子问题 2.1、使用synchronized关键字来保证 2.2、使用CAS来保证原子性 2.3、使用lock锁来保证 一、原子性问题 1、带来原子性问题的原因 线程切换是带来原子的根本原因&#xff0c;java的并发程…...

QML动画(其他的动画)

PauseAnimation &#xff08;暂停动画&#xff09; 为动画提供暂停 Rectangle{id:rect1width: 100;height: 100;x:100;y:100color: "lightBlue"SequentialAnimation{running: trueColorAnimation {target: rect1&#xff1b;property: "color"&#xff1b;…...

霜儿-汉服-造相Z-Turbo实战体验:输入一句话,秒获专属汉服少女AI写真

霜儿-汉服-造相Z-Turbo实战体验&#xff1a;输入一句话&#xff0c;秒获专属汉服少女AI写真 1. 惊艳效果展示&#xff1a;从文字到古风美图的魔法 想象一下&#xff0c;你只需要输入"霜儿&#xff0c;古风汉服少女&#xff0c;月白霜花刺绣汉服&#xff0c;江南庭院&quo…...

效果实测:nli-distilroberta-base处理长文本与跨语言推理能力

效果实测&#xff1a;nli-distilroberta-base处理长文本与跨语言推理能力 1. 模型核心能力概览 nli-distilroberta-base作为轻量级自然语言推理模型&#xff0c;在文本理解任务中展现出独特优势。这个基于RoBERTa架构的蒸馏版本&#xff0c;保留了原模型90%以上的性能&#x…...

s2-pro语音合成教程:参考音频采样率/格式/信噪比最佳实践

s2-pro语音合成教程&#xff1a;参考音频采样率/格式/信噪比最佳实践 1. 认识s2-pro语音合成工具 s2-pro是Fish Audio开源的专业级语音合成模型镜像&#xff0c;它不仅能将文本转换为自然流畅的语音&#xff0c;还能通过参考音频来复用特定的音色。这意味着你可以上传一段样本…...

Canvas动画实战:用requestAnimationFrame打造会飘动的云朵与彩虹

1. Canvas动画基础入门 第一次接触Canvas动画时&#xff0c;我被它强大的绘图能力惊艳到了。记得当时为了做一个简单的太阳升起动画&#xff0c;硬是用setInterval写了上百行代码&#xff0c;结果动画卡得像幻灯片一样。后来才发现&#xff0c;原来浏览器早就为我们准备了更专业…...

Audio Pixel Studio效果惊艳集锦:10类垂直场景语音生成+分离真实案例

Audio Pixel Studio效果惊艳集锦&#xff1a;10类垂直场景语音生成分离真实案例 1. 引言&#xff1a;当声音创作变得触手可及 想象一下&#xff0c;你正在为一个短视频项目寻找合适的旁白配音&#xff0c;但预算有限&#xff0c;专业配音师的价格让你望而却步。或者&#xff…...

Node.js 环境避坑指南:从零搞定 Fetch MCP 依赖安装与构建 (Windows/macOS)

Node.js 环境避坑指南&#xff1a;从零搞定 Fetch MCP 依赖安装与构建 在开发者的日常工作中&#xff0c;遇到环境配置问题就像程序员遇到bug一样常见。特别是对于刚接触Node.js生态的前端新手&#xff0c;或是需要在不同操作系统间切换的开发者来说&#xff0c;一个看似简单的…...

MedGemma 1。5在Linux环境下的部署与优化

MedGemma 1.5在Linux环境下的部署与优化 1. 引言 MedGemma 1.5是谷歌最新发布的开源医疗AI模型&#xff0c;专门针对医学影像和文本数据处理进行了深度优化。这个40亿参数的轻量级模型不仅能处理CT、MRI等三维医学影像&#xff0c;还能分析病理切片和电子健康记录&#xff0c…...

【英飞凌】TC3XX单片机型号解码:从命名规则看芯片选型

1. 英飞凌TC3XX单片机命名规则解析 第一次接触英飞凌TC3XX系列单片机时&#xff0c;我完全被那一长串型号搞懵了。TC387TP、TC377T、TC397QP...这些看似随机的字母数字组合&#xff0c;其实隐藏着丰富的芯片信息。经过几个项目的实战&#xff0c;我终于摸清了这套命名规则的规律…...

静态图训练卡顿、NCCL超时、Graph Break频发?PyTorch 3.0分布式训练高频故障诊断与热修复清单,含12个可复用调试脚本

第一章&#xff1a;PyTorch 3.0静态图分布式训练故障全景认知PyTorch 3.0 引入的静态图编译&#xff08;TorchDynamo Inductor 后端&#xff09;与原生分布式训练&#xff08;如 FSDP、DDP&#xff09;深度耦合后&#xff0c;故障表现呈现多维交织特征&#xff1a;编译期图构建…...

SEO_2024年最新SEO策略与趋势深度解析(352 )

<h2>2024年最新SEO策略与趋势深度解析</h2> <p>在数字化时代&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;依然是网站流量和品牌影响力的核心驱动力。2024年&#xff0c;随着互联网技术的不断进步&#xff0c;SEO策略和趋势也在不断演变。本文将详细…...