OK,这学期所有的考试总算都结束了,可以专心学习自己的研究方向啦,今天在对上一周零散学习的知识做个总结!
上一周通过视频和自己找的相关资料主要学习了阈值分割、图像梯度和边缘检测三个部分。
一:阈值分割
这一部分主要学了最简单的二值化分割、大津算法还有自适应阈值分割。
(1)二值化分割
这个就比较简单了,可以理解为预先认为设置一个阈值,然后遍历每一个像素,对于超过和低于阈值的像素分别采取不同的处理方式,使其成为背景或者前景,公式如:
或者
对于提前设定阈值这样最简单的二值分割,opencv里有现成的cv2.threshold函数,可以直接调用
cv2.threshold (src, thresh, maxval, type)
从函数的构成不难看出,函数需要四个输入参数。
src:输入图像,要求是灰度图
thresh:设定的阈值,范围0~255
maxval:填充色,范围0~255
type:阈值类型
这一部分可以参考链接:(16条消息) opencv: 阈值处理(cv2.threshold) 探究(图示+源码)_JNing-CSDN博客_opencv threshold源码
(2)大津算法
上一个方法很简单,但每次都要根据不同的图片设定不同的阈值来达到预期的效果,这本身是一个繁琐的事情,基于此,日本学者大津展之提出大津法,也叫最大类间方差法,大津法能够对每一幅图像自动算出阈值,从而进行阈值分割,具体原理可以参考:
(15条消息) OTSU算法(大津法—最大类间方差法)原理及实现_小武的博客-CSDN博客_大津法
记得之前本科学图像处理课程的时候,老师带我们学习过这个算法,当时我们是根据原理一步步写代码来实现的,在opencv里就很方便了,这里已经集成了这个算法,只要调用之前提到的 cv2.threshold函数便可以实现 。
(3)自适应阈值分割
前面提到的两种方法,都是全局阈值法,对于一些光照不均匀的图像,它们的效果往往不好,比如:
这时候就需要运用自适应阈值分割法,这个方法可以理解为,在每一个小区域内都计算出一个阈值,在进行阈值分割,对于图像的不同区域,计算出不同的阈值,因此叫做自适应阈值分割法。
这种方法就可以很好的解决照明的问题。
处理效果如图所示:
二:图像梯度
图像梯度可以用梯度来检测图像的边缘,从而确定轮廓,同时梯度也是 HOG和SIFT的基础
图像梯度是指图像某像素在x和y两个方向上的变化率(与相邻像素比较),是一个二维向量,由2个分量组成,X轴的变化、Y轴的变化 。当然,如果想追求精确,也可以增加斜方向。
具体的参数以及定义可以参考链接:
图像梯度(Image Gradient)概念和求解 (icode9.com)
opencv里给我们提供了cv2.Sobel,cv2.Scharr两种计算梯度的函数,求解梯度也为下一步边缘检测提供便利。
三:边缘检测
作为图像处理的基本功之一,边缘检测非常重要,一般来说边缘检测的代名词就是Canny边缘检测,Canny边缘检测过程可分为四步:
(1)对图像进行高斯平滑,减少噪声
(2)计算图像梯度gX,gY
(3)应用非最大值抑制保留指向梯度方向的梯度幅度像素的局部最大值
(4)定义和应用滞后阈值
在opencv中也是很方便的提供了集成函数:cv2.Canny,直接调用即可
总的来说进度还是有点慢了,这段时间趁着空闲下来的日子,要好好追回来啦~