imread函数 matlab_MATLAB图像处理:15:减少图像梯度中的噪点

32d9a62261cd57ec300b7463d0bea2a6.png

本示例演示了如何减少与计算图像梯度相关的噪声。图像梯度用于突出显示图像中有趣的特征,并在许多特征检测算法(如边缘/角检测)中使用。降低梯度计算中的噪声对于检测准确的特征至关重要。

将图像读入工作区并将其转换为灰度图。

 originalImage = imread('yellowlily.jpg');
 originalImage = rgb2gray(originalImage);
 ​
 imshow(originalImage)

52be797a5fb3c2076737a7aa86c8f9b2.png

为了模拟此示例中的噪声,请向图像添加一些高斯噪声。

 noisyImage = imnoise(originalImage,'gaussian');
 imshow(noisyImage)

2dc898780aa5e303f66d8b53408b4dbe.png

使用imgradientimgradientxy函数计算梯度的大小。imgradient找到梯度的大小和方向,imgradientxy找到方向图像的梯度。

 sobelGradient = imgradient(noisyImage);
 imshow(sobelGradient,[])
 title('Sobel Gradient Magnitude')

c9faeefa04cdff3a1c2b93bc3f4e25f8.png

观察梯度幅值图像,很明显图像梯度噪声很大。可以通过在梯度计算之前进行平滑来将噪声的影响最小化。imgradient通过使用Sobel梯度算子,已经为少量噪声提供了此功能。Sobel梯度算子是3x3滤波器,如下所示。可以使用fspecial函数生成它们。

 hy = -fspecial('sobel')
 hy = 3×3
 ​
     -1    -2    -1
      0     0     0
      1     2     1
 hx = hy'
 hx = 3×3
 ​
     -1     0     1
     -2     0     2
     -1     0     1

hy过滤器在沿着水平方向移动,计算垂直方向上的梯度。hx过滤器在沿着垂直方向移动,计算水平方向上的梯度。'Prewitt''Roberts'方法的选择也提供这种能力。

即使使用Sobel,Roberts或Prewitts梯度算子,图像梯度也可能太嘈杂。为克服此问题,请在计算图像梯度之前使用高斯平滑滤波器对图像进行平滑处理。使用该imgaussfilt函数可以平滑图像。高斯滤波器的标准偏差会改变平滑程度。由于平滑是通过高斯滤波进行的,因此可以使用中央或中间差分梯度算子。

 sigma = 2;
 smoothImage = imgaussfilt(noisyImage,sigma);
 smoothGradient = imgradient(smoothImage,'CentralDifference');
 imshow(smoothGradient,[])
 title('Smoothed Gradient Magnitude')

fac59361a2a143f7aae1ed580560759c.png

注:本文根据MATLAB官网内容修改而成。

欢迎您进一步了解以下MATLAB系列文章:

吃小羊:MATLAB作图实例:00:索引​zhuanlan.zhihu.com
2081c3423e2e8ce3bebaa083dbcc0037.png
吃小羊:MATLAB金融工具箱:00:索引​zhuanlan.zhihu.com
8b90a580b4c614cd5558628b0a2de3ec.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值