实验4 图像空间滤波

news2025/1/20 1:38:23

1. 实验目的

①掌握图像空间滤波的主要原理与方法;
②掌握图像边缘提取的主要原理和方法;
③了解空间滤波在图像处理和机器学习中的应用。

2. 实验内容

①调用 Matlab / Python +OpenCV中的函数,实现均值滤波、高斯滤波、中值滤波等。
②调用 Matlab /Python + OpenCV中的函数,实现边缘提取(Sobel、Robert、Laplacian、Prewitt、Canny等)。
③在Matlab/Python +OpenCV中,编程实现均值滤波,高斯滤波和中值滤波。

3. 实验过程

3.1 图像添加噪声

使用Matlab/Python +OpenCV中的加噪声函数,分别给同一幅图像中加入不同比例的高斯噪声、椒盐噪声、泊松噪声,并在图像中添加直线等干扰。
① 请填写以下函数对应的参数说明:

函数名函数功能参数说明
J = imnoise(I, ‘gaussian’, m, v)添加高斯噪声I:输入图像。 'gaussian':指定添加高斯噪声。 m:高斯分布的均值。 v:高斯分布的方差
J = imnoise(I, ‘salt & pepper’, d)添加椒盐噪声I:输入图像。 'salt & pepper':指定添加椒盐噪声。 d:控制噪声密度的参数,取值范围为0到1之间,表示噪声像素占总像素数的比例。
J = imnoise(I, ‘poisson’)添加泊松噪声I:输入图像。 'poisson':指定添加泊松噪声。
② 源代码及实验结果
%实验4-1 为图像添加噪声
% 读取图像
image = imread('lena.png');
image_gray = rgb2gray(image);
 
% 添加高斯噪声
gaussian_noise_image = imnoise(image_gray, 'gaussian', 0, 0.01);
 
% 添加椒盐噪声
salt_pepper_noise_image = imnoise(image_gray, 'salt & pepper', 0.05);
 
%泊松
% 将图像转换为双精度类型
image_gray_double = im2double(image_gray);
% 计算泊松噪声参数
lambda = 0.1 * mean(image_gray_double(:)); % 泊松分布的平均值
% 生成泊松噪声
poisson_noise = poissrnd(lambda, size(image_gray_double));
% 添加泊松噪声
poisson_noise_image_double = image_gray_double + poisson_noise;
% 将图像还原为8位无符号整数类型
poisson_noise_image = im2uint8(poisson_noise_image_double);
 
% 添加直线干扰
line_interference_image = insertShape(image_gray, 'Line', [1 1 size(image_gray,2) size(image_gray,2)], 'Color', 'white', 'LineWidth', 1);
 
% 显示原始图像和添加不同噪声的图像
figure;
subplot(2, 2, 1);
imshow(image_gray);
title('原始图像');
subplot(2, 2, 2);
imshow(gaussian_noise_image);
title('高斯噪声');
subplot(2, 2, 3);
imshow(salt_pepper_noise_image);
title('椒盐噪声');
subplot(2, 2, 4);
imshow(poisson_noise_image);
title('泊松噪声');
 
% 显示添加直线干扰后的图像
figure;
imshow(line_interference_image);
title('直线干扰');

在这里插入图片描述
在这里插入图片描述
③ 结果对比与分析(观察对比不同类型、参数噪声的特点)

高斯噪声(Gaussian Noise):
特点:高斯噪声是一种服从高斯分布(也称为正态分布)的随机噪声。它是一种连续性的噪声,呈现为图像中的随机亮度变化。
形成原因:高斯噪声可以由许多因素引起,例如电子设备的电子噪声、图像传感器的固有噪声等。
效果:高斯噪声对图像的影响主要体现在图像的平滑程度上,它会使图像的细节模糊化。
椒盐噪声(Salt and Pepper Noise):
特点:椒盐噪声是一种随机的、突发的噪声,表现为图像中出现亮白或暗黑的孤立像素点。
形成原因:椒盐噪声可能是因为信号损坏或传输错误导致像素值发生突变引起的。
效果:椒盐噪声会在图像中引入明显的孤立像素点,使图像出现突然的亮点或暗点。
泊松噪声(Poisson Noise):
特点:泊松噪声是由于光子计数的随机性导致的一种噪声。它在低光条件下的图像中更为常见。
形成原因:泊松噪声主要是由于光照条件下的随机光子计数引起的,例如低照度图像中的光子计数变化。
效果:泊松噪声会导致图像的亮度变化和细节的模糊,尤其在低光条件下会更加明显。

