图像背景去除在图像处理中的主要作用是去除图像的多余部分,这样既可以减少数据的计算量,加快处理速度,又可以减少多余部分对一部分视觉算法的干扰(比如边缘提取、像素提取等)。
图像轮廓提取在图像处理中的主要作用在于获得一个指定轮廓的特征,这个特征可以用于后续处理的产品检测、位置定位等的需要(比如,提取产品商标的轮廓后,可将其用于之后对外包装的检测或者定位于商标位置附近的其他部分的检测)。
这两个概念在形态学上是经常用到的,也经常被结合起来使用,用来判断特征物块等。
4.4.5.1 特征物块
特征物块,也叫作目标或相互关联的元素,是指在一幅图中相似像素组成的一块区域。特征物块可以是一大块棕色的区域,它可能在宠物寻找食物的视觉中被描述成食物;也可能是一大块有金属光泽的像素,可能在探测门的时候被描述为门把手;也可以是一大块白色像素,可能在药瓶检测中被描述为瓶子。BLOB在机器视觉中非常有价值,因为很多实物都可以被描述为一块被包含在背景中的具有特征颜色的区域或阴影。
如果找到了特征物块,那么可以完成以下功能:
(1)能知道这个特征物块包括了多少个像素。
(2)可以测量这个特征物块的宽度和高度尺寸。
(3)可以找到这个特征物块的中心位置或者质点。
(4)可以计算出与之类似的特征物块的个数。
(5)可以知道这个特征物块的颜色。
(6)可以计算出这个特征物块旋转的角度。
4.4.5.2 特征物块检测
简单说明一下,findBlobs()函数可以检测颜色为浅色的物体对象。如果没有指定参数,函数会尝试自动检测什么是亮色,什么是暗色。下面的例子是查找硬币,如图4.4.19所示:
from Simple CV import Image
pennies = Image("pennies.png")
bin Pen = pennies.binarize() ①
blobs = bin Pen.find Blobs() ②
blobs.show(width=5)③
① 图片可以先进行二值化操作,二值化操作过的图片更容易找出特征物体,但是也不是绝对的,这个由图片的特性决定。
② 由于没有传递参数到findBlobs()函数,它返回的图像FeatureSetof为连续浅色区域。
③ 请注意,show()函数调用的是特征物块,而不是整个图像。show()函数是一个特征物块的一个类方法。它的每个功能在原始图像的特征物块上面体现,然后显示结果。在默认情况下,它绘制的颜色和宽度的参数是线,颜色为绿色。也可以设置其他颜色,例如,用红色来代表捕获到的特征颜色,用户可以改变上面的代码“packs.show(Color.RED)”。
图4.4.19 左图为硬币的原始图,右图为特征物块的检测
现在检测到硬币用绿色表示,如图4.4.19所示。特征物块被发现了,那么在这个发现的特征物块上还有几个函数供使用,例如其大小、位置和方向,下面演示一下:
from Simple CV import Image
pennies = Image("pennies.png")
bin Pen = pennies.binarize()
blobs = bin Pen.find Blobs()
# 返回特征物块的面积值
print "Areas: ", blobs.area()
# 返回特征物块的角度值
print "Angles: ", blobs.angle()
# 返回特征物块的坐标值
print "Centers: ", blobs.coordinates()
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。