数字图像处理:实验七

news2025/3/3 18:40:40

       uu们!这是我们目前数字图像系列的最后一张,之后有关人工智能结合的数字图像处理咸鱼哥正在学习和创作中,所以还请大家给咸鱼哥点时间,同时也提前预祝大家2025年新春快乐!(咸鱼哥真诚的祝愿每一个人),所以大家先开始今日的阅读和学习吧,后天就是春节了,加油哦!

一、基础知识

        本节任务主要是有关的滤波器特性和相关底层的学习和编写

掌握内容:

           1、频域图像增强的基本概念

               图像(空域)可以表示为:f(x,y)

               图像(频域)可以表示为:F(u,v)

        2、低通滤波器的基本类型和增强效果

               低通滤波器:让图像的低频成分通过,截止高频成分

            

        3、高通滤波器的基本类型和增强效果

                 高通滤波器:让图像的高频成分通过,截止低频成分

            

                                (图例)

二、实验要求

        1、对自选图分别进行低通滤波和高通滤波:

选用低通滤波器:理想低通滤波器、巴特沃斯低通滤波器、高斯低通滤波器;

选用高通滤波器:理想高通滤波器、巴特沃斯高通滤波器、高斯高通滤波器。

        2、其中,针对所有的理想滤波器和高斯滤波器选择的 截止频率为D0 =10、30、50;针对所有的巴特沃斯滤 波器,当截止频率一定即D0 =20时,阶数n选择n=1、 2、3,以及当阶数一定即n=2时,截止频率D0 选择D0 =25、 50、75。

        3、每幅输出图包含三类子图(每幅子图都要标注对应的名称):原图、滤波器透视图(所有不同参数对应的透视图)、滤波结果图(所有方式滤波后的结果)。例如:理想低通滤波器输出图有7幅子图 原图(1幅)、滤波器透视图(3幅:不同截止频率)、滤波结果图(3幅:不同截止频率) 此外,巴特沃斯滤波器分成两类输出图:

               A)截止频率一定,改变阶数;                   B)阶数一定,改变截止频率。

三、应用编程

       基于以上滤波器的构成,将上述滤波器进行组合,设计出新的滤波器对一幅有缺陷的图(具有噪声、模糊、 对比度低等特性)进行图像增强。

四、编程代码与结果

A=imread('1.1.png');%读入图像你们并赋值给a
A_1=double(rgb2gray(A));%把图像转换为灰度图并换为双精度赋值给A
 
[ra,ca]=size(A_1);%读出图像大小并赋值给ra,ca
figure;
subplot(4,2,1),imshow(A,[]),title('原图');
 
P=2*ra;Q=2*ca;%设置填充后图像大小
A_2=zeros(P,Q);%用零矩阵预设填充后的图像
A_2(1:ra,1:ca)=A_1;%完成填充
[Ra,Ca]=size(A_2);%计算填充后图像大小
[y,x]=meshgrid(0:Ca-1,0:Ra-1);%生成空域二维坐标
F_B=fft2(A_2.*(-1).^(x+y));%乘以-1的x+y次方计算傅里叶变换
 
%------理想滤波低通------
D_0=12;%设置滤波器截止频率
H_1=zeros(P,Q);%预设滤波器
for n=1:P
    for m=1:Q
       if(n-P/2-1)^2+(m-Q/2-1)^2<=D_0^2%判断距离是否小于截止频率
        H_1(n,m)=1;%小于截止频率赋值1
       else
        H_1(n,m)=0;%赋值赋值0
       end
    end
end
 
subplot(4,2,3),mesh(H_1),title('滤波器透视图,理想低通D0=10');
G = F_B.*H_1;%用滤波器滤波
fa=ifft2(G);%做逆傅里叶变换
fa=real(fa).*(-1).^(x+y);%取实部后乘以(-1)的x+y次方
fA=fa(1:ra,1:ca);%除去补零部分
subplot(4,2,4),imshow(fA,[]),title('滤波结果图,理想低通D0=10');
 
 
D_1=30;%设置滤波器截止频率
H_2=zeros(P,Q);%预设滤波器
for n=1:P
    for m=1:Q
       if(n-P/2-1)^2+(m-Q/2-1)^2<=D_1^2%判断距离是否小于截止频率
        H_2(n,m)=1;%小于截止频率赋值1
       else
        H_2(n,m)=0;%赋值赋值0
       end
    end
