Python图像处理【11】利用反卷积执行图像去模糊

利用反卷积执行图像去模糊

    • 0. 前言
    • 1. 图像模糊检测
      • 1.1 拉普拉斯 (Laplacian) 方差阈值
      • 1.2 使用 OpenCV 执行模糊检测
    • 2. 使用 SimpleITK 反卷积滤波器实现非盲去模糊
      • 2.1 去模糊分类
      • 2.2 实现非盲去模糊
    • 3. 使用 scikit-image 执行非盲去模糊
    • 小结
    • 系列链接

0. 前言

我们已经知道可以使用低通滤波器执行模糊操作,并减弱图像中较高频域。模糊操作(例如,高斯模糊)是线性的,在数学意义上是可逆的,但在实践中,该问题的逆过程计算起来非常困难。在本节中,我们将学习如何解决以下两个问题:

  • 如何通过对图像的拉普拉斯方差进行简单的阈值处理来检测图像是否模糊
  • 如何使用 SimpleItkscikit-image 库函数的反卷积算法来消除图像中的模糊

1. 图像模糊检测

1.1 拉普拉斯 (Laplacian) 方差阈值

在本节中,我们将学习如何通过使用 OpenCV 库计算图像的拉普拉斯 (Laplacian) 方差阈值来检测图像是否模糊。执行模糊检测的步骤如下:

  • 如果图像足够清晰,则拉普拉斯运算将在图像中检测水平和垂直边缘,以获得输出图像在给定范围内的方差
  • 相反,如果图像相对模糊,则拉普拉斯运算在图像中并不能检测到足够的细节,从而导致输出方差小于给定阈值

该过程对于阈值非常敏感,因此需要选择合适的阈值。

1.2 使用 OpenCV 执行模糊检测

在本节中,我们将使用灰度图像作为输入图像,并且为了进行演示,我们需要生成模糊的图像(通过使用不同类型的模糊核并与输入图像执行卷积),以测试我们实现的模糊检测函数。

(1) 我们首先使用 convolve() 函数实现 2D (空间)卷积,并将卷积输出值缩放至 [0,1] 范围内:

import scipy.fftpack as fp
from skimage.io import imread
from skimage.color import rgb2gray
import numpy as np
import matplotlib.pylab as plt
from scipy.signal import convolve2d
import cv2

def convolve(im, kernel):
    im1 = convolve2d(im, kernel, mode='same')
    return im1 / np.max(im1)

(2) 接下来,使用在前言中介绍的方法实现函数 check_if_blurry() 检查图像是否模糊。该函数接受输入图像和要使用的阈值作为参数,并返回 Laplacian 方差以及图像是否模糊。

def check_if_blurry(image, threshold):
    # compute the Laplacian of the image and then return the focus
    # measure, which is simply the variance of the Laplacian
    var = cv2.Laplacian(image, cv2.CV_64F).var()
    return 'Var Laplacian = {}\n{}'.format(round(var, 6), 'Blurry' if var < threshold else 'Not Blurry')

(3) 定义函数 plot_blurry() 以用 matplotlib.pyplotimshow() 绘制模糊输入图像:

def plot_blurry(im, title):
    plt.imshow(im), plt.axis('off'), plt.title(title, size=10)

(4) 构造一个大小为 15x15、参数 σ = 3 σ=3 σ=3 的高斯模糊核,通过与核执行卷积来模糊图像。

def get_gaussian_edge_blur_kernel(sigma, sz=15):
    # First create a 1-D Gaussian kernel
    x = np.linspace(-10, 10, sz)
    kernel_1d = np.exp(-x**2/sigma**2)
    kernel_1d /= np.trapz(kernel_1d) # normalize the sum to 1.0
    # create a 2-D Gaussian kernel from the 1-D kernel
    kernel_2d = kernel_1d[:, np.newaxis] * kernel_1d[np.newaxis, :]
    return kernel_2d

(5) 将阈值定义为 0.01,并在模糊图像上调用函数 check_if_blurry() 以返回图像是否模糊以及 laplacian 的方差。将原始图像和模糊图像插入列表中,以便进行绘制:

threshold = 0.01
imlist = []

im = rgb2gray(imread('1.png'))
imlist.append((im, 'original image\n' + check_if_blurry(im, threshold)))
kernel = get_gaussian_edge_blur_kernel(3)
im1 = convolve(im, kernel)
imlist.append((im1, '(edge) blurred image\n' + check_if_blurry(im1, threshold)))

