这个例子演示了如何减少与计算图像梯度相关的噪声。图像梯度用于突出图像中有趣的特征,并用于许多特征检测算法,如边缘/角落检测。降低梯度计算中的噪声是检测精确特征的关键。
将图像读入工作区并将其转换为灰度。
originalImage = imread(“yellowlily.jpg”);originalImage = rgb2gray(originalImage);imshow (originalImage之下)
为了模拟这个例子中的噪声,在图像中添加一些高斯噪声。
noisyImage = imnoise(原始图像,“高斯”);imshow (noisyImage)
计算梯度的大小,使用imgradient
而且imgradientxy
功能。imgradient
求出梯度大小和方向,然后imgradientxy
找到方向图像梯度。
sobelGradient = imgradient(noisyImage);imshow (sobelGradient[])标题(“索贝尔梯度幅度”)
观察梯度星等图像,很明显,图像梯度是非常嘈杂的。在梯度计算前进行平滑处理,可以减小噪声的影响。imgradient
已经通过使用Sobel梯度算子为少量噪声提供了这种能力。Sobel梯度算子是3x3滤波器,如下所示。可以使用fspecial
函数。
Hy = -fspecial(“索贝尔”)
hy =3×31 -2 -1 0 0 0 1 2 1
Hx = hy'
hx =3×3-1 0 1 -2 0 2 -1 0 1
的沪元
过滤器沿垂直方向计算梯度,同时在水平方向平滑。hx
在垂直方向上平滑,并沿水平方向计算梯度。的“普瑞维特”
而且“罗伯特”
方法选项也提供此功能。
即使使用Sobel, Roberts或Prewitt梯度算子,图像梯度也可能太过嘈杂。为了克服这个问题,在计算图像梯度之前使用高斯平滑滤波器平滑图像。使用imgaussfilt
平滑图像的函数。高斯滤波器的标准差随平滑程度的变化而变化。由于平滑是由高斯滤波处理的,所以可以使用中心或中间差分梯度算子。
σ = 2;smoothImage = imgaussfilt(noisyImage,sigma);smoothGradient = imgradient(平滑图像,“CentralDifference”);imshow (smoothGradient[])标题(“平滑梯度幅度”)
imnoise
|imgradient
|imgaussfilt
|fspecial