3.2 图像平滑

使用 Matlab/Python +OpenCV中的相关函数,对3.1中加噪的图像进行均值滤波、高斯滤波和中值滤波。
① 请填写以下函数对应的参数说明:

在这里插入图片描述
在这里插入图片描述

② 源代码及实验结果(添加必要注释)

%实验4-2 图像去除噪声实验
% 读取图像
image = imread('lena.png');
image_gray = rgb2gray(image);
 
% 添加高斯噪声
gaussian_noise_image = imnoise(image_gray, 'gaussian', 0, 0.01);
  
 
 
% 中值滤波
median_filtered = medfilt2(gaussian_noise_image, [3 3]);
% 均值滤波
mean_filtered = imfilter(gaussian_noise_image, fspecial('average', [3 3]));
 
% 高斯滤波
gaussian_filtered = imfilter(gaussian_noise_image, fspecial('gaussian', [4 4], 2));
 
% 显示原始图像和滤波后的图像
figure;
subplot(2, 2, 1), imshow(gaussian_noise_image), title('原始图像');
subplot(2, 2, 2), imshow(mean_filtered), title('均值滤波');
subplot(2, 2, 3), imshow(gaussian_filtered), title('高斯滤波');
subplot(2, 2, 4), imshow(median_filtered), title('中值滤波');

在这里插入图片描述
③ 实验结果对比与分析
对比不同类型和尺寸的滤波器的实验结果,分析原因,并总结对于含有不同噪声图像,如何选择合适的滤波器,可以达到较好的去噪和平滑效果。
对添加了高斯噪声的图像进行消噪处理,不同的消噪方法效果不一。应针对不同噪声选择不同的滤波器。

3.3 百分比滤波

使用 Matlab/Python +OpenCV中的相关函数,对原图和加噪的图像分别进行中值滤波、最大值滤波和最小值滤波。
① 请填写使用到的函数以及参数说明:

在这里插入图片描述

② 源代码及实验结果(添加必要注释)

%实验4—3 对图像进行中值滤波、最大值滤波和最小值滤波。
% 读取原图像
image = imread('lena.png');
original_image = rgb2gray(image);
% 生成加噪图像(这里假设添加了椒盐噪声)
noisy_image = imnoise(original_image, 'salt & pepper', 0.1);
 
% 中值滤波
median_filtered_original = medfilt2(original_image, [3 3]);
median_filtered_noisy = medfilt2(noisy_image, [3 3]);
 
% 最大值滤波
max_filtered_original = ordfilt2(original_image, 9, ones(3, 3));
max_filtered_noisy = ordfilt2(noisy_image, 9, ones(3, 3));
 
% 最小值滤波
min_filtered_original = ordfilt2(original_image, 1, ones(3, 3));
min_filtered_noisy = ordfilt2(noisy_image, 1, ones(3, 3));
 
% 显示原始图像和滤波后的图像
figure;
subplot(3, 2, 1), imshow(original_image), title('原始图像');
subplot(3, 2, 2), imshow(median_filtered_original), title('中值滤波(原始图像)');
subplot(3, 2, 3), imshow(original_image), title('原始图像');
subplot(3, 2, 4), imshow(min_filtered_original), title('最小值滤波(原始图像)');
subplot(3, 2, 5), imshow(original_image), title('原始图像');
subplot(3, 2, 6), imshow(max_filtered_original), title('最大值滤波(原始图像)');
 
figure;
subplot(3, 2, 1), imshow(noisy_image), title('加噪图像');
subplot(3, 2, 2), imshow(max_filtered_noisy), title('最大值滤波(加噪图像)');
subplot(3, 2, 3), imshow(noisy_image), title('加噪图像');
subplot(3, 2, 4), imshow(median_filtered_noisy), title('中值滤波(加噪图像)');
subplot(3, 2, 5), imshow(noisy_image), title('加噪图像');
subplot(3, 2, 6), imshow(min_filtered_noisy), title('最小值滤波(加噪图像)');