(6) 创建一个长度为 9、角度为 45°15x15 运动模糊核,用该核模糊图像,并检查图像是否模糊:

def get_motion_blur_kernel(ln, angle, sz=15):
    kern = np.ones((1, ln), np.float32)
    angle = -np.pi*angle/180
    c, s = np.cos(angle), np.sin(angle)
    A = np.float32([[c, -s, 0], [s, c, 0]])
    sz2 = sz // 2
    A[:,2] = (sz2, sz2) - np.dot(A[:,:2], ((ln-1)*0.5, 0))
    kern = cv2.warpAffine(kern, A, (sz, sz), flags=cv2.INTER_CUBIC)
    return kern

kernel = get_motion_blur_kernel(9, 45)
im1 = convolve(im, kernel)
imlist.append((im1, '(motion) blurred image\n' + check_if_blurry(im1, threshold)))

(7) 最后,生成半径 715x15 失焦核,用此核模糊图像,然后检查图像是否模糊:

def get_out_of_focus_kernel(r, sz=15):
    kern = np.zeros((sz, sz), np.uint8)
    cv2.circle(kern, (sz, sz), r, 255, -1, cv2.LINE_AA, shift=1)
    kern = np.float32(kern) / 255
    return kern

kernel = get_out_of_focus_kernel(7)
im1 = convolve(im, kernel)
imlist.append((im1, '(out-of-focus) blurred image\n' + check_if_blurry(im1, threshold)))

(8) 绘制原始图像和模糊的图像,并显示关于图像是否模糊的相关信息:

plt.figure(figsize=(20,7))
plt.gray()
for i in range(len(imlist)):
    im, title = imlist[i]
    plt.subplot(1,4,i+1), plot_blurry(im, title)
plt.tight_layout()
plt.show()

模糊检测
从上图中可以看到,原始图像的 laplacian 的方差显著高于模糊图像。我们也可以使用不同的模糊核和阈值来检查模糊检测方法对阈值的敏感性。

2. 使用 SimpleITK 反卷积滤波器实现非盲去模糊

2.1 去模糊分类

图像反卷积是指一类试图从模糊图像中恢复清晰图像的算法,其使用模糊图像和可能的卷积核 h (假设卷积核是已知的或估计的)作为输入。如果模糊核 h 已知,则去模糊过程称为非盲取模糊 (non-blind deblurring),反之称为盲去模糊 (blind deblurring)。在本节中,我们将学习如何使用 SimpleITK 库的反卷积滤波器执行非盲去模糊。

2.2 实现非盲去模糊

(1) 首先,读取输入图像,并使用失焦模糊核模糊该图像:

import SimpleITK as sitk
from scipy import signal
from skimage.metrics import peak_signal_noise_ratio
from skimage.io import imread
from skimage.color import rgb2gray
import numpy as np
import matplotlib.pylab as plt
import cv2

def get_out_of_focus_kernel(r, sz=15):
    kern = np.zeros((sz, sz), np.uint8)
    cv2.circle(kern, (sz, sz), r, 255, -1, cv2.LINE_AA, shift=1)
    kern = np.float32(kern) / 255
    return kern

im = rgb2gray(imread('1.png'))
psf = get_out_of_focus_kernel(7, 9).astype(np.float)
im_blur = signal.convolve2d(im, psf, 'same')
im_blur = im_blur / np.max(im_blur)

(2) 使用逆滤波器恢复图像是最直接的反卷积方法。根据卷积定理,空间域中的两个图像的卷积等价于两个图像的傅立叶变换乘积,因此逆滤波器需要对乘法求逆。换句话说,逆滤波器计算公式如下所示:

F ^ ( u , v ) = { G ( u , v ) H ( u , v ) ∣ H ( u , v ) ∣ ≥ ϵ 0 o t h e r w i s e \hat F(u,v)=\left\{ \begin{array}{rcl} \frac {G(u,v)} {H(u,v)} & & {|H(u,v)|≥\epsilon}\\ 0 & & {otherwise} \end{array} \right. F^(u,v)={H(u,v)G(u,v)0H(u,v)ϵotherwise

(3) 使用 SimpleITK.InverseDeconvolutionImageFilter() 函数实现直接线性反卷积滤波器:

tkfilter = sitk.InverseDeconvolutionImageFilter()
tkfilter.SetNormalize(True)
im_res_IN = sitk.GetArrayFromImage(tkfilter.Execute (sitk.GetImageFromArray(im_blur), sitk.GetImageFromArray(psf)))

(4) 使用 Wiener 反卷积图像滤波器恢复与模糊核卷积后得到的图像,同时将噪声降至最低。

Wiener 滤波器旨在最大程度地减少低信噪比 (signal-to-noise ratio, SNR) 频率引起的噪声。Wiener 滤波器核是在频域中定义的,如下公式所示( SNR 越高,恢复的图像质量越高):

W ( u , v ) = H ∗ ( u , v ) ∣ H ( u , v ) ∣ 2 + K ( u , v ) = H ∗ ( u , v ) ∣ H ( u , v ) ∣ 2 + 1 S N R ( u , v ) K ( u , v ) = S η ( u , v ) S f ( u , v ) W(u,v)=\frac {H^*(u,v)} {|H(u,v)|^2+K(u,v)}=\frac {H^*(u,v)} {|H(u,v)|^2+\frac 1 {SNR(u,v)}}\\ K(u,v)=\frac {S_{\eta}(u,v)}{S_f(u,v)} W(u,v)=H(u,v)2+K(u,v)H(u,v)=H(u,v)2+SNR(u,v)1H(u,v)K(u,v)=Sf(u,v)Sη(u,v)

使用 SimpleITK.WienerDeconvolutionImageFilter() 函数实现 Wiener 滤波器。在这里,模糊后未向原始图像添加额外的噪音。因此,噪声方差设置为零:

tkfilter = sitk.WienerDeconvolutionImageFilter()
tkfilter.SetNoiseVariance(0)
tkfilter.SetNormalize(True)
im_res_WN = sitk.GetArrayFromImage(tkfilter.Execute (sitk.GetImageFromArray(im_blur), sitk.GetImageFromArray(psf)))

(5) 使用 Tikhonov 方法恢复图像。该方法通过在分母中添加正则化项来改进估计的反卷积滤波器(去模糊),该滤波器最小化以下公式中:

m i n f ^ ∣ ∣ f ^ ⊗ h − g ∣ ∣ L 2 2 + μ ∣ ∣ f ^ ∣ ∣ 2 T ( u , v ) = H ∗ ( u , v ) ∣ H ( u , v ) ∣ 2 + μ \underset {\hat f} {min} ||\hat f \otimes h-g||^2_{L_2}+ \mu ||\hat f||^2 \\ T(u,v)=\frac {H^*(u,v)} {|H(u,v)|^2+\mu} f^min∣∣f^hgL22+μ∣∣f^2T(u,v)=H(u,v)2+μH(u,v)

其中, f ^ \hat f f^ 表示去模糊图像 f f f 的估计值; h h h 表示模糊核; g g g 表示模糊图像;项 μ μ μ 在此滤波器中称为正则化,如果将μ设置为零,则该滤波器等价于逆滤波器。以下代码使用 simpleitk.tikhonovdeconvolutionImageFilter() 函数实现 Tikhonov 方法正则化的逆反卷积滤波器。

其中,将正则化常数设置为 0.008,我们也可以尝试不同的值,并观察不同值到对去模糊输出图像的影响:

tkfilter = sitk.TikhonovDeconvolutionImageFilter()
tkfilter.SetRegularizationConstant(0.008) #0.06)
tkfilter.SetNormalize(True)
im_res_TK = sitk.GetArrayFromImage(tkfilter.Execute (sitk.GetImageFromArray(im_blur), sitk.GetImageFromArray(psf)))

(6) 使用 Richardson-Lucy 算法恢复图像,该滤波器实现了 Richardson-Lucy 反卷积算法。该算法假定输入图像是由具有已知核的线性移位不变系统形成的。迭代算法使用贝叶斯的方法来改善每次迭代的估计(去模糊)图像:

f i + 1 ( x ) = { [ c ( x ) f i ( x ) ⊗ g ( x ) ] ⊗ g ( − x ) } f i ( x ) f_{i+1}(x)=\{[\frac {c(x)} {f_i(x)\otimes g(x)}]\otimes g(-x)\}f_i(x) fi+1(x)={[fi(x)g(x)c(x)]g(x)}fi(x)

其中 ⊗ \otimes 表示卷积操作, g ( x ) g(x) g(x) 表示 PSF c ( x ) c(x) c(x) 表示模糊图像, f i ( x ) f_i(x) fi(x) 表示去模糊图像。

以下代码使用 SimpleItk.RichardsonLucyDeconVolutionImageFilter() 函数利用 Richardson-Lucy 反卷积算法对输入图像执行反卷积。我们可以尝试使用不同的迭代次数,并观察对输出图像的影响:

tkfilter = sitk.RichardsonLucyDeconvolutionImageFilter()
tkfilter.SetNumberOfIterations(100)
tkfilter.SetNormalize(True)
im_res_RL = sitk.GetArrayFromImage(tkfilter.Execute (sitk.GetImageFromArray(im_blur), sitk.GetImageFromArray(psf)))

(7) 最后,绘制所有原始、模糊和使用不同反卷积算法得到的去模糊图像并计算 PSNR 值(以比较使用不同反卷积算法得到的去模糊图像的质量):

plt.figure(figsize=(20, 60))
plt.subplots_adjust(0,0,1,1,0.07,0.07)
plt.gray()

plt.subplot(231), plt.imshow(im), plt.axis('off'), plt.title('Original Image', size=10)
plt.subplot(232), plt.imshow(im_blur), plt.axis('off'), plt.title('Blurred (out-of-focus) Image, PSNR={:.3f}'.format(peak_signal_noise_ratio(im, im_blur)), size=10)
plt.subplot(233), plt.imshow(im_res_IN, vmin=im_blur.min(), vmax=im_blur.max()), plt.axis('off')
plt.title('Deconvolution using SimpleITK (Inverse Deconv.), PSNR={:.3f}'.format(peak_signal_noise_ratio(im, im_res_IN)), size=10)
plt.subplot(234), plt.imshow(im_res_WN, vmin=im_blur.min(), vmax=im_blur.max()), plt.axis('off')
plt.title('Deconvolution using SimpleITK (Wiener Deconv.), PSNR={:.3f}'.format(peak_signal_noise_ratio(im, im_res_WN)), size=10)
plt.subplot(235), plt.imshow(im_res_RL, vmin=im_blur.min(), vmax=im_blur.max()), plt.axis('off')
plt.title('Deconvolution using SimpleITK (Richardson-Lucy), PSNR={:.3f}'.format(peak_signal_noise_ratio(im, im_res_RL)), size=10)
plt.subplot(236), plt.imshow(im_res_TK, vmin=im_blur.min(), vmax=im_blur.max()), plt.axis('off')
plt.title('Deconvolution using SimpleITK (Tikhonov Deconv.), PSNR={:.3f}'.format(peak_signal_noise_ratio(im, im_res_TK)), size=10)

plt.show()

非盲去模糊

3. 使用 scikit-image 执行非盲去模糊

在本节中,我们将继续学习使用 Richardson-Lucy 算法学习如何实现非盲反卷积,但本节使用了 scikit-imagerestoration 模块。绘制输出(去模糊)图像及其 PSNR 值:

from skimage import restoration
from scipy import signal
from skimage.metrics import peak_signal_noise_ratio
from skimage.io import imread
from skimage.color import rgb2gray
import numpy as np
import matplotlib.pylab as plt
import cv2

def get_out_of_focus_kernel(r, sz=15):
    kern = np.zeros((sz, sz), np.uint8)
    cv2.circle(kern, (sz, sz), r, 255, -1, cv2.LINE_AA, shift=1)
    kern = np.float32(kern) / 255
    return kern

im = rgb2gray(imread('1.png'))
psf = get_out_of_focus_kernel(7, 9).astype(np.float) 
im_blur = signal.convolve2d(im, psf, 'same')
im_blur = im_blur / np.max(im_blur)

im_res_RL = restoration.richardson_lucy(im_blur, psf, iterations=20)

plt.figure(figsize=(20, 15))
plt.subplots_adjust(0,0,1,1,0.07,0.07)
plt.gray()
plt.imshow(im_res_RL, vmin=im_blur.min(), vmax=im_blur.max()), plt.axis('off')
plt.title('Deconvolution using skimage (Richardson-Lucy), PSNR={:.3f}'.format(peak_signal_noise_ratio(im, im_res_RL)), size=20)
plt.show()

非盲去模糊

小结

模糊操作(例如,高斯模糊)是线性的,从数学上讲模糊过程是可逆的,即可以通过模糊图像恢复原始高清图像。但在实践中,该问题的逆过程计算起来非常困难。在本节中,我们学习了如何通过对图像的拉普拉斯方差进行简单的阈值处理来检测图像是否模糊,以及如何使用 SimpleItkscikit-image 库函数的反卷积算法来消除图像中的模糊。

系列链接

Python图像处理【1】图像与视频处理基础
Python图像处理【2】探索Python图像处理库
Python图像处理【3】Python图像处理库应用
Python图像处理【4】图像线性变换
Python图像处理【5】图像扭曲/逆扭曲
Python图像处理【6】通过哈希查找重复和类似的图像
Python图像处理【7】采样、卷积与离散傅里叶变换
Python图像处理【8】使用低通滤波器模糊图像
Python图像处理【9】使用高通滤波器执行边缘检测
Python图像处理【10】基于离散余弦变换的图像压缩

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/6216.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

c++11 标准模板(STL)(std::unordered_multimap)(三)

定义于头文件 <unordered_map> template< class Key, class T, class Hash std::hash<Key>, class KeyEqual std::equal_to<Key>, class Allocator std::allocator< std::pair<const Key, T> > > class unordered…

2023年的深度学习入门指南(2) - 给openai API写前端

2023年的深度学习入门指南(2) - 给openai API写前端 上一篇我们说了&#xff0c;目前的大规模预训练模型技术还避免不了回答问题时出现低级错误。 但是其实&#xff0c;人类犯的逻辑错误也是层出不穷。 比如&#xff0c;有人就认为要想学好chatgpt&#xff0c;就要先学好Pyth…

【AI JUST AI】Stable Disffusion | 配合Chrome插件,与Notion API完美联动

【AI JUST AI】Stable Disffusion | 配合Chrome插件&#xff0c;与Notion API完美联动第一步、Stable Diffusion 链接 CMS开发Chrome插件在合适的位置增加一个发送至Notion的按钮编写按钮的逻辑部分使用GitHub作为图床图片上传 API第二步&#xff0c;使用Chat GPT优化样式Stabl…

超详细WindowsJDK1.8与JDK11版本切换教程

文章目录一、JDK生效原理二、安装配置JDK11三、切换JDK11版本四、查看切换JDK11版本是否成功五、再次切换至JDK8版本六、查看切换JDK8版本是否成功一、JDK生效原理 想必大家都在为如何流畅的切换JDK版本问题而来&#xff0c;那么在此篇文章开始之前&#xff0c;首先我们来思考一…

网络传输层

目录传输层再谈端口号端口号范围划分认识知名端口号netstatpidofUDP协议UDP协议端格式UDP的特点面向数据报UDP的缓冲区UDP使用注意事项使用udp协议 的应用层协议其它TCP协议TCP协议段格式如何理解链接如何理解三次握手如何理解四次挥手概念TIME_WAIT/CLOSE_WAITTCP策略确认应答…

【wps】【毕业论文】三线表的绘制

目录 一、三线表 二、制作步骤 &#xff08;1&#xff09;点击“插入”——点击“表格”创建一个表格 &#xff08;2&#xff09;选中整个表格——鼠标右键选择“边框和底纹”&#xff0c;“表格属性”再点击“边框和底纹”——点击“自定义”——选择表格的边的宽度——如图…

北京筑龙智能寻源 |助力企业一站式智能采购,降本增效

智能寻源——精准匹配&#xff0c;让采购更高效 智能寻源系统是北京筑龙为采购人搭建的一款全链路高效协同的采购寻源和供应商管理平台。助力采购人快速完成采购计划&#xff0c;提升采购效率&#xff0c;降低采购风险。 基于智能寻源系统&#xff0c;将全面打通供应商数据壁…

VR数字政务,VR全景技术,探索数字化治理新路径

近年来&#xff0c;随着虚拟现实&#xff08;VR&#xff09;技术的不断发展&#xff0c;VR数字政务也逐渐成为行政数字化转型的重要组成部分。VR数字政务可以为行政部门提供全新的数字化解决方案&#xff0c;使行政部门的工作更加高效、便捷和安全。 一、VR数字政务的定义和概述…

ABBYY FineReader PDF15下载安装教程

刚刚&#xff0c;老板给我一堆扫描文件&#xff08;图片和pdf文件&#xff09;&#xff0c;拿不到源文件&#xff0c;让我把客户发的扫描文件搞成word文档&#xff0c;密密麻麻&#xff0c;这些文件100多页&#xff0c;这要手工敲能把手敲费。 这时候&#xff0c;让我想到了这…

小白的git入门教程(三)

书接上文&#xff0c;我们讲到如何进行版本日志回退&#xff0c;根据这个&#xff0c;我们可以返回到任意状态 今天让我们接着讲完git的基本指令操作教程以及其余分支 删除文件操作 前提&#xff1a;要被删除的文件已经存储在本地库中 这里我们可以创建一个文件&#xff08;待…

ActiViz.NET 9.2.2023 Crack

适用于 .Net C# 和 Unity 的 3D 可视化库 释放可视化工具包的强大功能&#xff0c;在 C#、.Net 和 Unity 软件中为您的 3D 内容服务。 ActiViz 允许您轻松地将 3D 可视化集成到您的应用程序中。 Kitware 围绕 ActiViz 和 3D 应用程序提供支持和自定义开发 活动可视化功能 C…

【Java代码审计】表达式注入

1 前置知识 1.1 EL表达式 EL表达式主要功能&#xff1a; 获取数据&#xff1a;可以从JSP四大作用域中获取数据执行运算&#xff1a;执行一些关系运算&#xff0c;逻辑运算&#xff0c;算术运算获取web开发常用对象&#xff1a;通过内置 的11个隐式对象获取想要的数据调用jav…

STL容器之initializer_list与set

STL容器之initializer_list与setinitializer_list案例二&#xff08;实现n个数的加法&#xff09;set单集合有序性唯一性删除元素多重集合less与greater自定义类型initializer_list initializer_list创建的对象&#xff0c;初始值可以有很多个&#xff0c;像vector 一样 想多少…

第05章_排序与分页

第05章_排序与分页 &#x1f3e0;个人主页&#xff1a;shark-Gao &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是shark-Gao&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f389;目前状况&#xff1a;23届毕业生&#xff0c;目前在…

SPI、I2C、CAN通信的简单介绍和笔记

标题中的三种通信方式&#xff08;协议&#xff09;是比较常见的一些通信协议&#xff0c;对于它们有一定的了解对于我们学习嵌入式单片机的学习有着非常重要的作用。于是我们对此有一些信息给到各位读者&#xff0c;这也是笔者自己巩固知识点的方式。如果觉得有帮到各位&#…

551、Elasticsearch详细入门教程系列 -【分布式全文搜索引擎 Elasticsearch(二)】 2023.04.04

目录一、Elasticsearch创建/查看/删除索引、创建/查看/修改/删除文档、映射关系1.1 Elasticsearch中的数据格式1.2 索引操作1.2.1 创建索引1.2.2 查看指定索引1.2.3 查看全部索引1.2.4 删除索引1.3 文档操作1.3.1 创建文档1.3.2 查看单个文档&#xff1a;主键查询1.3.3 查看所有…

不敲代码用ChatGPT开发一个App

先说下背景&#xff0c;有一天我在想 ChatGPT 对于成熟的开发者来说已经是一个非常靠谱的助手了&#xff0c;身边也确实有很多同事把它作为一个离不开的助理担当。 但是如果我只是略微懂一点前端知识的新人&#xff0c;了解 HTML、CSS、JS 相关的知识&#xff0c;想开发一个安…

什么是UEFI签名认证?UEFI签名有什么好处?

为了防御恶意软件攻击&#xff0c;目前市面上所有电脑设备启动时默认开启安全启动(Secure Boot)模式。安全启动(Secure Boot)是UEFI扩展协议定义的安全标准&#xff0c;可以确保设备只使用OEM厂商信任的软件启动。UEFI签名认证就是对运行在 UEFI 系统下的 efi 驱动和通过 UEFI …

第10章_创建和管理表

第10章_创建和管理表 &#x1f3e0;个人主页&#xff1a;shark-Gao &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是shark-Gao&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f389;目前状况&#xff1a;23届毕业生&#xff0c;目前…

OpenCloudOS 9.0发布,腾讯闯入底层基础软件“深水区”

3月22日&#xff0c;腾讯发布了2022第四季度及全年业绩&#xff0c;ToB业务成为腾讯的核心引擎。与此同时&#xff0c;ToB的腾讯在近年来持续加码自研投入&#xff0c;提升底层技术实力&#xff0c;2022年研发投入达到614亿元&#xff0c;2018年至今在研发上的投入已经超过2056…