选择测试图像实现两种常用梯度算子(Sobel算子、Prewitt算子)的Matlab完整代码
时间: 2023-12-29 18:06:15 浏览: 102
图像边缘检测matlab源码kirsch、Laplacian、prewitt、roberts、Sobel算子(亲测可用已经调试注释完整)
下面是实现Sobel算子和Prewitt算子的Matlab代码:
% 读取测试图像
image = imread('test.jpg');
% 转为灰度图像
gray = rgb2gray(image);
% Sobel算子
sobel_x = [-1, 0, 1; -2, 0, 2; -1, 0, 1];
sobel_y = [-1, -2, -1; 0, 0, 0; 1, 2, 1];
sobel_grad_x = imfilter(double(gray), sobel_x, 'conv');
sobel_grad_y = imfilter(double(gray), sobel_y, 'conv');
sobel_grad_mag = sqrt(sobel_grad_x.^2 + sobel_grad_y.^2);
sobel_grad_dir = atan2(sobel_grad_y, sobel_grad_x);
% Prewitt算子
prewitt_x = [-1, 0, 1; -1, 0, 1; -1, 0, 1];
prewitt_y = [-1, -1, -1; 0, 0, 0; 1, 1, 1];
prewitt_grad_x = imfilter(double(gray), prewitt_x, 'conv');
prewitt_grad_y = imfilter(double(gray), prewitt_y, 'conv');
prewitt_grad_mag = sqrt(prewitt_grad_x.^2 + prewitt_grad_y.^2);
prewitt_grad_dir = atan2(prewitt_grad_y, prewitt_grad_x);
% 显示Sobel算子的梯度幅度和方向
figure;
subplot(2,2,1),imshow(image),title('原图像');
subplot(2,2,2),imshow(sobel_grad_mag,[]),title('Sobel幅度图');
subplot(2,2,3),imshow(sobel_grad_dir,[]),title('Sobel方向图');
% 显示Prewitt算子的梯度幅度和方向
figure;
subplot(2,2,1),imshow(image),title('原图像');
subplot(2,2,2),imshow(prewitt_grad_mag,[]),title('Prewitt幅度图');
subplot(2,2,3),imshow(prewitt_grad_dir,[]),title('Prewitt方向图');
阅读全文