【计算机视觉(三)】形态学处理

前情提要

上期我们提到了一个做抠车牌的案例,得到了一幅这样的图。

mask.jpg

但我们需要做进一步的细处理,让我们得到比较好的白色的车牌区域掩码。

本期内容

本期就是要处理这个问题,先来仔细分析这个问题。我们想要得到的区域是“辽H....”这一块白色的区域,这个区域有什么特点呢?第一、连贯,不像其他地方很多小小的白点;第二、整个区域近似一个矩形,不像车窗前那些区域,虽然连贯,但是形状比较蛇皮。这两个特点可以作为筛选的突破口,我们将介绍一些手段能够根据这些特点进行处理。

一、腐蚀膨胀

腐蚀顾名思义,是把每一个白色区域都往内缩,有些小的噪点就会缩没了。膨胀则相反。可以看看这里的图感受一下。腐蚀的原理是:对于一个点,观察它的周围(邻域)的像素点哪个值最小,就把当前点的值替换成最小值;膨胀则替换成最大值。

腐蚀膨胀原理

比如当前要处理的点是P点,邻域大小是3x3,也就是我们要看看P点周围的8个点和它本身,共9个点,如果是腐蚀操作则把P点的值换成最小值,P点周围有黑色的点,值为0,则P点会变成黑色;如果是膨胀操作P点不发生改变。

对于车牌的掩码图上的噪声,我们就可以用腐蚀操作去掉一些,但车牌区域也会受到影响,所以腐蚀完以后还要膨胀回去,但是噪声已经消失了,所以噪声不会被膨胀回来。先腐蚀后膨胀,这个叫开运算,如果是先膨胀再腐蚀就叫闭运算,是用来填充白色区域内的黑洞的。下面是这个操作的代码。

# 腐蚀
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))  # 矩形结构
mask = cv2.erode(mask, kernel)

 # 膨胀
mask = cv2.dilate(mask, kernel)

kernel是一个3x3的矩阵,值全为1,这个叫矩形核,cv2.getStructuringElement的第一个参数正是指定用哪种形状的核,除了矩形核,还有十字架核cv2.MORPH_CROSS和椭圆核cv2.MORPH_ELLIPSE。

效果如下:


矩形开运算

3x3的十字架核是这样的:


十字架核

不同形状的核的区别是:腐蚀膨胀的最小最大值是从核的值为1的地方找的,值为0的地方则不理会。

二、滤波

滤波是信号处理中减少噪声的方法,图像滤波的方法有很多种:中值滤波、高斯滤波、均值滤波等等,不一而足。
个人常用的是中值滤波,下面介绍这个。
中值是中位数,有序数列中位于中间位置的值,比如[1,2,3,3,6]里的中位数就是3。跟腐蚀膨胀类似,我们的处理也是基于一个核,对于每个像素的处理都是把这个核的中心挪到这个像素的位置再进行处理,这是图像处理中很常见的操作,叫图像卷积

中值滤波

对于一个3x3的图,中间有一个白色噪点的情况,使用中值滤波则会把这个白点涂黑,从而达到去除噪声的目的。下面是一个示例代码:

mask = cv2.medianBlur(mask, 7)

用7x7的核对图像做中值滤波,效果如下:


中值滤波效果

其他类型的滤波器基本上只是核里面填充的值不一样,对图像卷积后就产生了不同的作用,如索贝尔算子卷积后能得到图像的梯度。这些滤波器的值都是经过了人为设计,而近几年很火的深度学习技术中有一种卷积神经网络(CNN),它的原理就是各种滤波器的叠加,这些滤波器的值是靠它自己根据训练数据学习后自己填充的。

PS: 经朋友问到,核的大小可以是偶数吗? 建议,最好不要用偶数的核大小,因为中间点不知道在哪,是个浮点的位置,可能会让它四舍五入,也可能会插值,我也搞不清 ,大家可以自己试一下。

算法加速

图像卷积操作的耗时与核的大小成正相关,假如图像大小是NxN,核大小是KxK,则时间复杂度接近O(N*N*K*K)。

我了解到在用十字架核对图像做膨胀操作时有一种快速的方法,复杂度是O(N*N)。具体请参考这里。大概原理是先求每一个点离最近的白色点的曼哈顿距离,然后再遍历一次存放距离的图,把小于K的地方都设为白色。我在MacBook Pro的i5-5257U CPU上测试了11x11的十字架核在640x360的图上用OpenCV处理的用时是20-30ms,但使用上面的方法用时与核大小无关,用时稳定在2-3ms。

对于有些滤波器还可以采用一种叫可分离卷积的方法加速。数学上的原理可以参考维基,本质是利用了线性操作的结合性,卷积是线性操作,矩阵乘法也是,因此可以把某些可拆分成两个向量相乘的滤波器从原来的直接卷积变成两个向量分别卷积。以下是索贝尔算子求x方向梯度拆分的样子。

可分离卷积

复杂度从O(N*N*K*K)变成O(N*N*K)。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容