数字图像处理:实验五

         uu们!大家好,欢迎来到数字图像处理第五章节内容的学习,在本章中有关空间滤波的理论学习是十分重要的,所以建议大家要去用心的学习本章,在之后的传感器的相关图像采集时,不可避免的会有噪声等的影响,所以,滤波等操作是解决其中的方法,接下来,我们将开始学习。

一、实验

实验目的:通过实验掌握空间滤波的基本概念和方法

实验内容:

1、掌握平滑线性滤波的概念和方法

      1)均值滤波

           

      2)加权均值滤波

              

二、掌握统计排序滤波的概念和方法

1、中值滤波: 模板的作用只是完成“取出邻域中的像素”,然后从小到大排序, 取中间的第(mn+1)/2个像素的灰度值为输出灰度值。

                                        

2、最大值滤波和最小值滤波: 模板的作用只是完成“取出邻域中的像素”,然后从小到大排序, 取其中的第mn个像素的灰度值(最大值),或第1个像素的灰度 值(最小值)为输出灰度值。

如图例所示:

三、具体要求

1、基本编程

        1)用均值滤波和加权均值滤波2种方法对选图(自己选与图1有 相似分布的图,不能用图1)进行滤波,选用的模板大小自选3个;

       2)用均值滤波、加权均值滤波、中值滤波、最大值滤波和最小值滤 波5种方法对选图(自己选与图2类似有噪声污染的图,不能用图 2)进行滤波,选用的模板大小自选3个;

       3)得到的5种滤波方法,每种滤波方法对应3个不同大小的模板, 因此每种方法滤波获得3张滤波图以及1张原图,共4张子图显示 在一个窗口里,每个子图的抬头标注相应名称,如“均值滤波(3*3)”。

        4)“编程及结果”中的编程内容必须包含2种编写方式 :     a)底层编写    b)函数调用

2、 实际应用

       请对一幅自选的模糊图像(Blurredimage)进行滤波处理,达到除 去模糊,增强细节和对比度的目的。

四、代码

函数调用版:

% 读取图像
A=imread('1.png') % 读取名为'1.png'的图像到变量A中
B=imread('1.png') % 再次读取相同的图像到变量B中,这里可能是为了后续不同的处理% 定义不同大小的均值滤波器
p1 = fspecial('average', [3 3]); % 创建一个3x3的均值滤波器
p2 = fspecial('average', [5 5]); % 创建一个5x5的均值滤波器
p3 = fspecial('average', [7 7]); % 创建一个7x7的均值滤波器% 应用不同大小的均值滤波器
L1 = imfilter(A, p1); % 将3x3均值滤波器应用于图像A
L2 = imfilter(A, p2); % 将5x5均值滤波器应用于图像A
L3 = imfilter(A, p3); % 将7x7均值滤波器应用于图像A% 显示原始图像和滤波后的图像

                  

figure; % 创建一个新的图形窗口
subplot(2, 3, 2); % 创建一个2行3列的子图布局,并定位到第2个子图位置
imshow(A); % 显示图像A
title('原图像'); % 设置子图的标题为“原图像”
subplot(2, 3, 4);imshow(L1); % 显示3x3均值滤波后的图像L1
title('3x3 均值滤波'); % 设置子图的标题为“3x3 均值滤波”
subplot(2, 3, 5);imshow(L2); % 显示5x5均值滤波后的图像L2
title('5x5 均值滤波'); % 设置子图的标题为“5x5 均值滤波”
subplot(2, 3, 6);imshow(L3); % 显示7x7均值滤波后的图像L3
title('7x7 均值滤波'); % 设置子图的标题为“7x7 均值滤波”% 定义加权均值滤波器的模板
h_1 = [0.1 0.2 0.1; 0.2 0.4 0.2;0.1 0.2 0.1]; % 3x3加权均值滤波器模板
h_2 = [1/25 1/25 1/35 1/25 1/25; % 5x5加权均值滤波器模板1/25 1/15 1/10 1/15 1/25;1/35 1/10 1/5  1/10 1/35;1/25 1/15 1/10 1/15 1/25;1/25 1/25 1/35 1/25 1/25];
h_3 = [1/49 1/49 1/60 1/70 1/60 1/49 1/49; % 7x7加权均值滤波器模板1/49 1/40 1/35 1/30 1/35 1/40 1/49;1/60 1/35 1/25 1/15 1/25 1/35 1/60;1/70 1/25 1/15 1/5  1/15 1/25 1/70;1/60 1/35 1/25 1/15 1/25 1/35 1/60;1/49 1/40 1/35 1/30 1/35 1/40 1/49;1/49 1/49 1/60 1/70 1/60 1/49 1/49];% 使用'same'选项保持输出图像大小与输入相同
A_1 = imfilter(A, h_1, 'same'); % 应用3x3加权均值滤波器并保持图像大小不变
A_2 = imfilter(A, h_2, 'same'); % 应用5x5加权均值滤波器并保持图像大小不变
A_3 = imfilter(A, h_3, 'same'); % 应用7x7加权均值滤波器并保持图像大小不变% 显示原始图像和滤波后的图像

                    

