[数字图像处理]频域滤波(2)--高通滤波器,带阻滤波器与陷波滤波器
1.高通滤波器
1.1理想高通滤波器
1.2巴特沃斯高通滤波器
1.3高斯高通滤波器
1.4 上述三种滤波器的实现Matlab代码
close all;
clear all;
%% ---------Ideal Highpass Filters (Fre. Domain)------------
f = imread('characters_test_pattern.tif');
f = mat2gray(f,[0 255]);
[M,N] = size(f);
P = 2*M;
Q = 2*N;
fc = zeros(M,N);
for x = 1:1:M
for y = 1:1:N
fc(x,y) = f(x,y) * (-1)^(x+y);
end
end
F = fft2(fc,P,Q);
H_1 = ones(P,Q);
H_2 = ones(P,Q);
for x = (-P/2):1:(P/2)-1
for y = (-Q/2):1:(Q/2)-1
D = (x^2 + y^2)^(0.5);
if(D <= 60) H_1(x+(P/2)+1,y+(Q/2)+1) = 0; end
if(D <= 160) H_2(x+(P/2)+1,y+(Q/2)+1) = 0; end
end
end
G_1 = H_1 .* F;
G_2 = H_2 .* F;
g_1 = real(ifft2(G_1));
g_1 = g_1(1:1:M,1:1:N);
g_2 = real(ifft2(G_2));
g_2 = g_2(1:1:M,1:1:N);
for x = 1:1:M
for y = 1:1:N
g_1(x,y) = g_1(x,y) * (-1)^(x+y);
g_2(x,y) = g_2(x,y) * (-1)^(x+y);
end
end
%% -----show-------
figure();
subplot(1,2,1);
imshow(f,[0 1]);
xlabel('a).Original Image');
subplot(1,2,2);
imshow(log(1 + abs(F)),[ ]);
xlabel('b).Fourier spectrum of a');
figure();
subplot(1,2,1);
imshow(H_1,[0 1]);
xlabel('c).Ideal Highpass filter(D=60)');
subplot(1,2,2);
h = mesh(1:20:P,1:20:Q,H_1(1:20:P,1:20:Q));
set(h,'EdgeColor','k');
axis([0 P 0 Q 0 1]);
xlabel('u');ylabel('v');
zlabel('|H(u,v)|');
figure();
subplot(1,2,1);
imshow(log(1 + abs(G_1)),[ ]);
xlabel('d).Result of filtering using c');
subplot(1,2,2);
imshow(g_1,[0 1]);
xlabel('e).Result image');
figure();
subplot(1,2,1);
imshow(H_2,[0 1]);
xlabel('f).Ideal Highpass filter(D=160)');
subplot(1,2,2);
h = mesh(1:20:P,1:20:Q,H_2(1:20:P,1:20:Q));
set(h,'EdgeColor','k');
axis([0 P 0 Q 0 1]);
xlabel('u');ylabel('v');
zlabel('|H(u,v)|');
figure();
subplot(1,2,1);
imshow(log(1 + abs(G_2)),[ ]);
xlabel('g).Result of filtering using e');
subplot(1,2,2);
imshow(g_2,[0 1]);
xlabel('h).Result image');
close all;
clear all;
%% ---------Butterworth Highpass Filters (Fre. Domain)------------
f = imread('characters_test_pattern.tif');
f = mat2gray(f,[0 255]);
[M,N] = size(f);
P = 2*M;
Q = 2*N;
fc = zeros(M,N);
for x = 1:1:M
for y = 1:1:N
fc(x,y) = f(x,y) * (-1)^(x+y);
end
end
F = fft2(fc,P,Q);
H_1 = zeros(P,Q);
H_2 = zeros(P,Q);
for x = (-P/2):1:(P/2)-1
for y = (-Q/2):1:(Q/2)-1
D = (x^2 + y^2)^(0.5);
D_0 = 100;
H_1(x+(P/2)+1,y+(Q/2)+1) = 1/(1+(D_0/D)^2);
H_2(x+(P/2)+1,y+(Q/2)+1) = 1/(1+(D_0/D)^6);
end
end
G_1 = H_1 .* F;
G_2 = H_2 .* F;
g_1 = real(ifft2(G_1));
g_1 = g_1(1:1:M,1:1:N);
g_2 = real(ifft2(G_2));
g_2 = g_2(1:1:M,1:1:N);
for x = 1:1:M
for y = 1:1:N
g_1(x,y) = g_1(x,y) * (-1)^(x+y);
g_2(x,y) = g_2(x,y) * (-1)^(x+y);
end
end
%% -----show-------
figure();
subplot(1,2,1);
imshow(f,[0 1]);
xlabel('a).Original Image');
subplot(1,2,2);
imshow(log(1 + abs(F)),[ ]);
xlabel('b).Fourier spectrum of a');
figure();
subplot(1,2,1);
imshow(H_1,[0 1]);
xlabel('c)Butterworth Lowpass (D_{0}=100,n=1)');
subplot(1,2,2);
h = mesh(1:20:P,1:20:Q,H_1(1:20:P,1:20:Q));
set(h,'EdgeColor','k');
axis([0 P 0 Q 0 1]);
xlabel('u');ylabel('v');
zlabel('|H(u,v)|');
figure();
subplot(1,2,1);
imshow(log(1 + abs(G_1)),[ ]);
xlabel('d).Result of filtering using c');
subplot(1,2,2);
imshow(g_1,[0 1]);
xlabel('e).Result image');
figure();
subplot(1,2,1);
imshow(H_2,[0 1]);
xlabel('f).Butterworth Lowpass (D_{0}=100,n=3)');
subplot(1,2,2);
h = mesh(1:20:P,1:20:Q,H_2(1:20:P,1:20:Q));
set(h,'EdgeColor','k');
axis([0 P 0 Q 0 1]);
xlabel('u');ylabel('v');
zlabel('|H(u,v)|');
figure();
subplot(1,2,1);
imshow(log(1 + abs(G_2)),[ ]);
xlabel('g).Result of filtering using e');
subplot(1,2,2);
imshow(g_2,[0 1]);
xlabel('h).Result image');
close all;
clear all;
%% ---------Gaussian Highpass Filters (Fre. Domain)------------
f = imread('characters_test_pattern.tif');
f = mat2gray(f,[0 255]);
[M,N] = size(f);
P = 2*M;
Q = 2*N;
fc = zeros(M,N);
for x = 1:1:M
for y = 1:1:N
fc(x,y) = f(x,y) * (-1)^(x+y);
end
end
F = fft2(fc,P,Q);
H_1 = zeros(P,Q);
H_2 = zeros(P,Q);
for x = (-P/2):1:(P/2)-1
for y = (-Q/2):1:(Q/2)-1
D = (x^2 + y^2)^(0.5);
D_0 = 60;
H_1(x+(P/2)+1,y+(Q/2)+1) = 1 - exp(-(D*D)/(2*D_0*D_0));
D_0 = 160;
H_2(x+(P/2)+1,y+(Q/2)+1) = 1 - exp(-(D*D)/(2*D_0*D_0));
end
end
G_1 = H_1 .* F;
G_2 = H_2 .* F;
g_1 = real(ifft2(G_1));
g_1 = g_1(1:1:M,1:1:N);
g_2 = real(ifft2(G_2));
g_2 = g_2(1:1:M,1:1:N);
for x = 1:1:M
for y = 1:1:N
g_1(x,y) = g_1(x,y) * (-1)^(x+y);
g_2(x,y) = g_2(x,y) * (-1)^(x+y);
end
end
%% -----show-------
figure();
subplot(1,2,1);
imshow(f,[0 1]);
xlabel('a).Original Image');
subplot(1,2,2);
imshow(log(1 + abs(F)),[ ]);
xlabel('b).Fourier spectrum of a');
figure();
subplot(1,2,1);
imshow(H_1,[0 1]);
xlabel('c)Gaussian Highpass (D_{0}=60)');
subplot(1,2,2);
h = mesh(1:20:P,1:20:Q,H_1(1:20:P,1:20:Q));
set(h,'EdgeColor','k');
axis([0 P 0 Q 0 1]);
xlabel('u');ylabel('v');
zlabel('|H(u,v)|');
figure();
subplot(1,2,1);
imshow(log(1 + abs(G_1)),[ ]);
xlabel('d).Result of filtering using c');
subplot(1,2,2);
imshow(g_1,[0 1]);
xlabel('e).Result image');
figure();
subplot(1,2,1);
imshow(H_2,[0 1]);
xlabel('f).Gaussian Highpass (D_{0}=160)');
subplot(1,2,2);
h = mesh(1:20:P,1:20:Q,H_2(1:20:P,1:20:Q));
set(h,'EdgeColor','k');
axis([0 P 0 Q 0 1]);
xlabel('u');ylabel('v');
zlabel('|H(u,v)|');
figure();
subplot(1,2,1);
imshow(log(1 + abs(G_2)),[ ]);
xlabel('g).Result of filtering using e');
subplot(1,2,2);
imshow(g_2,[0 1]);
xlabel('h).Result image');
1.5 锐化滤波器
close all;
clear all;
clc;
%% ---------The High-Fre-Emphasis Filters (Fre. Domain)------------
f = imread('blurry_moon.tif');
f = mat2gray(f,[0 255]);
[M,N] = size(f);
P = 2*M;
Q = 2*N;
fc = zeros(M,N);
for x = 1:1:M
for y = 1:1:N
fc(x,y) = f(x,y) * (-1)^(x+y);
end
end
F = fft2(fc,P,Q);
H_HP = zeros(P,Q);
for x = (-P/2):1:(P/2)-1
for y = (-Q/2):1:(Q/2)-1
D = (x^2 + y^2)^(0.5);
D_0 = 80;
H_HP(x+(P/2)+1,y+(Q/2)+1) = 1 - exp(-(D*D)/(2*D_0*D_0));
end
end
G_HP = H_HP .* F;
G_HFE = (1 + 1.1 * H_HP) .* F;
g_1 = real(ifft2(G_HP));
g_1 = g_1(1:1:M,1:1:N);
g_2 = real(ifft2(G_HFE));
g_2 = g_2(1:1:M,1:1:N);
for x = 1:1:M
for y = 1:1:N
g_1(x,y) = g_1(x,y) * (-1)^(x+y);
g_2(x,y) = g_2(x,y) * (-1)^(x+y);
end
end
g = histeq(g_2);
%g_1 = mat2gray(g_1);
%% -----show-------
figure();
subplot(1,2,1);
imshow(f,[0 1]);
xlabel('a).Original Image');
subplot(1,2,2);
imshow(log(1 + abs(F)),[ ]);
xlabel('b).Fourier spectrum of a');
figure();
subplot(1,2,1);
imshow(g_1,[0 1]);
xlabel('c).Result image of High-pass Filter');
subplot(1,2,2);
imshow(log(1 + abs(G_HP)),[ ]);
xlabel('d).Result of filtering using e');
figure();
subplot(1,2,1);
imshow(g_2,[0 1]);
xlabel('e).Result image of High-Fre-Emphasis Filter');
subplot(1,2,2);
imshow(log(1 + abs(G_HFE)),[ ]);
xlabel('f).Result of filtering using e');
2.带阻滤波器
close all;
clear all;
clc;
%% ---------------------Add Noise-------------------------
f = imread('left.tif');
f = mat2gray(f,[0 255]);
[M,N] = size(f);
P = 2*M;
Q = 2*N;
fc = zeros(M,N);
for x = 1:1:M
for y = 1:1:N
fc(x,y) = f(x,y) * (-1)^(x+y);
end
end
F = fft2(fc,P,Q);
H_NP = ones(P,Q);
for x = (-P/2):1:(P/2)-1
for y = (-Q/2):1:(Q/2)-1
D = 2;
v_k = -200; u_k = 150;
D_k = ((x+u_k)^2 + (y+v_k)^2)^(0.5);
H_NP(x+(P/2)+1,y+(Q/2)+1) = H_NP(x+(P/2)+1,y+(Q/2)+1) * 1/(1+(D/D_k)^4);
D_k = ((x-u_k)^2 + (y-v_k)^2)^(0.5);
H_NP(x+(P/2)+1,y+(Q/2)+1) = H_NP(x+(P/2)+1,y+(Q/2)+1) * 1/(1+(D/D_k)^4);
v_k = 200; u_k = 150;
D_k = ((x+u_k)^2 + (y+v_k)^2)^(0.5);
H_NP(x+(P/2)+1,y+(Q/2)+1) = H_NP(x+(P/2)+1,y+(Q/2)+1) * 1/(1+(D/D_k)^4);
D_k = ((x-u_k)^2 + (y-v_k)^2)^(0.5);
H_NP(x+(P/2)+1,y+(Q/2)+1) = H_NP(x+(P/2)+1,y+(Q/2)+1) * 1/(1+(D/D_k)^4);
v_k = 0; u_k = 250;
D_k = ((x+u_k)^2 + (y+v_k)^2)^(0.5);
H_NP(x+(P/2)+1,y+(Q/2)+1) = H_NP(x+(P/2)+1,y+(Q/2)+1) * 1/(1+(D/D_k)^4);
D_k = ((x-u_k)^2 + (y-v_k)^2)^(0.5);
H_NP(x+(P/2)+1,y+(Q/2)+1) = H_NP(x+(P/2)+1,y+(Q/2)+1) * 1/(1+(D/D_k)^4);
v_k = 250; u_k = 0;
D_k = ((x+u_k)^2 + (y+v_k)^2)^(0.5);
H_NP(x+(P/2)+1,y+(Q/2)+1) = H_NP(x+(P/2)+1,y+(Q/2)+1) * 1/(1+(D/D_k)^4);
D_k = ((x-u_k)^2 + (y-v_k)^2)^(0.5);
H_NP(x+(P/2)+1,y+(Q/2)+1) = H_NP(x+(P/2)+1,y+(Q/2)+1) * 1/(1+(D/D_k)^4);
H_NP(x+(P/2)+1,y+(Q/2)+1) = 1 + 700*(1 - H_NP(x+(P/2)+1,y+(Q/2)+1));
end
end
G_Noise = F .* H_NP;
g_noise = real(ifft2(G_Noise));
g_noise = g_noise(1:1:M,1:1:N);
for x = 1:1:M
for y = 1:1:N
g_noise(x,y) = g_noise(x,y) * (-1)^(x+y);
end
end
%% ---------Bondpass Filters (Fre. Domain)------------
H_1 = ones(P,Q);
for x = (-P/2):1:(P/2)-1
for y = (-Q/2):1:(Q/2)-1
D = (x^2 + y^2)^(0.5);
D_0 = 250;
W = 30;
H_1(x+(P/2)+1,y+(Q/2)+1) = 1/(1+((D*W)/((D*D) - (D_0*D_0)))^6);
end
end
G_1 = H_1 .* G_Noise;
g_1 = real(ifft2(G_1));
g_1 = g_1(1:1:M,1:1:N);
for x = 1:1:M
for y = 1:1:N
g_1(x,y) = g_1(x,y) * (-1)^(x+y);
end
end
%% -----show-------
close all;
figure();
subplot(1,2,1);
imshow(f,[0 1]);
xlabel('a).Original Image');
subplot(1,2,2);
imshow(log(1 + abs(F)),[ ]);
xlabel('b).Fourier spectrum of a');
figure();
subplot(1,2,2);
imshow(log(1 + abs(G_Noise)),[ ]);
xlabel('c).Fourier spectrum of b');
subplot(1,2,1);
imshow(g_noise,[0 1]);
xlabel('b).Result of add noise');
figure();
subplot(1,2,1);
imshow(H_1,[0 1]);
xlabel('d).Butterworth Bandpass filter(D=355 W=40 n =2)');
subplot(1,2,2);
h = mesh(1:20:Q,1:20:P,H_1(1:20:P,1:20:Q));
set(h,'EdgeColor','k');
axis([0 Q 0 P 0 1]);
xlabel('u');ylabel('v');
zlabel('|H(u,v)|');
figure();
subplot(1,2,2);
imshow(log(1 + abs(G_1)),[ ]);
xlabel('e).Fourier spectrum of f');
subplot(1,2,1);
imshow(g_1,[0 1]);
xlabel('f).Result of denoise');
3.陷波滤波器(Notch Filter)
close all;
clear all;
clc;
%% ---------Butterworth Notch filter (Fre. Domain)------------
f = imread('car_75DPI_Moire.tif');
f = mat2gray(f,[0 255]);
[M,N] = size(f);
P = 2*M;
Q = 2*N;
fc = zeros(M,N);
for x = 1:1:M
for y = 1:1:N
fc(x,y) = f(x,y) * (-1)^(x+y);
end
end
F = fft2(fc,P,Q);
H_NF = ones(P,Q);
for x = (-P/2):1:(P/2)-1
for y = (-Q/2):1:(Q/2)-1
D = 30;
v_k = 59; u_k = 77;
D_k = ((x+u_k)^2 + (y+v_k)^2)^(0.5);
H_NF(x+(P/2)+1,y+(Q/2)+1) = H_NF(x+(P/2)+1,y+(Q/2)+1) * 1/(1+(D/D_k)^4);
D_k = ((x-u_k)^2 + (y-v_k)^2)^(0.5);
H_NF(x+(P/2)+1,y+(Q/2)+1) = H_NF(x+(P/2)+1,y+(Q/2)+1) * 1/(1+(D/D_k)^4);
v_k = 59; u_k = 159;
D_k = ((x+u_k)^2 + (y+v_k)^2)^(0.5);
H_NF(x+(P/2)+1,y+(Q/2)+1) = H_NF(x+(P/2)+1,y+(Q/2)+1) * 1/(1+(D/D_k)^4);
D_k = ((x-u_k)^2 + (y-v_k)^2)^(0.5);
H_NF(x+(P/2)+1,y+(Q/2)+1) = H_NF(x+(P/2)+1,y+(Q/2)+1) * 1/(1+(D/D_k)^4);
v_k = -54; u_k = 84;
D_k = ((x+u_k)^2 + (y+v_k)^2)^(0.5);
H_NF(x+(P/2)+1,y+(Q/2)+1) = H_NF(x+(P/2)+1,y+(Q/2)+1) * 1/(1+(D/D_k)^4);
D_k = ((x-u_k)^2 + (y-v_k)^2)^(0.5);
H_NF(x+(P/2)+1,y+(Q/2)+1) = H_NF(x+(P/2)+1,y+(Q/2)+1) * 1/(1+(D/D_k)^4);
v_k = -54; u_k = 167;
D_k = ((x+u_k)^2 + (y+v_k)^2)^(0.5);
H_NF(x+(P/2)+1,y+(Q/2)+1) = H_NF(x+(P/2)+1,y+(Q/2)+1) * 1/(1+(D/D_k)^4);
D_k = ((x-u_k)^2 + (y-v_k)^2)^(0.5);
H_NF(x+(P/2)+1,y+(Q/2)+1) = H_NF(x+(P/2)+1,y+(Q/2)+1) * 1/(1+(D/D_k)^4);
end
end
G_1 = H_NF .* F;
g_1 = real(ifft2(G_1));
g_1 = g_1(1:1:M,1:1:N);
for x = 1:1:M
for y = 1:1:N
g_1(x,y) = g_1(x,y) * (-1)^(x+y);
end
end
%% -----show-------
close all;
figure();
subplot(1,2,1);
imshow(f,[0 1]);
xlabel('a).Original Image');
subplot(1,2,2);
imshow(log(1 + abs(F)),[ ]);
xlabel('b).Fourier spectrum of a');
figure();
subplot(1,2,1);
imshow(H_NF,[0 1]);
xlabel('c).Butterworth Notch filter(D=30 n=2)');
subplot(1,2,2);
h = mesh(1:10:Q,1:10:P,H_NF(1:10:P,1:10:Q));
set(h,'EdgeColor','k');
axis([0 Q 0 P 0 1]);
xlabel('u');ylabel('v');
zlabel('|H(u,v)|');
figure();
subplot(1,2,2);
imshow(log(1 + abs(G_1)),[ ]);
xlabel('e).Fourier spectrum of d');
subplot(1,2,1);
imshow(g_1,[0 1]);
xlabel('d).Result image');
[数字图像处理]频域滤波(2)--高通滤波器,带阻滤波器与陷波滤波器相关推荐
- 数字图像处理——频域滤波基础
频域滤波基础 1.频域滤波与空域滤波的关系 傅立叶变换可以将图像从空域变换到频域,而傅立叶反变换则可以将图像的频谱逆变换为空域图像.这样一来,我们可以利用空域图像与频域之间的对应关系,尝试将空域卷积滤 ...
- 数字图像处理-频域滤波-高通/低通滤波
频域滤波 频域滤波是在频率域对图像做处理的一种方法.步骤如下: 滤波器大小和频谱大小相同,相乘即可得到新的频谱. 滤波后结果显示,低通滤波去掉了高频信息,即细节信息,留下的低频信息代表了概貌.常用的例 ...
- 基于skimage的数字图像处理——频域滤波(傅里叶变换)
注意:文章代码基于notebook实现,也可修改后用于pycharm等编译器. 文章目录 前言 一.频域滤波与傅里叶变换 二.skimage代码实现 1.简单的傅里叶变换: 2.不同种类的正弦波及其傅 ...
- 数字图像处理频域滤波实现低通与高通滤波(包含matlab代码)
低通滤波器 理想低通滤波 作用:保留频谱图中圆内低频分量,截断频谱图中圆外高频分量 函数表示: 假设频谱中心在 (M/2,N/2)处,则任意频谱成分(u,v) 到中心(原点)的距离D(u,v) 定义为 ...
- Matlab 数字图像处理 频域滤波函数paddedsize
function PQ = paddedsize(AB, CD, PARAM) % 计算填充尺寸以供基于FFT的滤波器 % PQ = PADDEDSIZE(AB),AB = [A B], PQ = 2 ...
- [数字图像处理]频域滤波(1)--基础与低通滤波器
https://blog.csdn.net/qq_36792959/article/details/99343186
- Digital Image processing 数字图像处理最佳陷波滤波器设计(频域)
最佳陷波滤波器(傅里叶变换,matlab实现) 1基本概念 1.1频域滤波步骤小结 在频域中的滤波是简单明了的.它包含如下步骤: (1)给定一幅大小为MN的输入图像f(x,y),选择填充参数P,Q,典 ...
- 计算机图像进行滤波的函数,数字图像处理图像滤波.ppt
数字图像处理图像滤波 图像滤波 图像处理中所用到的图像往往含有噪声,需要用图像滤波的方法去除噪声. 内容框架 像素基础知识介绍 算术和逻辑运算 直方图 直方图均衡算法,用于图像锐化. 图像增强基本方法 ...
- 50Hz双T陷波滤波器(带阻滤波器)
1. 传统双 T 网络的带阻滤波器 工程上,滤除工频干扰比较常用的电路是无源双T陷波滤波器. 图示双T的无源陷波滤波器电路,陷波器是某一小频率范围内的带阻滤波器.陷波器的一个常见的应用是滤除50赫兹左 ...
- opencv频域滤波 C++实现陷波滤波器
1.首先看效果 输入: 输出: 2.基本思路 对分析输入图像的频谱(幅度谱): 放大: 明显看到频谱中心外有4个峰值,找到坐标,干掉即可(陷波滤波思想). 找出坐标: 得出4个关键坐标: (278,3 ...
最新文章
- 归纳整理--第2篇--QQ好友
- 《Adobe Acrobat XI经典教程》—第6课转换PPT演示文稿
- 内存映射IO (MMIO) 简介
- blp模型 上读下写_Java高并发编程(三):Java内存模型
- 信息学奥赛一本通_长乐一中老师演绎“奥赛传奇”
- 测试下微信公众号新功能
- 面向服务的分析与设计原理
- dep指定版本 go_Go 1.12 版本的新特性
- 牛客多校第二场 G transform
- div 夸站点加载html,使用jQuery加载html页面到指定的div实现方法
- 软工导论 12-13-2 实验任务一
- hbase 性能优化
- 解决Intellij中的一些bug
- java实现视频在线播放并解决java.io.IOException: 您的主机中的软件中止了一个已建立的连接。
- matlab ofdm系统 过采样和欠采样,过采样和欠采样
- Ubuntu联网安装GCC
- 二或四 通道USB数据采集卡如合通过CMI耦合,构成USB高速多通道数据采集卡
- LSF Command
- IDEA 快速复制、剪切当前行
- nginx服务器缓存文件清理,清除nginx缓存文件并不总是有效
热门文章
- Linux下如何进入Redis客户端
- 萤石摄像头实现web端监控预览以及录像回放
- vue引入萤石云监控进行播放
- 怎么打开kux格式?如何把kux格式转换成mp4
- 当BIM遇上GIS-无人机倾斜摄影三维建模(ContextCapture) 建设智慧城市方法详解
- FFmpeg基础:视频流转图片
- 企业级代码静态测试工具Helix QAC——从应用层级保证代码质量和安全
- TM1650芯片使用经验
- ARCGIS小工具(插件)免费版_自取_GIS插件_工具_其他
- groupdel: cannot remove the primary group of user 'lxh1'的解决办法