一、知识点:
1、Roberts交叉梯度算子
2、Prewitt梯度算子
3、Sobel梯度算子
4、拉普拉斯算子
二、实验完整代码
img = imread('D:/picture/Fig4.jpg');
figure,imshow(img);
title('原图像');
[m,n] = size(img);
f = double(img);
%采用Sobel梯度算子锐化图像
sobelMarginalizationResult = zeros(m,n);
sobelX=[-1,-2,-1;
0, 0, 0;
1, 2, 1];
sobelY=[-1,0,1;
-2,0,2;
-1,0,1];
for i=2:1:m-1
for j=2:1:n-1
temp = [f(i-1,j-1),f(i-1,j),f(i-1,j+1);
f(i,j-1),f(i,j),f(i,j+1);
f(i+1,j-1),f(i+1,j),f(i+1,j+1)];
sx = sobelX.*temp;
sy = sobelY.*temp;
sobelMarginalizationResult(i,j) = max(abs(sum(sx(:))),abs(sum(sy(:))));
end
end
figure,imshow(uint8(sobelMarginalizationResult));
title('采用Sobel梯度算子边缘提取图像');
sobelMarginalizationResult = double(sobelMarginalizationResult);
sobelSharpenResult = sobelMarginalizationResult + f;
figure,imshow(uint8(sobelSharpenResult));
title('采用Sobel梯度算子锐化图像');
sobelSharpenResult = double(sobelSharpenResult);
%采用Roberts梯度算子锐化图像:
robertsMarginalizationResult = zeros(m,n);
robertsX=[-1,0;
0,1];
robertsY=[0,-1;
1,0];
for i=2:1:m-1
for j=2:1:n-1
temp = [f(i-1,j-1),f(i-1,j);
f(i,j-1),f(i,j)];
rx = robertsX.*temp;
ry = robertsY.*temp;
robertsMarginalizationResult(i,j) = max(abs(sum(rx(:))),abs(sum(ry(:))));
end
end
figure,imshow(uint8(robertsMarginalizationResult));
title('采用Roberts梯度算子边缘提取图像');
robertsMarginalizationResult = double(robertsMarginalizationResult);
robertsSharpenResult = robertsMarginalizationResult+f;
figure,imshow(uint8(robertsSharpenResult));
title('采用Roberts梯度算子锐化图像');
robertsSharpenResult = double(robertsSharpenResult);
%采用Prewitt梯度算子锐化图像
prewittMarginalizationResult = zeros(m,n);
prewittX=[-1,-1,-1;
0,0,0;
1,1,1];
prewittY=[1,0,-1;
1,0,-1;
1,0,-1];
for i=2:1:m-1
for j=2:1:n-1
temp = [f(i-1,j-1),f(i-1,j),f(i-1,j+1);
f(i,j-1),f(i,j),f(i,j+1);
f(i+1,j-1),f(i+1,j),f(i+1,j+1)];
px = prewittX.*temp;
py = prewittY.*temp;
prewittMarginalizationResult(i,j) = sqrt((sum(px(:)))^2+(sum(py(:)))^2);
end
end
figure,imshow(uint8(prewittMarginalizationResult));
title('采用Prewitt梯度算子边缘提取图像');
prewittMarginalizationResult = double(prewittMarginalizationResult);
prewittSharpenResult = prewittMarginalizationResult + f;
figure,imshow(uint8(prewittSharpenResult));
title('采用Prewitt梯度算子锐化图像');
prewittSharpenResult = double(prewittSharpenResult);
%采用Laplacian梯度算子锐化图像,用二阶微分
laplacianMarginalizationResult = zeros(m,n);
for i=2:m-1
for j=2:n-1
laplacianMarginalizationResult(i,j) = f(i+1,j)+f(i,j-1)+f(i,j+1)+f(i,j-1)-4*f(i,j);
end
end
laplacianSharpenResult = f + laplacianMarginalizationResult;
figure,imshow(uint8(laplacianMarginalizationResult));
title('采用Laplacian梯度算子边缘提取图像');
laplacianMarginalizationResult = double(laplacianMarginalizationResult);
figure,imshow(uint8(laplacianSharpenResult));
title('采用Laplacian梯度算子锐化图像');
laplacianSharpenResult = double(laplacianSharpenResult);