实验4 图像空间滤波
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.shapefiltered_image = np.zeros_like(image)padding = kernel_size // 2padded_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.shapefiltered_image = np.zeros_like(image)padding = kernel_size // 2padded_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.shapefiltered_image = np.zeros_like(image)padding = kernel_size // 2padded_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)是一种常用的深度学习模型,它利用图像卷积层来提取图像特征,并通过后续的分类和回归层来识别图像中的目标物体。
图像分割:卷积神经网络也被广泛用于图像分割任务,通过对图像进行卷积操作,将图像划分为不同的区域或像素,并将每个区域或像素分配给特定的类别。
图像超分辨率:图像卷积在图像超分辨率重建中有应用。通过将低分辨率图像进行卷积和上采样操作,可以生成高分辨率的图像。
图像风格转换:卷积神经网络可以通过卷积操作来学习不同风格图像之间的特征表示,从而实现图像风格的转换。
图像增强:卷积神经网络可以通过卷积操作来学习图像增强的映射函数,从而改善图像的质量、对比度或颜色等方面。
相关文章:

实验4 图像空间滤波
1. 实验目的 ①掌握图像空间滤波的主要原理与方法; ②掌握图像边缘提取的主要原理和方法; ③了解空间滤波在图像处理和机器学习中的应用。 2. 实验内容 ①调用 Matlab / Python OpenCV中的函数,实现均值滤波、高斯滤波、中值滤波等。 ②调…...

