深度学习(十)-图像梯度处理

图像梯度

图像梯度计算的是图像变化的速度。对于图像的边缘部分,其灰度值变化较大,梯度值也较大;相反,对于图像中比较平滑的部分,其灰度值变化较小,相应的梯度值也较小。一般情况下,图像梯度计算的是图像的边缘信息。

模板运算

模板(滤波器)是一个尺寸为n*n的小图像W(n一般取奇数,称为模板尺寸),每个位置上的值w被称为权重。在进行计算时,将模板的中心和像素P对齐,选取原始图像中和模板相同范围的邻域N的像素值作为输入。
  • 模板卷积的计算是将对齐后的对应位置像素相乘,再进行累加作为像素P位置的输出值。记原始图像的像素灰度值为s, 计算后的值为d, 则P点的输出值

  • 模板排序的计算时将邻域N的像素值进行排序,选择特定次序的灰度值,作为像素P位置的输出值,如最大值、最小值、中位数等

均值滤波

均值滤波指模板权重都为1的滤波器。它将像素的邻域平均值作为输出结果,均值滤波可以起到图像平滑的效果,可以去除噪声,但随着模板尺寸的增加图像会变得更为模糊。经常被作为模糊化使用。

高斯滤波

为了减少模板尺寸增加对图像的模糊化,可以使用高斯滤波器,高斯滤波的模板根据高斯分布来确定模板系数,接近中心的权重比边缘的大。5的高斯滤波器如下所示:

中值滤波

中值滤波属于模板排序运算的滤波器。中值滤波器将邻域内像素排序后的中位数值输出代替原像素值。它在实现降噪操作的同时,保留了原始图像的锐度,不会修改原始图像的灰度值。
中值滤波的使用非常普遍,它对椒盐噪声的抑制效果很好,在抑制随机噪声的同时能有效保护边缘少受模糊。但中值滤波是一种非线性变化,它可能会破坏图像中线性关系,对于点、线等细节较多的图像和高精度的图像处理任务中并不太合适。

 

边沿检测

通过梯度计算可以获取图像中细节的边缘。为在锐化边缘的同时减少噪声的影响,通过改进梯度法发展出了不同的边缘检测算子:
一阶梯度:Prewitt梯度算子、Sobel梯度算子
二阶梯度:Laplacian梯度算子。

锐化

图像锐化与图像平滑是相反的操作,锐化是通过增强高频分量来减少图像中的模糊,增强图像细节边缘和轮廓,增强灰度反差,便于后期对目标的识别和处理。锐化处理在增强图像边缘的同时也增加了图像的噪声。
将求取的边缘按照一定系数比例叠加到原始图像上,即可实现对图像的锐化操作。例如使用Laplacian梯度算子进行锐化操作的模板,其中A是大于等于1的系数:

 代码实现

import cv2
import numpy as np

def meanblur(img):
    #均值滤波
    mean = cv2.blur(img,(3,3))
    cv2.imshow('meanblur',mean)

def medianblur(img):
    #中值滤波
    im_median_blur = cv2.medianBlur(img, 5)
    cv2.imshow('median_blur', im_median_blur)


def gaussian_blur(img):
# 高斯滤波
# 第三个参数为高斯核在X方向的标准差
    im_gaussian_blur = cv2.GaussianBlur(img, (5, 5), 3)
    cv2.imshow("gaussian_blur", im_gaussian_blur)

def blurbyself(img):
    #自己设置算子进行滤波
    filter_w = np.ones(shape = (5,5),dtype = np.float32)/25
    img_filter = cv2.filter2D(img,-1,filter_w)
    cv2.imshow('img_filter',img_filter)

def filter(img):
    #锐化,构建锐化算子
    filter_w = np.array([[0,-1,0],
                        [-1,4,-1],
                        [0,-1,0]],dtype = np.float32)
    img_filter = cv2.filter2D(img,-1,filter_w)
    cv2.imshow('filter',img_filter)

if __name__ == '__main__':
    img = cv2.imread('../data/salt.jpg')
    meanblur(img)
    medianblur(img)
    gaussian_blur(img)
    blurbyself(img)
    filter(img)
    cv2.waitKey()
    cv2.destroyAllWindows()

图像轮廓

图像轮廓

边缘检测虽然能够检测出边缘,但边缘是不连续的,检测到的边缘并不是一个整体。图像轮廓是指将边缘连接起来形成的一个整体,用于后续的计算。
图像轮廓是图像中非常重要的一个特征信息,通过对图像轮廓的操作,我们能够获取目标图像的大小、位置、方向等信息。
图像轮廓操作包括:查找轮廓、绘制轮廓、轮廓拟合等

查找和绘制轮廓

一个轮廓对应着一系列的点,这些点以某种方式表示图像中的一条曲线,将这些点绘制成不同样式的线条,就是轮廓查找与绘制
 

轮廓拟合

在计算轮廓时,可能并不需要实际的轮廓,而仅需要一个接近于轮廓的近似多边形,绘制这个近似多边形称之为轮廓拟合

 

  • 21
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值