end
 
subplot(4,2,5),mesh(H_2),title('滤波器透视图,理想低通D0=30');
G_1=F_B.*H_2;%用滤波器滤波
fa_1=ifft2(G_1);%做逆傅里叶变换
fa_1=real(fa_1).*(-1).^(x+y);%取实部后乘以(-1)的x+y次方
fA_1=fa_1(1:ra,1:ca);%除去补零部分
subplot(4,2,6),imshow(fA_1,[]),title('滤波结果图,理想低通D0=30');
 
D_2=50;%设置滤波器截止频率
H_3=zeros(P,Q);%预设滤波器
for n=1:P
    for m=1:Q
       if(n-P/2-1)^2+(m-Q/2-1)^2<=D_2^2%判断距离是否小于截止频率
        H_3(n,m)=1;%小于截止频率赋值1
       else
        H_3(n,m)=0;%赋值赋值0
       end
    end
end
subplot(4,2,7),mesh(H_3),title('滤波器透视图,理想低通D0=50');
G_2=F_B.*H_3;%用滤波器滤波
fa_2=ifft2(G_2);%做逆傅里叶变换
fa_2=real(fa_2).*(-1).^(x+y);%取实部后乘以(-1)的x+y次方
fA_2=fa_2(1:ra,1:ca);%除去补零部分
subplot(4,2,8),imshow(fA_2,[]),title('滤波结果图,理想低通D0=50');
 

结果:

%----理想高通滤波器-----
figure
subplot(4,2,1),imshow(A),title('原图');
H_4 = 1-H_1;%用1减去低通滤波器得到高通滤波器
subplot(4,2,3),mesh(H_4),title('滤波器透视图,理想高通D0=10');
G_3=F_B.*H_4;%用滤波器滤波
fa_3=ifft2(G_3);%做逆傅里叶变换
fa_3=real(fa_3).*(-1).^(x+y);%取实部后乘以(-1)的x+y次方
fA_3=fa_3(1:ra,1:ca);%除去补零部分
subplot(4,2,4),imshow(fA_3,[]),title('滤波结果图,理想高通D0=10');
 
H_5=1-H_2;%用1减去低通滤波器得到高通滤波器
subplot(4,2,5),mesh(H_4),title('滤波器透视图,理想高通D0=30');
G_4=F_B.*H_5;%用滤波器滤波
fa_4=ifft2(G_4);%做逆傅里叶变换
fa_4=real(fa_4).*(-1).^(x+y);%取实部后乘以(-1)的x+y次方
fA_4=fa_4(1:ra,1:ca);%除去补零部分
subplot(4,2,6),imshow(fA_4,[]),title('滤波结果图,理想高通D0=30');
 
H_6=1-H_3;%用1减去低通滤波器得到高通滤波器
subplot(4,2,7),mesh(H_6),title('滤波器透视图,理想高通D0=50');
G_5=F_B.*H_6;%用滤波器滤波
fa_5=ifft2(G_5);%做逆傅里叶变换
fa_5=real(fa_5).*(-1).^(x+y);%取实部后乘以(-1)的x+y次方
fA_5=fa_5(1:ra,1:ca);%除去补零部分
subplot(4,2,8),imshow(fA_5,[]),title('滤波结果图,理想高通D0=50');

结果:

%-----高斯低通滤波器-------
figure
subplot(4,2,1),imshow(A),title('原图');
U = 0:P-1;
V = 0:Q-1;%赋值傅里叶频谱频率值
[V,U] = meshgrid(0:Q-1,0:P-1);%生成频域二维坐标
D_mid = sqrt((U-P/2).^2+(V-Q/2).^2);%赋值频域点到中心距离
H_uv = exp(-D_mid.^2/2/D_0/D_0);%生成滤波器
subplot(4,2,3),mesh(H_uv),title('滤波器透视图,高斯低D0=10)');
G_pxy=F_B.*H_uv;%用滤波器滤波
g_pxy=ifft2(G_pxy);%做逆傅里叶变换
g_pxy=real(g_pxy).*(-1).^(x+y);%取实部后乘以(-1)的x+y次方
g_xy=g_pxy(1:ra,1:ca);%除去补零部分
subplot(4,2,4),imshow(g_xy,[]),title('滤波结果图,高斯低D0=10)');
 