在这里插入图片描述
③ 实验结果对比与分析
观察实验结果,分析原因,思考中值滤波、最大值滤波和最小值滤波可能的应用场景。
1.中值滤波(Median Filter):
中值滤波主要用于去除图像中的椒盐噪声(Salt-and-Pepper Noise)。当图像受到高斯模糊或摄像机移动等因素的影响时,可能会出现椒盐噪声。中值滤波通过取像素周围邻域内的中值来消除噪声,保留图像的边缘信息。因此,适用于去除高斯噪声或降低图像噪声的场景。

2.最大值滤波(Maximum Filter):
最大值滤波主要用于增强图像的对比度。当图像的亮度分布不均匀时,可以通过最大值滤波来突出图像中的最大亮度值,使得图像的整体亮度更加均匀。因此,适用于调整光照不均或需要增强图像对比度的场景。

3.最小值滤波(Minimum Filter):
最小值滤波与最大值滤波相反,它主要用于减弱图像的对比度。当图像的亮度分布不均匀时,可以通过最小值滤波来突出图像中的最小亮度值,使得图像的整体亮度更加均匀。因此,适用于调整光照不均或需要减弱图像对比度的场景。

3.4 边缘提取和图像锐化

使用 Matlab / Python +OpenCV中的边缘提取函数,分别提取图像的Sobel、Robert、Laplacian、Prewitt、Canny边缘。
① 请填写使用到的函数以及参数说明:
在这里插入图片描述

② 边缘提取
源代码及实验结果(源代码添加必要注释,结果展示使用不同边缘提取算子的效果)

% 实验4—4 图像的边缘提取
% 读取图像
image = imread('lena.png');
 
% 将图像转换为灰度图像(如果原始图像是彩色图像)
gray_image = rgb2gray(image);
 
% 使用Sobel算子进行边缘提取
sobel_edge = edge(gray_image, 'Sobel');
 
% 使用Robert算子进行边缘提取(当前版本不支持该算子)
%robert_edge = edge(gray_image, 'Robert');
 
% 使用Laplacian算子进行边缘提取
laplacian_edge = edge(gray_image, 'log');
 
% 使用Prewitt算子进行边缘提取
prewitt_edge = edge(gray_image, 'Prewitt');
 
% 使用Canny算子进行边缘提取
canny_edge = edge(gray_image, 'Canny');
 
% 显示原始图像和边缘提取结果
subplot(2, 3, 1), imshow(image), title('Original Image');
subplot(2, 3, 2), imshow(sobel_edge), title('Sobel Edge');
%subplot(2, 3, 3), imshow(robert_edge), title('Robert Edge');
subplot(2, 3, 4), imshow(laplacian_edge), title('Laplacian Edge');
subplot(2, 3, 5), imshow(prewitt_edge), title('Prewitt Edge');
subplot(2, 3, 6), imshow(canny_edge), title('Canny Edge');

在这里插入图片描述
③ 图像锐化
源代码及实验结果(源代码添加必要注释,结果展示使用不同边缘提取算子的效果)使用边缘提取的结果,对图像进行锐化。

%实验4—5 图像的锐化
% 读取图像
image = imread('lena.png');
 
% 将图像转换为灰度图像(如果原始图像是彩色图像)
gray_image = rgb2gray(image);
 
% 定义锐化滤波器
sharp_filter = [0 -1 0; -1 5 -1; 0 -1 0];
 
% 应用锐化滤波器
sharpened_image = imfilter(gray_image, sharp_filter);
 
% 调整锐化结果的对比度
sharpened_image = imadjust(sharpened_image);
 
% 显示原始图像和锐化结果
subplot(1, 2, 1), imshow(gray_image), title('原始图像');
subplot(1, 2, 2), imshow(sharpened_image), title('锐化图像');

