程序代码:
clear
%拉普拉斯变换
A = imread("Moon.jpg");
Laplace1(A);
%Soble变换
B = imread("lens.jpg");
Soble1(B);
%锐化
C = imread("rabbit.jpg");
C = C(:,:,1);
%st = 3,k = 1.5
Sharpen1(C,3,1.5);
%st = 3,k = 3
Sharpen1(C,3,3);
%st = 5,k = 1.5
Sharpen1(C,5,1.5);
%st = 5,k = 3
Sharpen1(C,5,3);
一、Laplace变换
(1)Figure

(2)Code
function [g_1,g_2] = Laplace1(A)
%拉普拉斯变换
%预先留出输出图像
A_double = double(A);
g_1 = A;
g_2 = A;
[ra,ca] = size(A);
%中心为负,最后应相减
%h1是x轴和y轴方向的二阶导数
%h2是四个方向的二阶导数
h1 = [0,1,0;1,-4,1;0,1,0];
h2 = [1,1,1;1,-8,1;1,1,1];
st = 3;
for A_i = (st+1)/2:ra-(st+1)/2+1
for A_j = (st+1)/2:ca-(st+1)/2+1
Hxy_1 = A_double(A_i-(st-1)/2:A_i+(st-1)/2,A_j-(st-1)/2:A_j+(st-1)/2).*h1;
Hxy_2 = A_double(A_i-(st-1)/2:A_i+(st-1)/2,A_j-(st-1)/2:A_j+(st-1)/2).*h2;
g_1(A_i,A_j) = sum(Hxy_1(:));g_2(A_i,A_j) = sum(Hxy_2(:));
end
end
%对于超出0-255范围的值应加以归0或归255
g_1 = uint8(A-g_1);
g_1(g_1<0) = 0;g_1(g_1>255) = 255;
g_2 = uint8(A-g_2);
g_2(g_2<0) = 0;g_2(g_2>255) = 255;
figure,
subplot(131),imshow(A),title("原图");
subplot(132),imshow(g_1),title("模板一锐化");
subplot(133),imshow(g_2),title("模板二锐化");
end
二、Soble变换
(1)Figure

(2)Coded
function [g_1,g_x,g_y] = Soble1(A)
%soble边缘检测
%单层图像的检测
%g_1是xy方向完整的检测
%g_x\g_y分别是x和y方向的检测
A_double = double(A);
g_x = A_double;
g_y = A_double;
[ra,ca] = size(A_double);
hx = [-1,-2,-1;0,0,0;1,2,1];
hy = [-1,0,1;-2,0,2;-1,0,1];
st = 3;
for A_i = (st+1)/2:ra-(st+1)/2+1
for A_j = (st+1)/2:ca-(st+1)/2+1
Hxy_x = A_double(A_i-(st-1)/2:A_i+(st-1)/2,A_j-(st-1)/2:A_j+(st-1)/2).*hx;
Hxy_y = A_double(A_i-(st-1)/2:A_i+(st-1)/2,A_j-(st-1)/2:A_j+(st-1)/2).*hy;
g_x(A_i,A_j) = sum(Hxy_x(:));
g_y(A_i,A_j) = sum(Hxy_y(:));
end
end
g_x = uint8(g_x);
g_y = uint8(g_y);
g_1 = g_x+g_y;
g_1(g_1<0) = 0;g_1(g_1>255) = 255;
figure,
subplot(221),imshow(A),title("原图");
subplot(222),imshow(g_x),title("x方向");
subplot(223),imshow(g_y),title("y方向");
subplot(224),imshow(g_1),title("soble变换后图片");
end
三、锐化
(1)Figure
%st = 3,k = 1.5

%st = 3,k = 3

%st = 5,k = 1.5

%st = 5,k = 3

(2)Code
function [A_Out,Mod,A_Med] = Sharpen1(A,st,k)
%锐化
%步骤:先将原图钝化,原图-钝化图片=反锐化模板,原图+k*反锐化模板 = 输出图像
%st可选,k是锐化系数
A_Med = AverageFilter1(A,st);
Mod = A-A_Med;
A_Out = A+k.*Mod;
figure,subplot(221),imshow(A),title('原图');
subplot(222),imshow(A_Out),title("锐化图像st = "+st+" K = "+k);
subplot(223),imshow(A_Med),title("均值滤波后图片st = "+st+" K = "+k);
subplot(224),imshow(Mod),title("反锐化模板st = "+st+" K = "+k);
end
###