H_uv_1=exp(-D_mid.^2/2/D_1/D_1);%生成滤波器
subplot(4,2,5),mesh(H_uv_1),title('滤波器透视图,高斯低D0=30)');
G_pxy_1=F_B.*H_uv_1;%用滤波器滤波
g_pxy_1=ifft2(G_pxy_1);%做逆傅里叶变换
g_pxy_1=real(g_pxy_1).*(-1).^(x+y);%取实部后乘以(-1)的x+y次方
g_xy_1=g_pxy_1(1:ra,1:ca);%除去补零部分
subplot(4,2,6),imshow(g_xy_1,[]),title('滤波结果图,高斯低D0=30)');
H_uv_2=exp(-D_mid.^2/2/D_2/D_2);%生成滤波器
subplot(4,2,7),mesh(H_uv_2),title('滤波器透视图,高斯低D0=50)');
G_pxy_2=F_B.*H_uv_2;%用滤波器滤波
g_pxy_2=ifft2(G_pxy_2);%做逆傅里叶变换
g_pxy_2=real(g_pxy_2).*(-1).^(x+y);%取实部后乘以(-1)的x+y次方
g_xy_2=g_pxy_2(1:ra,1:ca);%除去补零部分
subplot(4,2,8),imshow(g_xy_2,[]),title('滤波结果图,高斯低D0=50)');

%-------高斯高通滤波器-----
figure
subplot(4,2,1),imshow(A),title('原图');
H_uv_3=1-H_uv;%用1减去低通滤波器得到高通滤波器
subplot(4,2,3),mesh(H_uv_3),title('滤波器透视图,高斯高0=10)');
G_pxy_3=F_B.*H_uv_3;%用滤波器滤波
g_pxy_3=ifft2(G_pxy_3);%做逆傅里叶变换
g_pxy_3=real(g_pxy_3).*(-1).^(x+y);%取实部后乘以(-1)的x+y次方
g_xy_3=g_pxy_3(1:ra,1:ca);%除去补零部分
subplot(4,2,4),imshow(g_xy_3,[]),title('滤波结果图,高斯高D0=10)');
H_uv_4=1-H_uv_1;%用1减去低通滤波器得到高通滤波器
subplot(4,2,5),mesh(H_uv_4),title('滤波器透视图,高斯高D0=30)');
G_pxy_4=F_B.*H_uv_4;%用滤波器滤波
g_pxy_4=ifft2(Gpxy4);%做逆傅里叶变换
g_pxy_4=real(g_pxy_4).*(-1).^(x+y);%取实部后乘以(-1)的x+y次方
g_xy_4=g_pxy_4(1:ra,1:ca);%除去补零部分
subplot(4,2,6),imshow(g_xy_4,[]),title('滤波结果图,高斯高D0=30)');
H_uv_5=1-H_uv_2;%用1减去低通滤波器得到高通滤波器
subplot(4,2,7),mesh(H_uv_5),title('滤波器透视图,高斯高D0=50)');
G_pxy_5=F_B.*H_uv_5;%用滤波器滤波
g_pxy_5=ifft2(G_pxy_5);%做逆傅里叶变换
g_pxy_5=real(g_pxy_5).*(-1).^(x+y);%取实部后乘以(-1)的x+y次方
g_xy_5=g_pxy_5(1:ra,1:ca);%除去补零部分
subplot(4,2,8),imshow(g_xy_5,[]),title('滤波结果图,高斯高D0=50)');
 
 
%-----巴特沃斯低通滤波器-----
U=0:P-1;V=0:Q-1;%赋值傅里叶频谱频率值
[V,U]=meshgrid(0:Q-1,0:P-1);%生成频域二维坐标
D_mid=sqrt((U-P/2).^2+(V-Q/2).^2);%赋值频域点到中心距离

figure;
subplot(4,2,1),imshow(A),title('原图');
 