figure; % 创建一个新的图形窗口
subplot(2, 3, 2);imshow(A); % 显示原始图像A
title('原图像'); % 设置子图的标题为“原图像”
subplot(2, 3, 4);imshow(A_1); % 显示3x3加权均值滤波后的图像A_1
title('3*3 加权均值滤波'); % 设置子图的标题为“3*3 加权均值滤波”
subplot(2, 3, 5);imshow(A_2); % 显示5x5加权均值滤波后的图像A_2
title('5*5 加权均值滤波'); % 设置子图的标题为“5*5 加权均值滤波”
subplot(2, 3, 6);imshow(A_3); % 显示7x7加权均值滤波后的图像A_3
title('7*7 加权均值滤波'); % 设置子图的标题为“7*7 加权均值滤波”% 应用不同大小的均值滤波器到图像B
B_1 = imfilter(B, p1); % 将3x3均值滤波器应用于图像B
B_2 = imfilter(B, p2); % 将5x5均值滤波器应用于图像B
B_3 = imfilter(B, p3); % 将7x7均值滤波器应用于图像B% 显示原始图像和滤波后的图像

                 

figure; % 创建一个新的图形窗口
subplot(2, 3, 2); % 创建一个2行3列的子图布局,并定位到第2个子图位置
imshow(B); % 显示图像B
title('原图像'); % 设置子图的标题为“原图像”
subplot(2, 3, 4);imshow(B_1); % 显示3x3均值滤波后的图像B_1
title('3x3 均值滤波'); % 设置子图的标题为“3x3 均值滤波”
subplot(2, 3, 5);imshow(B_2); % 显示5x5均值滤波后的图像B_2
title('5x5 均值滤波'); % 设置子图的标题为“5x5 均值滤波”
subplot(2, 3, 6);imshow(B_3); % 显示7x7均值滤波后的图像B_3
title('7x7 均值滤波'); % 设置子图的标题为“7x7 均值滤波”% 使用'same'选项保持输出图像大小与输入相同
B1 = imfilter(B, h_1, 'same'); % 应用3x3加权均值滤波器并保持图像大小不变
B2 = imfilter(B, h_2, 'same'); % 应用5x5加权均值滤波器并保持图像大小不变
B3 = imfilter(B, h_3, 'same'); % 应用7x7加权均值滤波器并保持图像大小不变% 显示原始图像和滤波后的图像

                