在这里插入图片描述
④ 实验结果对比与分析
对比实验结果结果,分析原因,并总结不同边缘提取算法的特点和适用情况。
Sobel算子:
特点:Sobel算子使用一阶导数来检测图像中的边缘,对噪声有一定的抵抗能力。它分别计算水平和垂直方向的梯度,并将它们合并成一个梯度值。
适用情况:Sobel算子适用于检测较明显的边缘,尤其是具有明显方向性的边缘,如图像中的边界和轮廓。
Prewitt算子:
特点:Prewitt算子与Sobel算子类似,也使用一阶导数来检测图像中的边缘。它分别计算水平和垂直方向的梯度,并将它们合并成一个梯度值。
适用情况:Prewitt算子适用于检测边缘,尤其是在具有明显方向性的边缘的情况下。
Laplacian算子:
特点:Laplacian算子使用二阶导数来检测图像中的边缘。它对边缘的精确位置和方向有更好的响应,并且可以检测到更细微的边缘变化。
适用情况:Laplacian算子适用于检测细微的边缘和纹理变化,但对噪声比较敏感。
Canny算子:
特点:Canny算子是一种多阶段的边缘检测算法,具有很好的性能。它首先使用高斯滤波器进行平滑处理,然后计算梯度,然后通过非极大值抑制和双阈值处理来提取边缘。
适用情况:Canny算子适用于需要高质量边缘检测的情况,对噪声有较好的抵抗能力,并且可以调整阈值以控制检测到的边缘数量。

3.5 自定义函数实现图像滤波

⑴不调用Matlab / OpenCV中的函数,编程实现图像的均值滤波,高斯滤波和中值滤波。
⑵与3.2、3.3的实验结果进行对比,观察实验结果是否相同,分析原因并改进、优化所编写程序。
⑶将所编写程序段封装为自定义函数。
① 均值滤波
源代码及实验结果 (添加必要注释)

def mean_filter(image, kernel_size):
    """
    均值滤波函数
    :param image: 输入图像
    :param kernel_size: 滤波器大小
    :return: 滤波后的图像
    """
    width, height = image.shape
    filtered_image = np.zeros_like(image)

    padding = kernel_size // 2
    padded_image = np.pad(image, ((padding, padding), (padding, padding)), mode='constant')

    for i in range(padding, width + padding):
        for j in range(padding, height + padding):
            neighborhood = padded_image[i - padding:i + padding + 1, j - padding:j + padding + 1]
            filtered_image[i - padding, j - padding] = np.mean(neighborhood)

    return filtered_image

② 高斯滤波

def gaussian_filter(image, kernel_size, sigma):
    """
    高斯滤波函数
    :param image: 输入图像
    :param kernel_size: 滤波器大小
    :param sigma: 高斯核的标准差
    :return: 滤波后的图像
    """
    width, height = image.shape
    filtered_image = np.zeros_like(image)

    padding = kernel_size // 2
    padded_image = np.pad(image, ((padding, padding), (padding, padding)), mode='constant')

    kernel = gaussian_kernel(kernel_size, sigma)

    for i in range(padding, width + padding):
        for j in range(padding, height + padding):
            neighborhood = padded_image[i - padding:i + padding + 1, j - padding:j + padding + 1]
            filtered_image[i - padding, j - padding] = np.sum(neighborhood * kernel)

    return filtered_image

③ 中值滤波:

def median_filter(image, kernel_size):
    """
    中值滤波函数
    :param image: 输入图像
    :param kernel_size: 滤波器大小
    :return: 滤波后的图像
    """
    width, height = image.shape
    filtered_image = np.zeros_like(image)

    padding = kernel_size // 2
    padded_image = np.pad(image, ((padding, padding), (padding, padding)), mode='constant')

    for i in range(padding, width + padding):
        for j in range(padding, height + padding):
            neighborhood = padded_image[i - padding:i + padding + 1, j - padding:j + padding + 1]
            filtered_image[i - padding, j - padding] = np.median(neighborhood)

    return filtered_image

4. 实验小结