D_3=20;%赋值截止频率
n=1;%赋值巴特沃斯滤波器阶数
H_UV=1./(1+(D_mid/D_3).^(2*n));%生成滤波器
subplot(4,2,3),mesh(H_UV),title('滤波器透视图,巴低通D0=20,n=1)');
G_PXY=F_B.*H_UV;%用滤波器滤波
f_PXY=ifft2(G_PXY);%做逆傅里叶变换
f_PXY=real(f_PXY).*(-1).^(x+y);%取实部后乘以(-1)的x+y次方
f_XY=f_PXY(1:ra,1:ca);%除去补零部分
subplot(4,2,4),imshow(f_XY,[]),title('滤波结果图,巴低通D0=20,n=1)');
 
n1=2;%赋值巴特沃斯滤波器阶数
 
H_UV_1=1./(1+(D_mid/D_3).^(2*n1));%生成滤波器
subplot(4,2,5),mesh(H_UV_1),title('滤波器透视图,巴低通D0=20,n=2)');
G_PXY_1=F_B.*H_UV_1;%用滤波器滤波
f_PXY_1=ifft2(G_PXY_1);%做逆傅里叶变换
f_PXY_1=real(f_PXY_1).*(-1).^(x+y);%取实部后乘以(-1)的x+y次方
f_XY1=f_PXY_1(1:ra,1:ca);%除去补零部分
subplot(4,2,6),imshow(f_XY1,[]),title('滤波结果图,巴低通D0=20,n=2)');
 
n2=3;%赋值巴特沃斯滤波器阶数
 
H_UV_2=1./(1+(D_mid/D_3).^(2*n2));%生成滤波器
subplot(4,2,7),mesh(H_UV_2),title('滤波器透视图,巴低通D0=20,n=3)');
G_PXY_2=F_B.*H_UV_2;%用滤波器滤波
f_PXY_2=ifft2(G_PXY_2);%做逆傅里叶变换
f_PXY_2=real(f_PXY_2).*(-1).^(x+y);%取实部后乘以(-1)的x+y次方
f_XY2=f_PXY_2(1:ra,1:ca);%除去补零部分
subplot(4,2,8),imshow(f_XY2,[]),title('滤波结果图,巴低通D0=20,n=3)');

figure
subplot(4,2,1),imshow(A),title('原图');
D_4=25;%赋值截止频率
D_5=50;%赋值截止频率
D_6=75;%赋值截止频率
 
n=2;%赋值巴特沃斯滤波器阶数
 
H_UV_3=1./(1+(D_mid/D_4).^(2*n));%生成滤波器
subplot(4,2,3),mesh(H_UV_3),title('滤波器透视图,巴低通D0=25,n=2)');
G_PXY_3=F_B.*H_UV_3;%用滤波器滤波
f_PXY_3=ifft2(G_PXY_3);%做逆傅里叶变换
f_PXY_3=real(f_PXY_3).*(-1).^(x+y);%取实部后乘以(-1)的x+y次方
f_XY3=f_PXY_3(1:ra,1:ca);%除去补零部分
subplot(4,2,4),imshow(f_XY3,[]),title('滤波结果图,巴低通D0=25,n=2)');
 
n=2;%赋值巴特沃斯滤波器阶数
 
H_UV_4=1./(1+(D_mid/D_5).^(2*n));%生成滤波器
subplot(4,2,5),mesh(H_UV_4),title('滤波器透视图,巴低通D0=50,n=2)');
G_PXY_4=F_B.*H_UV_4;%用滤波器滤波
f_PXY_4=ifft2(G_PXY_4);%做逆傅里叶变换
f_PXY_4=real(f_PXY_4).*(-1).^(x+y);%取实部后乘以(-1)的x+y次方
f_XY4=f_PXY_4(1:ra,1:ca);%除去补零部分
subplot(4,2,6),imshow(f_XY4,[]),title('滤波结果图,巴低通D0=50,n=2)');
 
n=2;%赋值巴特沃斯滤波器阶数
 
H_UV_5=1./(1+(D_mid/D_6).^(2*n));%生成滤波器
subplot(4,2,7),mesh(H_UV_5),title('滤波器透视图,巴低通D0=75,n=2)');
G_PXY_5=F_B.*H_UV_5;%用滤波器滤波
f_PXY_5=ifft2(G_PXY_5);%做逆傅里叶变换
f_PXY_5=real(f_PXY_5).*(-1).^(x+y);%取实部后乘以(-1)的x+y次方
f_XY5=f_PXY_5(1:ra,1:ca);%除去补零部分
subplot(4,2,8),imshow(f_XY5,[]),title('滤波结果图,巴低通D0=75,n=2)');

