帮我用matlab写一个sobel算子检测图片的代码
时间: 2023-12-28 15:03:32 浏览: 63
基于Sobel算子图像边缘检测的MATLAB实现.zip
5星 · 资源好评率100%
以下是一个基本的Sobel算子边缘检测的MATLAB代码:
```matlab
clc; % 清屏
clear; % 清空变量
close all; % 关闭所有图形窗口
% 读取图像
img = imread('lena.jpg');
img = rgb2gray(img);
% Sobel算子
sobel_x = [-1 0 1; -2 0 2; -1 0 1];
sobel_y = [-1 -2 -1; 0 0 0; 1 2 1];
% 计算x和y方向上的梯度
grad_x = conv2(double(img), sobel_x, 'same');
grad_y = conv2(double(img), sobel_y, 'same');
% 计算梯度的大小和方向
grad_mag = sqrt(grad_x.^2 + grad_y.^2);
grad_dir = atan2(grad_y, grad_x);
% 显示图像和梯度方向
figure;
subplot(2,2,1); imshow(img); title('Original Image');
subplot(2,2,2); imshow(grad_mag, []); title('Gradient Magnitude');
subplot(2,2,3); imshow(grad_dir, []); title('Gradient Direction');
subplot(2,2,4); imshow(img); hold on;
quiver(grad_x, grad_y, 'color', 'r'); title('Gradient Vectors');
```
这段代码首先读取了一个灰度图像,然后定义了Sobel算子的x和y方向。接着,使用`conv2`函数计算了x和y方向上的梯度。最后,通过`sqrt`和`atan2`函数计算梯度的大小和方向,并将结果显示出来。其中,`imshow`函数用于显示图像,`quiver`函数用于显示梯度向量。
阅读全文