①在PhotoShop中找一找,有哪些功能是通过图像空间滤波实现的。
答:模糊/平滑滤波:通过应用均值滤波、高斯滤波或其他模糊滤波器来减少图像的细节和噪点,从而使图像更加平滑。
锐化滤波:通过应用锐化滤波器(如拉普拉斯滤波器)来增强图像的边缘和细节,使图像更加清晰和锐利。
边缘检测:通过应用边缘检测滤波器(如Sobel、Prewitt或Canny)来检测图像中的边缘和轮廓,以突出图像中的边界信息。
噪点去除:通过应用中值滤波器或其他噪点去除滤波器来减少图像中的椒盐噪点、高斯噪点或其他类型的噪点。
高动态范围(HDR)合成:通过应用图像空间滤波器和曝光调整来合成具有高动态范围的图像,以获得更广泛的亮度范围和更丰富的细节。
美颜和皮肤磨皮:通过应用柔化和模糊滤波器来减少皮肤上的细纹和瑕疵,实现美颜和皮肤磨皮效果。
②分析和总结3.2、3.3、3.4的实验结果,能够得到哪些启发或结论?
答:针对不同的图像和预期效果,可以选择不同的处理方案
③为了方便复用3.5的自定义函数,应该怎样设计和封装更加合理?你还能想到哪些进一步改进和优化的方法?
答:考虑多种不同的图像的滤波方案,同时设计良好的滤波思路,提高程序的鲁棒性。
④根据实验内容和结果,并查找相关资料,想一想,图像卷积在数字图像处理、机器学习、深度学习中有哪些应用?
答:图像滤波:图像卷积可以用于应用各种滤波器来实现图像平滑、边缘增强、噪点去除等操作。常见的滤波器包括均值滤波、高斯滤波、中值滤波等。
特征提取:在机器学习和计算机视觉任务中,图像卷积被广泛用于提取图像的特征。通过应用不同的卷积核,可以捕捉到图像中的边缘、纹理、形状等特征,为后续的分类、目标检测、分割等任务提供输入。
目标检测:在目标检测任务中,卷积神经网络(CNN)是一种常用的深度学习模型,它利用图像卷积层来提取图像特征,并通过后续的分类和回归层来识别图像中的目标物体。
图像分割:卷积神经网络也被广泛用于图像分割任务,通过对图像进行卷积操作,将图像划分为不同的区域或像素,并将每个区域或像素分配给特定的类别。
图像超分辨率:图像卷积在图像超分辨率重建中有应用。通过将低分辨率图像进行卷积和上采样操作,可以生成高分辨率的图像。
图像风格转换:卷积神经网络可以通过卷积操作来学习不同风格图像之间的特征表示,从而实现图像风格的转换。
图像增强:卷积神经网络可以通过卷积操作来学习图像增强的映射函数,从而改善图像的质量、对比度或颜色等方面。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis基础教程(二):redis数据类型

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 💝&#x1f49…

揭秘品牌推广的制胜之道:步骤、流程、方法与技巧全攻略!

品牌推广是现代营销战略中的核心环节,对于提升品牌知名度、塑造品牌形象以及扩大市场份额具有举足轻重的作用。 作为一名手工酸奶品牌的创始人,目前全国复制了100多家门店,我来为大家分享品牌推广的制胜之道,包括具体步骤、流程、…

2024《汽车出海全产业数据安全合规发展白皮书》下载

