【OpenCV】学习OpenCV3——滤波与卷积(1)

一、边界填充

1.1 为什么要边界填充

  使用opencv进行图像处理,常常会面临对边界的处理问题,例opencv中常用的滤波操作cv.blur、cv.erode、cv.dilate等得到的图像与原图像形状一样,为了得到这种效果需要在原图像周围添加虚拟像素。

1.2 边界填充cv2.copyMakeBorder()

  函数:cv2.copyMakeBorder(src,top, bottom, left, right ,borderType,value)

参数名意义
src原图像
top,bottem,left,right分别表示四个方向上添加的边界的宽度
borderType边界填充类型,既填充的方式
borderType填充类型填充效果
cv2.BORDER_CONSTANT为边界指定一个常量值c进行填充555[abcde]555
cv2. BORDER_WRAP复制对边的像素填充边界edc[abcde] abc
cv2.BORDER_REPLECT复制边缘的像素扩展边界aaa[abcde]eee
cv2.BORDER_REFLECT通过镜像复制扩展边界cba[abcde]edc
cv2.BORDER_REFLECT_101通过镜像复制扩展边界,但边界除外dcb[abcde]dcb

1.3 边界填充cv2.borderInterpolate()

  根据不同的填充方法(borderType),如 BORDER_REPLICATE,计算外插像素对应于原图中的1D坐标,一般不单独使用,而在其他函数内部使用,如在copyMakeBorder中使用

二、阈值化

  图像处理过程中,将高于或低于某一值的像素置为某值(0、maxval)同时其他像素保持不变。

2.1 固定阈值cv2.threshold()

  ret,dst = cv2.threshold(src,thresh,maxval,type)

参数含义
src输入图像
thresh 阈值
maxval最大值,当像素值超过了阈值(或者小于阈值,根据type来决定),所赋予的值
type阈值类型
type阈值类型作用
cv2.THRESH_BINARY二值化操作,超过阈值部分取maxval(最大值),小于阈值部分取0
cv2.THRESH_BINARY_INV二值化取反操作,大于阈值部分取0,小于阈值部分取maxval(最大值)
cv2.THRESH_TRUNC截断操作,大于阈值部分设为阈值,小于阈值部分值不变
cv2.THRESH_TOZERO化零操作,大于阈值部分不变,小于阈值部分取0
cv2.THRESH_TOZERO_INV化零取反操作,大于阈值部分取0,小于阈值部分不变

   cv2.threshold()可以自动决定最优阈值,只需增加cv2.THRESH_OTSU即可。Otsu算法遍历所有可能的阈值,然后对每个阈值结果的两类像素计算方差。

2.2 自适应阈值cv2.adaptiveThreshold()

  这种方法中,阈值在整个过程中自动产生变化。自适应阈值根据图片块区域的值来计算对应区域的阈值,从而得到更为合适的结果。当图像中出现较大的明暗差异时,自适应阈值非常有效。
  dst = cv2.adaptiveThreshold(src, maxval, thresh_type, type, Block Size, C)

参数含义
src输入图像
maxval当像素值超过了阈值(或者小于阈值,根据type来决定),所赋予的值
thresh_type 阈值的计算方法,包含以下2种类型:cv2.ADAPTIVE_THRESH_MEAN_C; cv2.ADAPTIVE_THRESH_GAUSSIAN_C.,两种方法逐像素的计算自适应阈值,方法是通过计算每个像素周围的Block Size*Block Size区域的加权平均值,然后减去常数项C
type阈值操作的类型,与固定阈值 相同包含5种
Block Size阈值计算方法中,图片块的大小
C阈值计算方法中的常数项

二、平滑/模糊

  平滑也称模糊,是一种常用的图像处理操作。平湖的目的有很多,通常是为了减少噪声和伪影,在降低图像分辨率的时候,平滑也是十分重要的。

2.1 均值滤波

  方框型滤波是一种一般化的形式,简单均值滤波是一种特殊化的格式,两者之间的区别主要是前者可以非归一化形式调用,并且输出图像的深度可以控制,而简单均值滤波深度与原图像一致

2.1.1 简单均值滤波cv.blur()

  cv.blur()实现了简单模糊,目标图像中的每个值都是源图像中相应位置一个窗口(结构元素、模板)中像素的平均值

  dst = cv2.blur(src, kernel,anchor=None,borderType=None)

参数含义
src输入图像
kernel 滤波窗口宽度和高度,例(3,3)
anchor=None核与原图像的对齐方式,默认情况下核相对于滤波器居中,既滤波器中心点
borderType=None边界填充的类型

2.1.2 方框型滤波cv.boxFilter()

  dst=cv2.boxFilter(src, ddepth, ksize,anchor=None, normalize=None, borderType=None)

参数含义
src输入图像
ddepth输出图像的深度,-1代表与深度与原图相同
kernel 滤波器窗口宽度和高度,例(3,3)
anchor=None核与原图像的对齐方式,默认情况下核相对于滤波器居中,既滤波器中心点
normalize=None当normalize=True时,与均值滤波结果相同, normalize=False,表示对加和后的结果不进行平均操作
borderType=None边界填充的类型

2.2 中值滤波cv2.medianBlur()

  中值滤波将每个像素替换为围绕这个像素的矩形领域内的中值(中间值)。
  均值滤波对较大孤立的异常值非常敏感,少量具有较大偏差的点也会严重影响到均值滤波。中值滤波可以采取中间点的方式消除异常值。

  dst=cv2.medianBlurr(src, ksize)

参数含义
src输入图像
ksize 滤波器窗口大小,例3,5,7…

2.3 高斯滤波cv2.Guassianblur()

  应该算是最有用的一种滤波器,高斯滤波使用规范化的高斯核滤波,输出目标图像。
  高斯权重sigmaX和sigmaY是基于空间距离计算

                      在这里插入图片描述

  dst=cv2.GaussianBlur(src, ksize, sigmaX, sigmaY=None, borderType=None)

参数含义
src输入图像
ksize滤波器窗口宽度和高度,例(3,3)
sigmaX 高斯核在x方向上的值
sigmaY=None高斯核在y方向上的值,如果只设定了sigmaX值,那么默认x,y的值相等。如果两者都是0那么高斯参数将通过公式确定。
borderType=None边界填充的类型

2.4 双边滤波cv2.cv.bilateralFilter()

  双边滤波对每个像素及其邻域内的像素进行了加权平均,其权重由两部分组成:第一部分如高斯滤波;第二部分是高斯权重,不同的是它不是基于空间距离计算出来的而是基于色彩强度差计算出来的。
  可以把双边滤波当做是高斯平滑,只是相似度更高的像素权值更高,边缘更明显,对比度更高。

  高斯模糊减缓像素在空间上的变化,因此与邻域之间的关系紧密,基于这种特点高斯平滑很好的减弱了噪声,但破坏了边缘信息,最终高斯模糊把边缘也模糊了。

  dst=cv2.bilateralFilter(src, d, sigmaColor, sigmaSpace,borderType=None)

参数含义
src输入图像
d像素邻域的直径
sigmaColor颜色空间滤波器的sigma值,与高斯滤波器的sigma值相似。参数越大,平滑时所包含的强度(色彩)越大,图像的不连续性将会更显著
sigmaSpace坐标空间滤波器的sigma值,调用函数时,设置为-1将自动为图像计算sigmaSpac值
borderType=None边界填充的类型
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值