基于python的opencv图像处理小总结(含索贝尔算子,分水岭算法,图像匹配)

本周的主要还是总结图像处理的基本或进阶算法原理,具体有图像梯度,Canny边缘检测,反向投影,模板匹配,霍夫变换,分水岭算法图像分割等原理及应用,收获很大。
图像梯度本质上来说就是求导,在opencv中提供了三种不同的梯度滤波器,有Sobel算子,scharr算子跟Laplacian算子。sobel算子是一阶算子,可以设定求导的方向(沿x或y轴),这个在求取边缘上就有很大的应用了,在人的视觉中能很容易感觉得出”哇,这个边缘好明显哦”,但是在计算机视觉里面却没有像我们人一样拥有这种主观意识上的分析(可能人之所以能看出边缘也是经过大脑通过大量学习然后自动根据某种机制分析出来的结果,转换到计算机世界中就变成了深度学习的理论依据?),所以我们要根据图像上’’特征’’来让计算机识别出边缘,这当然离不开数学的手段了,很多问题归根到底都是数学问题。在图像中边缘之所以是边缘,是因为在图像的边缘其像素值发生了突变,从感官上也很好理解,边缘»边缘处色彩差异»像素值差异,所以为了更好处理,通常把图像映射到灰度图像区域,即根据灰度值的变化就可以来识别哪儿是“边缘”。sobel算子就是干这个事的工具,如求x方向的梯度,就能够很好的把y轴反向的边缘给“逼近”出来,原理上很清晰,因为梯度本质就是求导嘛,碰到边缘即边缘处存在峰值,应用导数就能很好的找出来峰值区域(即边缘)咯。具体效果如下:
基于python的opencv图像处理小总结(含索贝尔算子,分水岭算法,图像匹配)_第1张图片
一个很经典的实例,图片从左至右分别为原始图,对x轴方向用sobel算子;对y轴方向用;xy轴方向的图像融合。可以看到对x,y轴方向单独运用sobel可以求出单个方向上的边缘,如实际应用中这可以用来找出液面的边缘等,而两者融合则能很好描绘出整个图像的轮廓,这又是一个重要的应用的方向,当然要得到好的结果其中的参数设定需要有些考究。
(啊啊啊怎么才写了一点内容就花了内么长的篇幅…可是我就是忍不住…,其它算子就不说啦,为了节约时间其他内容上图看看就好…)
霍夫变换应用也很广,比如可以用来找到圆,需要注意的就是cv.HoughCircles()里的参数param2值越大就能检测到更完美的圆形,当然就是说要求结果就是越苛刻了。

基于python的opencv图像处理小总结(含索贝尔算子,分水岭算法,图像匹配)_第2张图片
模板匹配可在一幅图像中寻找查找目标,原理为运用模板图像在大图上滑动,并在每一个位置对模板图像和其所在位置的子区域进行比较。如我可用来寻找超级玛丽里面的小黄豆~

基于python的opencv图像处理小总结(含索贝尔算子,分水岭算法,图像匹配)_第3张图片
Canny边缘检测的底层原理其实也是根据上面图像梯度的概念,只不过考虑得更为“周到”一些,通俗点的过程为先滤波求图像梯度,再过滤非最大(因为边缘的综合梯度肯定是最大值),最后还要使用上下阈值来选定边缘。
具体效果是这样的:

基于python的opencv图像处理小总结(含索贝尔算子,分水岭算法,图像匹配)_第4张图片
老胡真帅,曾经是我的青春嗷~
重头戏来啦,关于分水岭算法,引用别人很经典的一段话:“任何一副灰度图像都可以被看成拓扑平面,灰度值高的区域可以被看成是山峰,灰度值低的区域可以被看成是山谷。我们向每一个山谷中灌不同颜色的水。随着水的位的升高,不同山谷的水就会相遇汇合,为了防止不同山谷的水汇合,我们需要在水汇合的地方构建起堤坝。不停的灌水,不停的构建堤坝知道所有的山峰都被水淹没。我们构建好的堤坝就是对图像的分割。这就是分水岭算法的背后哲理。”本来刚开始看的时候挺懵的(想着这是啥呀?他这是在说句谁也听不懂的话装高手吗?我鄙视他…)。然后看了别人的代码好一会,再结合之前学过的知识,哇不禁拍案叫绝,先人的智慧真的是高高高高!
上面只是分水岭算法的基本原理,但实际上由于图像上存在噪声或者有不规律的因素,直接应用上面的算法原理很容易造成过度分割的情况,所以在opencv中采用另一种叫掩摸分水岭算法。在这种算法中我们要设置哪些山谷点会汇合,哪些不会。这是一种交互式的图像分割。我们要做的就是给我们已知的对象打上不同的标签。如果某个区域肯定是前景或对象,就使用某个颜色(或灰度值)标签标记它。
如果某个区域肯定不是对象而是背景就使用另外一个颜色标签标记。而剩下的不能确定是前景还是背景的区域就用 0 标记。这就是我们的标签。然后实施分水岭算法。每一次灌水,我们的标签就会被更新,当两个不同颜色的标签相遇时就构建堤坝,直到将所有山峰淹没,
最后我们得到的边界对象(堤坝)的值为 -1。
呃看起来有点别扭,总结起来的步骤就是::输入图像–(去噪声)–二值化–距离变换–寻找种子–生成markers–分水岭变换–输出图像。

基于python的opencv图像处理小总结(含索贝尔算子,分水岭算法,图像匹配)_第5张图片
具体效果是这样的,其它图片是算法过程中产生的图片,为了好理解我全都显示出来啦~

你可能感兴趣的:(图像处理)