随着中国制造向中国智造目标的迈进,中国汽车正以前所未有的速度和质量,在全球市场上开疆拓土。不过,在中国汽车加快出海步伐的过程中,数据安全合规风险管理成为车企不容忽视的课题。 6月25日,在中国(上海&…

Electron运行报错

安装: npm install --save-dev electron 1:报错: electron Unable to find Electron app at 2: ReferenceError: require is not defined in ES module scope, you can use importinstead 在ES模块作用域中没有定义ReferenceErr…

MathType绝对值符号在哪里 MathType绝对值怎么输入 MathType7产品密钥激活码获取

绝对值是数学中的一个重要概念,用于描述一个数在数轴上所对应的点到原点的距离。在MathType软件中可以输入绝对值符号,那具体该怎么做呢?下面由我带大家一起来了解MathType绝对值符号在哪里,MathType绝对值怎么输入的相关内容。 一…

Android - 利用 jitpack 免费发布闭源 aar

一、简述 目前(Android/java) library 的主要发布仓库有 MavenCentral 和 jitpack,我之前也对这两种仓库的发布流程做了详细介绍: 发布至 MavenCentral: https://juejin.cn/post/6953598441817636900发布至 jitpack: https://juejin.cn/post/7040733114506674183#heading-…

高考报志愿选专业,什么叫“报的好”?

考得好不如报得好,我认为这句话有一定的道理,当然前提还是考得好,分不够说啥都白扯了...但是有很多分数好,却载在报考上的例子也不少...有些直接退学,来年重考,杯具了.... 什么叫报得好? 1、适…

mysql8.0其他数据库日志

概述 我们在讲解数据库事务时,讲过两种日志:重做日志、回滚日志。 对于线上数据库应用系统,突然遭遇数据库宕机怎么办?在这种情况下,定位宕机的原因就非常关键。可以查看数据库的错误日志。因为日志中记录了数据库运行中的诊断信息&#xff…

LeetCode-213. 打家劫舍 II【数组 动态规划】

LeetCode-213. 打家劫舍 II【数组 动态规划】 题目描述:解题思路一:分三种情况,一:不考虑头尾;二:考虑头不考虑尾;三:考虑尾不考虑头。解题思路二:优化空间解题思路三&am…

Python逻辑控制语句 之 循环语句--for循环

1.for 的介绍 for 循环 也称为是 for 遍历, 也可以做指定次数的循环遍历: 是从容器中将数据逐个取出的过程.容器: 字符串/列表/元组/字典 2.for 的语法 (1)for 循环遍历字符串 for 变量 in 字符串: 重复执⾏的代码 字符串中存在多少个字符, 代码就执行…

idea乱码问题解决

乱码问题产生的根本原因 数据的编码和解码使用的不是同一个字符集 使用了不支持某个语言文字的字符集 Tomcat控制台乱码 在tomcat10.1.7这个版本中,修改 tomcat/conf/logging.properties中,所有的UTF-8为GBK即可 sout乱码问题,设置JVM加载.class文件时使用UTF-8字符集 设置虚…

Go线程调度器

基本结构 字段gcwaiting、stopwait和stopnoted都是串行运行时任务执行前后的辅助协调手段 gcwaiting字段的值用于表示是否需要停止调度 在停止调度前,该值会被设置为1在恢复调度之前,该值会被设置为0这样做的作用是,一些调度任务在执行时只…

小程序消息定时任务(定时触发器)发送总结

文章目录 小程序消息定时任务(定时触发器)发送总结1.开发思路2.实现办法3.查看定时触发器是否正常运作4.总结 小程序消息定时任务(定时触发器)发送总结 1.开发思路 在使用小程序的时候总是会遇到消息任务发送的情况,…

Cyber Weekly #13

赛博新闻 1、谷歌发布最强开源小模型Gemma-2 本周五(6月28日)凌晨,谷歌发布最强开源小模型Gemma-2,分别为9B(90亿)和27B(270亿)参数规模,其中9B 模型在多项基准测试中均…

娱乐圈发生震动,AI大模型技术已经取代了SNH48的小偶像?

自2023年以来,全球都被包裹在AI的惊天大潮之中,所有行业都在主动或被动地迎接改变。目前,各行业已经有大量公司正在把AI作为自身发展的最佳路径。其中,娱乐行业作为最被人们熟知的行业也在面对AI的发展时,发生着巨大变…

什么样的企业适合SD-WAN网络专线?

SD-WAN(Software-Defined Wide Area Network,软件定义广域网)是一种网络技术,它利用软件定义的方式管理和控制广域网(WAN),旨在提高网络效率、降低成本并简化网络管理。以下是适合采用SD-WAN网络…

【python 】python 年度人口结构数据分析与可视化(源码+数据集)【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…

docker仓库--centos7.9部署harbor详细过程与使用以及常见问题

文章目录 前言1.docker-compose是什么2.harbor是什么 centos7部署harbor详细过程与使用环境一、部署docker二、部署harbor1.下载docker-compose工具2.harbor安装3.拷贝样本文件,并修改文件4.安装harbor,安装完成自行启动5.查看 三、harbor的使用1.创建项…

洛谷Quasi Binary思维题之构造基础---C++

欢迎大家来到思维题系列! 本类题目老少皆宜,适合茶饭后来做! 让自己觉得自己是!废物 🆗进入正题! Quasi Binary 啧。。。。。。我们做这种构造题啊,一定要找细节!否则寸步难行&#…

面经-数据库

1.MySQL 1.1什么是MySQL? MySQL 是⼀种关系型数据库,在 Java 企业级开发中⾮常常⽤,因为 MySQL 是开源免费的,并 且⽅便扩展。阿⾥巴巴数据库系统也⼤量⽤到了 MySQL ,因此它的稳定性是有保障的。 MySQL 是开放源代码的&…