独辟蹊径:我是如何用Java自创一套工作流引擎的(下)
作者:后端小肥肠 创作不易,未经允许严禁转载。 姊妹篇:独辟蹊径:我是如何用Java自创一套工作流引擎的(上)_java工作流引擎-CSDN博客 1. 前言 在上一篇博客中,我们详细介绍了如何利用Java语言从…...
【Python】pycharm常用快捷键操作
目录 一.pycharm自定义修改快捷键 二.pycharm默认常用快捷键 一.pycharm自定义修改快捷键 在file-setting-keymap中可以修改快捷键,建议刚开始没特殊需求就不用修改,先熟悉系统默认的常用快捷键,但是以下情况可以考虑修改: 之前使用其他I…...
es6语法复习一
es6语法 1.var 变量提升 2.let 不存在变量提升,只能定义一次 3.const 先定义再使用,定义好来不能修改 4.解构赋值 [a,b,c][1,2,3],{a,b,c}{a:1,b:2,c:3} 5.模版字符串 let aaa; ${a} is ok 6.对象简化写法 const school{ name, change, improve(){ cons…...
【python入门】自定义函数
文章目录 定义自定义函数的基本语法参数类型示例代码函数作用域匿名函数(Lambda)闭包装饰器 Python中的自定义函数允许你编写一段可重用的代码块,这段代码可以带参数(输入),并可能返回一个值(输…...

ONLYOFFICE 桌面编辑器 8.1 版发布:全面提升文档处理效率的新体验
文章目录 什么是ONLYOFFICE ?ONLYOFFICE 桌面编辑器 8.1 发布:新功能和改进功能强大的 PDF 编辑器幻灯片版式功能从右至左语言支持多媒体功能增强无缝切换工作模式其他改进和优化总结 什么是ONLYOFFICE ? https://www.onlyoffice.com/zh/off…...

ESP32实现UDP连接——micropython版本
代码: import network import socket import timedef wifiInit(name, port):ap network.WLAN(network.AP_IF) # 创建一个热点ap.config(essidname, authmodenetwork.AUTH_OPEN) # 无需密码ap.active(True) # 激活热点ip ap.ifconfig()[0] # 获取ip地址print(…...

Windows Ternimal
Windows Ternimal 安装 Windows 终端概述 | Microsoft Learn wt --help在当前目录打开 lextm/windowsterminal-shell: Install/uninstall scripts for Windows Terminal context menu items 打开指定目录 wt -d %USERPROFILE% ohmyposh 美化 1 安装 2 添加 ohmyposh bin…...

Unity扩展编辑器功能的特性
1.添加分组标题 用于在Unity的Inspector视图中为属性或变量组创建一个自定义的标题或头部,有助于在Inspector中组织和分类不同的属性,使其更易于阅读和管理。 [Header("Common Properties")] public float MouseSensitivity 5; public float…...
API类别 - UI核心
API类别 - UI核心 引言 在当今的数字时代,用户界面(UI)是任何软件或应用成功的关键因素之一。UI核心API作为构建用户界面的基础,提供了丰富的功能和工具,使得开发者能够创建出既美观又实用的用户界面。本文将深入探讨UI核心API的不同类别,以及它们如何影响现代软件开发…...

Redis-主从复制-配置主从关系
文章目录 1、修改配置文件中的 bind ,注释该配置,取消绑定仅主机登录2、修改protected-mode 为no,取消保护模式3、查看redis的进程状态4、配置6380是6379的从机5、配置6381是6379的从机6、查看主机 6379 的主从信息 1、修改配置文件中的 bind ,注释该配置,取消绑定仅主机登录 …...

DigiRL:让 AI 自己学会控制手机
类似于苹果此前发布的Ferret-UI 的安卓开源平替。主要用于在 Android 设备上识别 UI 和执行指令,不同的是它利用了离线到在线强化学习(Offline-to-Online RL),能够快速适应应用更新或 UI 变化。...

04.Ambari自定义服务开发-自定义服务配置文件在Ambari中的设置方法
文章目录 设置方法配置文件设置Custom xxx配置文件详细的配置方法.xml文件的整体格式基础参数格式value-attributes配置介绍设置属性在服务安装后不可修改设置允许字段为空是否显示配置名称参数类型设置字符串类型PasswordBooleanIntFloatDirectoryDirectoriesContent-多行文本…...

LSTM时间序列基础学习
时间序列 时间序列可以是一维,二维,三维甚至更高维度的数据,在深度学习的世界中常见的是三维时间序列,这三个维度分别是(batch_size,time_step,input_dimensions)。 其中time_step是时间步,它…...

『Z-Workshop』 6月22日线下ALCOVE分享活动
2024 求是创新 ZJUBCA Sponsored by the ALCOVE Community TIME:2024/06/22 ADD:浙江大学紫金港校区 --- Alcove 是 Aptos 公链与 Alibaba Cloud 共同打造的亚洲首个 Move 开发者社区,致力于支持开发者使用 Move 语言构建下一代 Web3 应用&am…...

【机器学习】机器学习重要方法——迁移学习:理论、方法与实践
文章目录 迁移学习:理论、方法与实践引言第一章 迁移学习的基本概念1.1 什么是迁移学习1.2 迁移学习的类型1.3 迁移学习的优势 第二章 迁移学习的核心方法2.1 特征重用(Feature Reuse)2.2 微调(Fine-Tuning)2.3 领域适…...

uniapp, [TypeError] “Failed to fetch dynamically imported module“ 报错解决思路
文章目录 1. 背景2. 报错3. 解决思路4. 思考参考1. 背景 最近基于uniapp开发一款设备参数调试的APP软件,在使用第三方插件的过程中,出现下面的报错。 2. 报错 [plugin:vite:import-analysis] Cannot find module ‘D:/leaning/uniapp/demo/jk-uts-udp示例/uni_modules/uts-…...

四川省高等职业学校大数据技术专业建设暨专业质量监测研讨活动顺利开展
6月21日,省教育评估院在四川邮电职业技术学院组织开展全省高等职业学校大数据技术专业建设暨专业质量监测研讨活动。省教育评估院副院长赖长春,四川邮电职业技术学院党委副书记、校长冯远洪,四川邮电职业技术学院党委委员、副校长程德杰等出席…...
深入解析三大跨平台开发框架:Flutter、React Native 和 uniapp
深入解析三大跨平台开发框架:Flutter、React Native 和 uniapp 在移动开发中,跨平台开发框架已经成为开发者的首选工具。本篇将深入解析三大主流跨平台开发框架:Flutter、React Native 和 uniapp。下面将详细探讨它们的原理、优势和劣势。 …...

【吊打面试官系列-MyBatis面试题】#{}和${}的区别是什么?
大家好,我是锋哥。今天分享关于 【#{}和${}的区别是什么?】面试题,希望对大家有帮助; #{}和${}的区别是什么? #{} 是预编译处理,${}是字符串替换。 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网…...

网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...

【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...

android13 app的触摸问题定位分析流程
一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...