%----巴特沃斯高通滤波器----
figure
subplot(4,2,1),imshow(A),title('原图');
n=1;%赋值巴特沃斯滤波器阶数
H_UV=1./(1+(D_3./D_mid).^(2*n));%生成滤波器
subplot(4,2,3),mesh(H_UV),title('滤波器透视图,巴高通D0=20,n=1)');
G_PXY=F_B.*H_UV;%用滤波器滤波
f_PXY=ifft2(G_PXY);%做逆傅里叶变换
f_PXY=real(f_PXY).*(-1).^(x+y);%取实部后乘以(-1)的x+y次方
f_XY=f_PXY(1:ra,1:ca);%除去补零部分
subplot(4,2,4),imshow(f_XY,[]),title('滤波结果图,巴高通D0=20,n=1)');
n1=2;%赋值巴特沃斯滤波器阶数
H_UV_1=1./(1+(D_3./D_mid).^(2*n1));%生成滤波器
subplot(4,2,5),mesh(H_UV_1),title('滤波器透视图,巴高通D0=20,n=2)');
G_PXY_1=F_B.*H_UV_1;%用滤波器滤波
f_PXY_1=ifft2(G_PXY_1);%做逆傅里叶变换
f_PXY_1=real(f_PXY_1).*(-1).^(x+y);%取实部后乘以(-1)的x+y次方
f_XY1=f_PXY_1(1:ra,1:ca);%除去补零部分
subplot(4,2,6),imshow(f_XY1,[]),title('滤波结果图,巴高通D0=20,n=2)');
n2=3;%赋值巴特沃斯滤波器阶数
H_UV_2=1./(1+(D_3./D_mid).^(2*n2));%生成滤波器
subplot(4,2,7),mesh(H_UV_2),title('滤波器透视图,巴高通D0=20,n=3)');
G_PXY_2=F_B.*H_UV_2;%用滤波器滤波
f_PXY_2=ifft2(G_PXY_2);%做逆傅里叶变换
f_PXY_2=real(f_PXY_2).*(-1).^(x+y);%取实部后乘以(-1)的x+y次方
f_XY2=f_PXY_2(1:ra,1:ca);%除去补零部分
subplot(4,2,8),imshow(f_XY2,[]),title('滤波结果图,巴高通D0=20,n=3)');

figure
subplot(4,2,1),imshow(A),title('原图');
D_4=25;D_5=50;D_6=75;%赋值截止频率
n=2;%赋值巴特沃斯滤波器阶数
H_UV_3=1./(1+(D_4./D_mid).^(2*n));%生成滤波器
subplot(4,2,3),mesh(H_UV_3),title('滤波器透视图,巴高通D0=25,n=2)');
G_PXY_3=F_B.*H_UV_3;%用滤波器滤波
f_PXY_3=ifft2(G_PXY_3);%做逆傅里叶变换
f_PXY_3=real(f_PXY_3).*(-1).^(x+y);%取实部后乘以(-1)的x+y次方
f_XY3=f_PXY_3(1:ra,1:ca);%除去补零部分
subplot(4,2,4),imshow(f_XY3,[]),title('滤波结果图,巴高通D0=25,n=2)');
n=2;%赋值巴特沃斯滤波器阶数
H_UV_4=1./(1+(D_5./D_mid).^(2*n));%生成滤波器
subplot(4,2,5),mesh(H_UV_4),title('滤波器透视图,巴高通D0=50,n=2)');
G_PXY_4=F_B.*H_UV_4;%用滤波器滤波
f_PXY_4=ifft2(G_PXY_4);%做逆傅里叶变换
f_PXY_4=real(f_PXY_4).*(-1).^(x+y);%取实部后乘以(-1)的x+y次方
f_XY4=f_PXY_4(1:ra,1:ca);%除去补零部分
subplot(4,2,6),imshow(f_XY4,[]),title('滤波结果图,巴高通D0=50,n=2)');
n=2;%赋值巴特沃斯滤波器阶数
H_UV_5=1./(1+(D_6./D_mid).^(2*n));%生成滤波器
subplot(4,2,7),mesh(H_UV_5),title('滤波器透视图,巴高通D0=75,n=2)');
G_PXY_5=F_B.*H_UV_5;%用滤波器滤波
f_PXY_5=ifft2(G_PXY_5);%做逆傅里叶变换
f_PXY_5=real(f_PXY_5).*(-1).^(x+y);%取实部后乘以(-1)的x+y次方
f_XY5=f_PXY_5(1:ra,1:ca);%除去补零部分
subplot(4,2,8),imshow(f_XY5,[]),title('滤波结果图,巴高通D0=75,n=2)');
 