figure; % 创建一个新的图形窗口
subplot(2, 3, 2);imshow(B); % 显示原始图像B
title('原图像'); % 设置子图的标题为“原图像”
subplot(2, 3, 4);imshow(B1); % 显示3x3加权均值滤波后的图像B1
title('3*3 加权均值滤波'); % 设置子图的标题为“3*3 加权均值滤波”
subplot(2, 3, 5);imshow(B2); % 显示5x5加权均值滤波后的图像B2
title('5*5 加权均值滤波'); % 设置子图的标题为“5*5 加权均值滤波”
subplot(2, 3, 6);imshow(B3); % 显示7x7加权均值滤波后的图像B3
title('7*7 加权均值滤波'); % 设置子图的标题为“7*7 加权均值滤波"% 调用自定义的均值滤波函数对图像B进行滤波
S_1 = avg_filter(B,3); % 对图像B应用3x3均值滤波
S_2 = avg_filter(B,7); % 对图像B应用7x7均值滤波
S_3 = avg_filter(B,11); % 对图像B应用11x11均值滤波
S_4 = javg_filter(B,3); % 对图像B应用3x3加权均值滤波
S_5 = kavg_filter(B,5); % 对图像B应用5x5加权均值滤波
S_6 = lavg_filter(B,7); % 对图像B应用7x7加权均值滤波
S_7 = mid_filter(B,3); % 对图像B应用3x3中值滤波
S_8 = mid_filter(B,5); % 对图像B应用5x5中值滤波
S_9 = mid_filter(B,7); % 对图像B应用7x7中值滤波% 获取图像B的尺寸
[M,N] = size(B);% 最大值滤波
for i = 2:M-1for j=2:N-1t = B(i-1:i+1,j-1:j+1); % 提取以(i,j)为中心的3x3邻域F1(i,j)  =max(t(:)); % 将邻域内的最大值赋给F1的对应位置end
end
for i = 3:M-2for j=3:N-2t = B(i-2:i+2,j-2:j+2);% 提取以(i,j)为中心的5x5邻域F2(i,j)  =max(t(:));% 将邻域内的最大值赋给F2的对应位置end
end
for i = 4:M-3for j=4:N-3t = B(i-3:i+3,j-3:j+3); % 提取以(i,j)为中心的7x7邻域F3(i,j)  =max(t(:));% 将邻域内的最大值赋给F3的对应位置end
end
%最小值滤波
for i = 2:M-1for j=2:N-1t = B(i-1:i+1,j-1:j+1);% 提取以(i,j)为中心的3x3邻域F4(i,j)  =min(t(:));% 将邻域内的最小值赋给F4的对应位置end
end
for i = 3:M-2for j=3:N-2t = B(i-2:i+2,j-2:j+2);% 提取以(i,j)为中心的5x5邻域F5(i,j)  =min(t(:));% 将邻域内的最小值赋给F5的对应位置end
end
for i = 4:M-3for j=4:N-3t = B(i-3:i+3,j-3:j+3);% 提取以(i,j)为中心的7x7邻域F6(i,j)  =min(t(:));% 将邻域内的最小值赋给F6的对应位置end
end
Figure

subplot(2,3,2),imshow(B)
title('原图')
subplot(2,3,4),imshow(S_1)
title('均值滤波3*3')
subplot(2,3,5),imshow(S_2)
title('均值滤波7*7')
subplot(2,3,6),imshow(S_3)
title('均值滤波11*11')
Figure

subplot(2,3,2),imshow(B)
title('原图')
subplot(2,3,4),imshow(S_4)
title('加权均值滤波3*3')
subplot(2,3,5),imshow(S_5)
title('加权均值滤波5*5')
subplot(2,3,6),imshow(S_6)
title('加权均值滤波7*7')
Figure

subplot(2,3,2),imshow(B)
title('原图')
subplot(2,3,4),imshow(S_7)
title('中值滤波3*3')
subplot(2,3,5),imshow(S_8)
title('中值滤波5*5')
subplot(2,3,6),imshow(S_9)
title('中值滤波7*7')
Figure

subplot(2,3,2),imshow(B)
title('原图')
subplot(2,3,4),imshow(F1)
title('最大值滤波3*3')
subplot(2,3,5),imshow(F2)
title('最大值滤波5*5')
subplot(2,3,6),imshow(F3)
title('最大值滤波7*7')
Figure

subplot(2,3,2),imshow(B)
title('原图')
subplot(2,3,4),imshow(F4)
title('最小值滤波3*3')
subplot(2,3,5),imshow(F5)
title('最小值滤波5*5')
subplot(2,3,6),imshow(F6)
title('最小值滤波7*7')

底层编写版:

function W = avg_filter(x,n)     
a(1:n,1:n)=1;   % 创建一个n×n的模板,所有元素都是1  
[hight, width]=size(x);   % 获取输入图像的高和宽,变量名应为height和width,这里可能是笔误  
x1=double(x);  
x2=x1;  
for i=1:hight-n+1  for j=1:width-n+1  c=x1(i:i+(n-1),j:j+(n-1)).*a; % 提取x1中从(i,j)开始的n×n区域,并与模板相乘  s=sum(sum(c));                 % 计算c矩阵中所有元素的和  x2(i+(n-1)/2,j+(n-1)/2)=s/(n*n); % 将计算得到的均值赋给模板中心位置的元素  end  
end  
% 未被赋值的元素(边缘部分)取原值  
W=uint8(x2); % 将滤波后的图像转换回原始的数据类型并返回
end
function d=javg_filter(x,n)     
a=[1,2,1;2,4,2;1,2,1];   %a即n×n模板,元素全是1  
[hight, width]=size(x);   %输入图像是hightxwidth的,且hight>n,width>n  
x1=double(x);  
x2=x1;  
for i=1:hight-n+1  for j=1:width-n+1  c=x1(i:i+(n-1),j:j+(n-1)).*a; %取出x1中从(i,j)开始的n行n列元素与模板相乘  s=sum(sum(c));                 %求c矩阵中各元素之和  x2(i+(n-1)/2,j+(n-1)/2)=s/(n*n); %将与模板运算后的各元素的均值赋给模板中心位置的元素  end  
end  
%未被赋值的元素取原值  d=uint8(x2);
end
function d=kavg_filter(x,n)     
a=[1,2,4,2,1;2,4,8,4,2;4,8,16,8,4;2,4,8,4,2;1,2,4,2,1];   %a即n×n模板,元素全是1  
[hight, width]=size(x);   %输入图像是hightxwidth的,且hight>n,width>n  
x1=double(x);  
x2=x1;  
for i=1:hight-n+1  for j=1:width-n+1  c=x1(i:i+(n-1),j:j+(n-1)).*a; %取出x1中从(i,j)开始的n行n列元素与模板相乘  s=sum(sum(c));                 %求c矩阵中各元素之和  x2(i+(n-1)/2,j+(n-1)/2)=s/(n*n); %将与模板运算后的各元素的均值赋给模板中心位置的元素  end  
end  
%未被赋值的元素取原值  d=uint8(x2);
end
function d=lavg_filter(x,n)     
a=[1,2,4,8,4,2,1; 2,4,8,16,8,4,2; 4,8,16,32,16,8,4; 8,16,32,64,32,16,8; 4,8,16,32,16,8,4; 2,4,8,16,8,4,2; 1,2,4,8,4,2,1];   %a即n×n模板,元素全是1  
[hight, width]=size(x);   %输入图像是hightxwidth的,且hight>n,width>n  
x1=double(x);  
x2=x1;  
for i=1:hight-n+1  for j=1:width-n+1  c=x1(i:i+(n-1),j:j+(n-1)).*a; %取出x1中从(i,j)开始的n行n列元素与模板相乘  s=sum(sum(c));                 %求c矩阵中各元素之和  x2(i+(n-1)/2,j+(n-1)/2)=s/(n*n); %将与模板运算后的各元素的均值赋给模板中心位置的元素  end  
end  
%未被赋值的元素取原值  d=uint8(x2);
end
function d=mid_filter(x,n)     
[height, width]=size(x);   %输入图像是p×q的,且p>n,q>n  
x1=double(x);  
x2=x1;  
for i=1:height-n+1  for j=1:height-n+1  c=x1(i:i+(n-1),j:j+(n-1)); %取出x1中从(i,j)开始的n行n列元素,即模板(n×n的)  e=c(1,:);      %是c矩阵的第一行  for u=2:n  e=[e,c(u,:)];     %将c矩阵变为一个行矩阵      end  mm=median(e);      %mm是中值  x2(i+(n-1)/2,j+(n-1)/2)=mm;   %将模板各元素的中值赋给模板中心位置的元素  end  
end   
%未被赋值的元素取原值  
d=uint8(x2);
end调用历程:
% 读取图像
A = imread('1.png');  % 读取名为'1.png'的图像% 应用均值滤波器
S_avg_3 = avg_filter(A, 3);  % 3x3 均值滤波
S_avg_5 = avg_filter(A, 5);  % 5x5 均值滤波
S_avg_7 = avg_filter(A, 7);  % 7x7 均值滤波% 应用加权均值滤波器
S_wavg_3 = javg_filter(A, 3);  % 3x3 加权均值滤波
S_wavg_5 = kavg_filter(A, 5);  % 5x5 加权均值滤波
S_wavg_7 = lavg_filter(A, 7);  % 7x7 加权均值滤波% 应用中值滤波器
S_mid_3 = mid_filter(A, 3);  % 3x3 中值滤波
S_mid_5 = mid_filter(A, 5);  % 5x5 中值滤波
S_mid_7 = mid_filter(A, 7);  % 7x7 中值滤波% 显示原始图像和滤波后的图像
figure;  % 创建一个新的图形窗口
subplot(3, 3, 1); imshow(A); title('原图');% 显示均值滤波结果
subplot(3, 3, 2); imshow(S_avg_3); title('均值滤波 3x3');
subplot(3, 3, 3); imshow(S_avg_5); title('均值滤波 5x5');
subplot(3, 3, 4); imshow(S_avg_7); title('均值滤波 7x7');% 显示加权均值滤波结果
subplot(3, 3, 5); imshow(S_wavg_3); title('加权均值滤波 3x3');
subplot(3, 3, 6); imshow(S_wavg_5); title('加权均值滤波 5x5');
subplot(3, 3, 7); imshow(S_wavg_7); title('加权均值滤波 7x7');% 显示中值滤波结果
subplot(3, 3, 8); imshow(S_mid_3); title('中值滤波 3x3');
subplot(3, 3, 9); imshow(S_mid_5); title('中值滤波 5x5');
function W = avg_filter(x, n)% 创建一个n×n的模板,所有元素都是1a = ones(n) * ones(n, 1); % 正确的创建n×n模板的方式[h, w] = size(x); % 获取输入图像的高和宽x1 = double(x); % 将图像转换为双精度浮点数x2 = x1; % 创建一个与原图像同样大小的副本for i = 1:(h - n + 1)for j = 1:(w - n + 1)% 提取x1中从(i,j)开始的n×n区域,并与模板相乘c = x1(i:i+n-1, j:j+n-1) .* a; s = sum(c(:)); % 计算c矩阵中所有元素的和% 将计算得到的均值赋给模板中心位置的元素x2(i+(n-1)/2, j+(n-1)/2) = s / (n * n); endendW = uint8(x2); % 将滤波后的图像转换回原始的数据类型
end
% 加权均值滤波函数(3x3)
function d = javg_filter(x, n)a = [1, 2, 1; 2, 4, 2; 1, 2, 1]; % 创建一个3x3的加权模板[h, w] = size(x); % 获取输入图像的高和宽d = double(x); % 将图像转换为双精度浮点数for i = 1:h-n+1for j = 1:w-n+1c = d(i:i+n-1, j:j+n-1) .* a; % 提取d中从(i,j)开始的n×n区域,并与模板相乘s = sum(sum(c)); % 计算c矩阵中所有元素的和d(i+(n-1)/2, j+(n-1)/2) = s / (n*n); % 将计算得到的加权均值赋给模板中心位置的元素endendd = uint8(d); % 将滤波后的图像转换回原始的数据类型
end% 加权均值滤波函数(5x5)
function d = kavg_filter(x, n)a = [1, 2, 4, 2, 1; 2, 4, 8, 4, 2; 4, 8, 16, 8, 4; 2, 4, 8, 4, 2; 1, 2, 4, 2, 1]; % 创建一个5x5的加权模板[h, w] = size(x); % 获取输入图像的高和宽d = double(x); % 将图像转换为双精度浮点数for i = 1:h-n+1for j = 1:w-n+1c = d(i:i+n-1, j:j+n-1) .* a; % 提取d中从(i,j)开始的n×n区域,并与模板相乘s = sum(sum(c)); % 计算c矩阵中所有元素的和d(i+(n-1)/2, j+(n-1)/2) = s / (n*n); % 将计算得到的加权均值赋给模板中心位置的元素endendd = uint8(d); % 将滤波后的图像转换回原始的数据类型
end% 加权均值滤波函数(7x7)
function d = lavg_filter(x, n)a = [1, 2, 4, 8, 4, 2, 1; 2, 4, 8, 16, 8, 4, 2; 4, 8, 16, 32, 16, 8, 4; 8, 16, 32, 64, 32, 16, 8; 4, 8, 16, 32, 16, 8, 4; 2, 4, 8, 16, 8, 4, 2; 1, 2, 4, 8, 4, 2, 1]; % 创建一个7x7的加权模板[h, w] = size(x); % 获取输入图像的高和宽d = double(x); % 将图像转换为双精度浮点数for i = 1:h-n+1for j = 1:w-n+1c = d(i:i+n-1, j:j+n-1) .* a; % 提取d中从(i,j)开始的n×n区域,并与模板相乘s = sum(sum(c)); % 计算c矩阵中所有元素的和d(i+(n-1)/2, j+(n-1)/2) = s / (n*n); % 将计算得到的加权均值赋给模板中心位置的元素endendd = uint8(d); % 将滤波后的图像转换回原始的数据类型
end% 中值滤波函数
function d = mid_filter(x, n)[h, w] = size(x); % 获取输入图像的高和宽d = double(x); % 将图像转换为双精度浮点数for i = 1:h-n+1for j = 1:w-n+1c = d(i:i+n-1, j:j+n-1); % 提取d中从(i,j)开始的n×n区域e = reshape(c, [], 1); % 将c矩阵变为一个列向量mm = median(e); % 计算列向量的中值d(i+(n-1)/2, j+(n-1)/2) = mm; % 将中值赋给模板中心位置的元素endendd = uint8(d); % 将滤波后的图像转换回原始的数据类型
end

