Sobel边缘检测
先把代码放上来,后续有时间再慢慢补全其他内容吧。
1. 处理流程
2. 算法原理
两个卷积因子怎么来的。
3. 代码示例
%% 本程序实现对于单张图片的Sobel边缘检测
clear
clc
GATE = 128;
A = imread("C:\Users\14751\Desktop\workplace.bmp");
GX = [-1 0 1; -2 0 2; -1 0 1];
GY = [1 2 1; 0 0 0; -1 -2 -1];
A_red = A(:,:,1);
A_green = A(:,:,2);
A_blue = A(:,:,3);
[rows,colums] = size(A_red);
A_sobel = zeros(rows,colums,3);
for i = 1:3 % 对每一幅图片进行处理
A_process = double(A(:,:,i));
A_temp = zeros(rows,colums);
fprintf(['正在处理第',num2str(i),'页...\n']);
for r = 2:(rows-1) % 对于图片的行数
for c = 2:(colums-1) % 对于图片的列数
A_tempx = sum(sum(A_process((r-1):(r+1),(c-1):(c+1)).*GX));
A_tempy = sum(sum(A_process((r-1):(r+1),(c-1):(c+1)).*GY));
A_temp_cal = sqrt(A_tempx^2 + A_tempy^2);
% A_temp_cal = abs(A_tempx) + abs(A_tempy); % 一种损失精度的近似
if(A_temp_cal>GATE)
A_temp(r,c) = 255;
else
A_temp(r,c) = 0;
end
end
% fprintf(['正在处理第',num2str(r),'行...\n']);
end
A_sobel(:,:,i) = A_temp;
end
A_sobel = uint8(A_sobel);
figure;
imshow(A_sobel);
![](https://i-blog.csdnimg.cn/blog_migrate/8ee2cffc35ed5e49ee8049abe6b1e5be.png)
![](https://i-blog.csdnimg.cn/blog_migrate/eeb7f47b1c8af1267d73496f272d6802.png)
lena图像处理前后对比