sobel算子提取图像matlab代码
时间: 2023-12-27 12:05:29 浏览: 63
Robert,sobel图像轮廓提取代码,不是matlab自带函数!(Robert, sobel image contou_
5星 · 资源好评率100%
下面是使用sobel算子提取图像的MATLAB代码示例:
```matlab
% 读入图像
img = imread('lena.png');
% 将图像转为灰度图
gray_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];
% 使用sobel算子计算梯度
grad_x = conv2(double(gray_img), double(sobel_x));
grad_y = conv2(double(gray_img), double(sobel_y));
% 计算梯度幅值和角度
grad_mag = sqrt(grad_x.^2 + grad_y.^2);
grad_angle = atan2(grad_y, grad_x);
% 显示结果
figure;
subplot(2,2,1), imshow(gray_img), title('原图');
subplot(2,2,2), imshow(grad_mag, []), title('梯度幅值');
subplot(2,2,3), imshow(grad_x, []), title('x方向梯度');
subplot(2,2,4), imshow(grad_y, []), title('y方向梯度');
```
在这个示例中,我们首先使用`imread`函数读入一张图像。然后,使用`rgb2gray`函数将其转为灰度图像。接着,我们定义了sobel算子的两个矩阵(分别用于计算x和y方向的梯度)。然后,使用`conv2`函数对图像进行卷积操作,得到x和y方向的梯度。最后,计算梯度幅值和角度,并使用`imshow`函数显示结果。
注意,在这个示例中,我们使用了`double`函数将灰度图像和sobel算子的矩阵转为双精度数值,以避免计算过程中的溢出。同时,为了显示梯度幅值的图像,我们使用了`[]`参数,以将图像的像素值范围设置为[0,255]。
阅读全文