编程应用:

% 读取图像
originalImage = imread('1.1.png'); % 请确保替换为您的图像文件名
grayImage = rgb2gray(originalImage); % 如果图像是彩色的,则转换为灰度图像
 
% 显示原始图像
figure;
imshow(grayImage);
title('Original Image');
 
% 进行傅里叶变换
F = fft2(double(grayImage));
Fshifted = fftshift(F); % 将低频分量移动到中心
 
% 计算频率域中的距离矩阵
[M, N] = size(Fshifted);
[u, v] = meshgrid(-floor(N/2):floor(N/2)-1, -floor(M/2):floor(M/2)-1);
D = sqrt(u.^2 + v.^2);
 
% 设置巴特沃斯滤波器的参数
D0_lowpass = 30; % 低通滤波器的截止频率
D0_highpass = 50; % 假设的高通滤波器截止频率(注意:高通通常通过低通补集得到)
n = 2; % 滤波器阶数
 
% 生成巴特沃斯低通滤波器
H_lowpass = 1 ./ (1 + (D / D0_lowpass).^(2 * n));
 
% 生成对应的高通滤波器(通过低通滤波器的补集)
H_highpass = 1 - H_lowpass;
% 注意:这里的高通滤波器是简化的,可能不是最优的。在实际应用中,
% 可能需要设计更精确的高通滤波器,特别是当需要特定的频率响应时。
 
% 应用低通滤波器并逆变换回空间域
F_filtered_lowpass = H_lowpass .* Fshifted;
F_ishifted_lowpass = ifftshift(F_filtered_lowpass);
image_lowpass = real(ifft2(F_ishifted_lowpass));
image_lowpass = uint8(mat2gray(image_lowpass) * 255); % 转换回uint8并归一化
 
% 应用高通滤波器并逆变换回空间域
% 注意:高通滤波后的图像可能需要额外的处理来确保数值范围在0-255之间
F_filtered_highpass = H_highpass .* Fshifted;
F_ishifted_highpass = ifftshift(F_filtered_highpass);
image_highpass = real(ifft2(F_ishifted_highpass));
% 由于高通滤波可能产生负值,我们需要进行偏移和缩放
image_highpass = image_highpass - min(image_highpass(:)); % 将最小值设为0
image_highpass = uint8(mat2gray(image_highpass) * 255); % 缩放至0-255范围并转换类型
 
% 结合低通和高通滤波后的图像(这里使用简单的加权和作为示例)
% 注意:这种结合方式可能不是最佳的,因为低通和高通滤波后的图像在数值和视觉上可能有很大差异
alpha = 0.5; % 权重因子,可以根据需要进行调整
enhancedImage = uint8(alpha * double(image_lowpass) + (1 - alpha) * double(image_highpass));
 
% 显示结果
figure;
subplot(2, 2, 1);
imshow(grayImage);
title('Original Image');
 
subplot(2, 2, 2);
imshow(image_lowpass);
title('Lowpass Filtered Image');
 
subplot(2, 2, 3);
imshow(image_highpass);
title('Highpass Filtered Image');
 
subplot(2, 2, 4);
imshow(enhancedImage);
title('Enhanced Image (Weighted Sum)');
 

结果:

五、结语

          uu们!本次数字图像处理系列到这里将要暂停一段时间,因为咸鱼哥在后续数字图像上会有与人工智呢个结合的有关操作,所以呢,请uu们耐心等待一下,祝大家节日快乐!我们后续章节中再见!uu们!

                                                               ヽ( ̄ω ̄( ̄ω ̄〃)ゝ咸鱼哥敬上

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

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

相关文章

通义灵码插件保姆级教学-IDEA(安装及使用)

一、JetBrains IDEA 中安装指南 官方下载指南&#xff1a;通义灵码安装教程-阿里云 步骤 1&#xff1a;准备工作 操作系统&#xff1a;Windows 7 及以上、macOS、Linux&#xff1b; 下载并安装兼容的 JetBrains IDEs 2020.3 及以上版本&#xff0c;通义灵码与以下 IDE 兼容&…

利用双指针一次遍历实现”找到“并”删除“单链表倒数第K个节点(力扣题目为例)

Problem: 19. 删除链表的倒数第 N 个结点 文章目录 题目描述思路复杂度Code 题目描述 思路 1.欲找到倒数第k个节点&#xff0c;即是找到正数的第n-k1、其中n为单链表中节点的个数个节点。 2.为实现只遍历一次单链表&#xff0c;我们先可以使一个指针p1指向链表头部再让其先走k步…

2025美赛倒计时,数学建模五类模型40+常用算法及算法手册汇总

数学建模美赛倒计时&#xff0c;对于第一次参加竞赛且没有相关基础知识的同学来讲&#xff0c;掌握数学建模常用经典的模型算法知识&#xff0c;并熟练使用相关软件进行建模是关键。本文将介绍一些常用的模型算法&#xff0c;以及软件操作教程。 数学建模常用模型包括&#xf…

前端【10】jQuery DOM 操作

目录 jquery捕获查取 获得内容 - text()、html() 以及 val() 获取属性 - attr() ​编辑 jQuery 修改/设置内容和属性 设置内容 - text()、html() 以及 val() 设置属性 - attr() jQuery添加元素 jQuery - 删除元素 前端【9】初识jQuery&#xff1a;让JavaScript变得更简…

汇编的使用总结

一、汇编的组成 1、汇编指令&#xff08;指令集&#xff09; 数据处理指令: 数据搬移指令 数据移位指令 位运算指令 算术运算指令 比较指令 跳转指令 内存读写指令 状态寄存器传送指令 异常产生指令等 2、伪指令 不是汇编指令&#xff0c;但是可以起到指令的作用&#xff0c;伪…

想品客老师的第七天:闭包和作用域

闭包之前的内容写在这里 环境、作用域、回收 首先还是数据的回收问题&#xff0c;全局变量一般都是通过关闭页面回收的&#xff1b;而局部变量的值不用了&#xff0c;会被自动回收掉 像这种写在全局里的就不会被主动回收捏&#xff1a; let title 荷叶饭function fn() {ale…

速通Docker === Docker 镜像分层存储机制

目录 分层存储的概念 分层存储的实现 镜像层 容器层 分层存储的优势 1. 镜像轻量化 2. 快速构建与部署 3. 高效的镜像共享 4. 版本控制 分层存储的示例 容器层的临时性与数据持久化 总结 Docker 的分层存储机制是其核心特性之一&#xff0c;它使得镜像的构建、共享和…

开源智慧园区管理系统对比五款主流产品探索智能运营新模式

内容概要 在这个数字化迅速发展的时代&#xff0c;园区管理也迎来了全新的机遇和挑战。众所周知&#xff0c;开源智慧园区管理系统作为一种创新解决方案&#xff0c;正逐步打破传统管理的局限性。它的开放性不仅使得系统可以根据具体需求进行灵活调整&#xff0c;也为用户提供…

非根目录部署 nextjs 项目,资源文件 请求404 的问题

最近在学习next项目编写的代码放到服务器上静态资源404 先分析问题 到服务器上查看是有资源目录的是不是项目配置有问题是不是nginx配置有问题 经过排查1和2是没有问题的目前来看只有3 检查一下nginx配置 尝试着把静态资源的配置禁用 问题解决 我的next项目用的是pm2管理…

mysql 学习5 mysql图形化界面DataGrip下载 安装 使用

一、下载和安装 下载&#xff1a; 其他版本 - DataGrip PS&#xff1a;安装目录最好不要有中文。 C:\Program Files\JetBrains\DataGrip 2023.3.4 二、 夸克网盘分享 当前电脑是下载到 &#xff1a;D:\Ctool\mysql\datagrip2023_3_4\datagrip2024\jetbra-datagrip\scripts …

读写和解析简单的 nc 文件

NetCDF 文件格式在气象数据工程领域占据着举足轻重的地位&#xff0c;其结构灵活、强兼容性等优势使其成为该领域的一个标准。无论是从事学术研究还是工程实践&#xff0c;掌握这种数据格式变得越发重要。其次&#xff0c;我注意到目前社区中气象编程大多数课程都聚焦于某个特定…

LLM:BERT or BART 之BERT

文章目录 前言一、BERT1. Decoder-only2. Encoder-only3. Use of Bidirectional Context4. Masked Language Model (MLM)5. Next Sentence Prediction (NSP)6. Fine-tune1、情感分析2、句对分析3、命名实体识别&#xff08;NER&#xff09; 7. BERT总结 总结 前言 NLP选手对这…

【力扣:新动计划,编程入门 —— 题解 ③】

—— 25.1.26 231. 2 的幂 给你一个整数 n&#xff0c;请你判断该整数是否是 2 的幂次方。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 如果存在一个整数 x 使得 n 2x &#xff0c;则认为 n 是 2 的幂次方。 示例 1&#xff1a; 输入&#xff1a;…

Centos7系统php8编译安装ImageMagick/Imagick扩展教程整理

Centos7系统php8编译安装ImageMagick/Imagick扩展教程整理 安装php8安装ImageMagick1、下载ImageMagick2、解压并安装3、查看是否安装成功 安装imagick扩展包 安装php8 点我安装php8 安装ImageMagick 1、下载ImageMagick wget https://www.imagemagick.org/download/ImageMa…

android的gradle

Gradle User Manual gradle官网 这里有个gradlew很有用&#xff0c;因为这个可以在窗口中运行gradlew脚本 gradlew 和 gradlew.bat 都是 Gradle Wrapper&#xff08;Gradle 包装器&#xff09; 的一部分&#xff0c;它们的作用是让项目可以使用 Gradle 而无需提前在系统中…

2025美赛MCM数学建模A题:《石头台阶的“记忆”:如何用数学揭开历史的足迹》(全网最全思路+模型)

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ 《石头台阶的“记忆”&#xff1a;如何用数学揭开历史的足迹》 目录 《石头台阶的“记忆”&#xff1a;如何用数学揭开历史的足迹》 ✨摘要✨ ✨引言✨ 1. 引言的结构 2. 撰写步骤 &#xff08;1&#xff09;研究背景 &#…

【S32K3 RTD LLD篇7】K344中心对齐PWM中心点触发ADC BCTU采样

【S32K3 RTD LLD篇7】K344中心对齐PWM中心点触发ADC BCTU采样 一&#xff0c;文档简介二&#xff0c;中心对齐PWM中心点触发ADC原理2.1 如何生成中心对齐的PWM2.2 如何生成PWM中心点触发标志 三&#xff0c; 软件配置与实现3.1 Demo CT 模块配置3.1.1 引脚配置3.1.2 时钟配置3.…

14-6-3C++STL的list

&#xff08;一&#xff09;list的插入 1.list.insert(pos,elem);//在pos位置插入一个elem元素的拷贝&#xff0c;返回新数据的位置 #include <iostream> #include <list> using namespace std; int main() { list<int> lst; lst.push_back(10); l…

unity学习20:time相关基础 Time.time 和 Time.deltaTime

目录 1 unity里的几种基本时间 1.1 time 相关测试脚本 1.2 游戏开始到现在所用的时间 Time.time 1.3 时间缩放值 Time.timeScale 1.4 固定时间间隔 Time.fixedDeltaTime 1.5 两次响应时间之间的间隔&#xff1a;Time.deltaTime 1.6 对应测试代码 1.7 需要关注的2个基本…

HarmonyOS:创建应用静态快捷方式

一、前言 静态快捷方式是一种在系统中创建的可以快速访问应用程序或特定功能的链接。它通常可以在长按应用图标&#xff0c;以图标和相应的文字出现在应用图标的上方&#xff0c;用户可以迅速启动对应应用程序的组件。使用快捷方式&#xff0c;可以提高效率&#xff0c;节省了查…