结果如下图所示:
                        

五、结语和总结

       uu们!我们的实验内容到这里就基本上结束对于第五章内容的学习了,但是正如文章开头所述,理论学习更加重要,所以有关于滤波知识的学习我们一定要巩固和理解,数字图像处理实际上是我们对于美的追求的一种体现,所以,让我们每天学习和进步,加油,uu们!

      (后续我会开展所有系列的理论课程的讲述,因为没有那么多时间看书,所以咸鱼哥会让知识点和细节都更加便于理解和学习的方法,所以请耐心一下,咸鱼哥觉得学习知识是一个共享的过程,而分享是种快乐,所以加油哦!)

                                                                                          ヽ( ̄ω ̄( ̄ω ̄〃)ゝ咸鱼哥寄语

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CCF开源发展委员会开源供应链安全工作组2025年第1期技术研讨会顺利举行

点击蓝字 关注我们 CCF Opensource Development Committee 2025年1月17日,CCF开源发展委员会供应链安全工作组(CCF-ODC-OSS)2025年第一期技术研讨会——“大模型时代的开源供应链安全风控技术”于北京黄大年茶思屋顺利举行。本次研讨会邀请了…

如何进行市场调研?海外问卷调查有哪些类型和示例?

什么是市场研究? 市场研究的目的,就是调查消费者的行为和当时的经济趋势,帮助企业制定和调整经营理念和经营路线,通过收集和分析数据,帮助企业了解其目标市场。 市场调查是通过对潜在客户的分析,来判断品…

DX12 快速教程(4) —— 画钻石原矿

快速导航 新建项目 "004-DrawTexture"纹理贴图纹理采样纹理过滤邻近点采样双线性过滤Mipmap 多级渐远纹理三线性过滤各向异性过滤 纹理环绕LOD 细节层次 开始画钻石原矿吧加载纹理到内存中:LoadTexture什么是 WIC如何用 WIC 读取一帧图片获取图片格式并转…

FPGA实现任意角度视频旋转(二)视频90度/270度无裁剪旋转

本文主要介绍如何基于FPGA实现视频的90度/270度无裁剪旋转,旋转效果示意图如下: 为了实时对比旋转效果,采用分屏显示进行处理,左边代表旋转前的视频在屏幕中的位置,右边代表旋转后的视频在屏幕中的位置。 分屏显示的…

Blazor-选择循环语句

今天我们来说说Blazor选择语句和循环语句。 下面我们以一个简单的例子来讲解相关的语法,我已经创建好了一个Student类,以此类来进行语法的运用 因为我们需要交互性所以我们将类创建在*.client目录下 if 我们做一个学生信息的显示,Gender为…

数据结构——实验八·学生管理系统

嗨~~欢迎来到Tubishu的博客🌸如果你也是一名在校大学生,正在寻找各种编程资源,那么你就来对地方啦🌟 Tubishu是一名计算机本科生,会不定期整理和分享学习中的优质资源,希望能为你的编程之路添砖加瓦⭐&…

在 Ubuntu22.04 上安装 Splunk

ELK感觉太麻烦了,换个日志收集工具 Splunk 是一种 IT 工具,可帮助在任何设备上收集日志、分析、可视化、审计和创建报告。简单来说,它将“机器生成的数据转换为人类可读的数据”。它支持从虚拟机、网络设备、防火墙、基于 Unix 和基于 Windo…

【C++高并发服务器WebServer】-2:exec函数簇、进程控制

本文目录 一、exec函数簇介绍二、exec函数簇 一、exec函数簇介绍 exec 函数族的作用是根据指定的文件名找到可执行文件,并用它来取代调用进程的内容,换句话说,就是在调用进程内部执行一个可执行文件。 exec函数族的函数执行成功后不会返回&…

[ACTF2020 新生赛]Upload1

题目 以为是前端验证&#xff0c;试了一下PHP传不上去 可以创建一个1.phtml文件。对.phtml文件的解释: 是一个嵌入了PHP脚本的html页面。将以下代码写入该文件中 <script languagephp>eval($_POST[md]);</script><script languagephp>system(cat /flag);&l…

第24篇 基于ARM A9处理器用汇编语言实现中断<六>

Q&#xff1a;怎样设计ARM处理器汇编语言程序使用定时器中断实现实时时钟&#xff1f; A&#xff1a;此前我们曾使用轮询定时器I/O的方式实现实时时钟&#xff0c;而在本实验中将采用定时器中断的方式。新增第三个中断源A9 Private Timer&#xff0c;对该定时器进行配置&#…

SpringMVC新版本踩坑[已解决]

问题&#xff1a; 在使用最新版本springMVC做项目部署时&#xff0c;浏览器反复500&#xff0c;如下图&#xff1a; 异常描述&#xff1a; 类型异常报告 消息Request processing failed: java.lang.IllegalArgumentException: Name for argument of type [int] not specifie…

系统思考—复杂问题的根源分析

在企业中&#xff0c;许多问题看似简单&#xff0c;背后却潜藏着复杂的因果关系。传统的思维方式往往只能看到表面&#xff0c;而无法深入挖掘问题的真正根源。我们常常通过“表面解决”来应对眼前的症状&#xff0c;但这往往只是治标不治本。 比如&#xff0c;销量下降时&…

安装VMware17

一、VMware Workstation 简介 VMware Workstation是一款由VMware公司开发的功能强大的桌面虚拟化软件。它允许用户在单一的物理电脑上同时运行多个操作系统作为虚拟机&#xff08;VMs&#xff09;&#xff0c;每个虚拟机都可配置有自己的独立硬件资源&#xff0c;如CPU核心、内…

三、双链表

链表的种类有很多&#xff0c;单链表是不带头不循环单向链表&#xff0c;但双链表是带头循环双向链表&#xff0c;并且双链表还有一个哨兵位&#xff0c;哨兵位不是头节点 typedef int LTDataType;typedef struct ListNode{struct ListNode* next; //指针保存下⼀个结点的地址s…

【知识】可视化理解git中的cherry-pick、merge、rebase

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 这三个确实非常像&#xff0c;以至于对于初学者来说比较难理解。 总结对比 先给出对比&#xff1a; 特性git mergegit rebasegit cherry-pick功能合并…

SpringBoot开发(三)SpringBoot介绍、项目创建、运行

1. SpringBoot 1.1. SpringBoot介绍 Spring Boot给世界程序员带来了春天&#xff0c;越来越多的企业选择使用spring boot来开发他们的软件&#xff0c;因此学习spring boot是科技发展的必然趋势。本门课程将从web最基础的知识点开始讲起&#xff0c;逐步带你攻破spring boot的…

438. 找到字符串中所有字母异位词

【题目】&#xff1a;438. 找到字符串中所有字母异位词 class Solution { public:vector<int> findAnagrams(string s, string p) {vector<int> res;vector<int> curVec(26, 0); // 统计p中字母出现的次数for(char c : p) {curVec[c - a];}for(int l 0, r …

Leetcode-两数之和

1.暴力枚举 class Solution { public:vector<int> twoSum(vector<int>& nums, int target) {int lennums.size();int i,j;for(i0;i<len;i){for(ji1;j<len;j){if(nums[i]nums[j]target){return{i,j};}}}return {i,j};} }; 新知识&#xff1a; return {…

边缘网关具备哪些功能?

边缘网关&#xff0c;又称边缘计算网关&#xff0c;部署在网络边缘&#xff0c;它位于物联网设备与云计算平台之间&#xff0c;充当着数据流动的“守门员”和“处理器”。通过其强大的数据处理能力和多样化的通信协议支持&#xff0c;边缘网关能够实时分析、过滤和存储来自终端…

高等数学学习笔记 ☞ 微分方程

1. 微分方程的基本概念 1. 微分方程的基本概念&#xff1a; &#xff08;1&#xff09;微分方程&#xff1a;含有未知函数及其导数或微分的方程。 举例说明微分方程&#xff1a;&#xff1b;。 &#xff08;2&#xff09;微分方程的阶&#xff1a;指微分方程中未知函数的导数…