openCV显著性检测
山居秋暝LS 人气:01. 概念
显著性检测,就是使用图像处理技术和计算机视觉算法来定位图片中最“显著”的区域。显著区域就是指图片中引人注目的区域或比较重要的区域,例如人眼在观看一幅图片时会首先关注的区域。例如下图,我们人眼一眼看过去首先注意到的不是草坪,而是躺在草坪上的内马尔,内马尔所在的区域就是显著性区域。这种自动定位图像或场景重要区域的过程称为显着性检测。显著性检测在目标检测、机器人领域有很多应用。
在OpenCV的saliency模块中有三种显著性检测算法:
- Static saliency:此类显着性检测算法依赖于图像特征和统计信息来定位图像中显著性区域。
- Motion saliency: 此类显着性检测算法输入为视频或一系列连续帧。运动显着性算法处理这些连续的帧,并跟踪帧中“移动”的对象。这些移动的对象被认为是显着性区域。
- Objectness:这类显著性检测算法计算出一个个的建议区域(proposals),这些建议区域被认为是目标可能存在的区域。
OpenCV提供类4种显著性检测算法的实现:
- cv2.saliency.ObjectnessBING_create()
- cv2.saliency.StaticSaliencySpectralResidual_create()
- cv2.saliency.StaticSaliencyFineGrained_create()
- cv2.saliency.MotionSaliencyBinWangApr2014_create()
2 静态显著性检测
static_saliency.py使用两种Static saliency算法:cv2.saliency.StaticSaliencySpectralResidual_create()和cv2.saliency.StaticSaliencyFineGrained_create()。使用computeSaliency()计算图片的显著性区域,返回结果是和输入图片一样大小的矩阵,每个像素位置的取值[0,1],值越大表示该像素位置越显著。最后我将返回显著性矩阵可视化出来。
3 代码
''' 2 图像凸显 ''' import cv2 import matplotlib.pyplot as plt # 1 read img = cv2.imread('luna.png',1) img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB) # 2 StaticSaliencySpectralResidual_create() Residual = cv2.saliency.StaticSaliencySpectralResidual_create() _,img_Residual = Residual.computeSaliency(img) img_Residual = (img_Residual * 255).astype("uint8") # 3 saliency.StaticSaliencyFineGrained_create() Grained = cv2.saliency.StaticSaliencyFineGrained_create() _,img_Grained = Grained.computeSaliency(img) img_Grained = (img_Grained*255).astype('uint8') thre = cv2.threshold(img_Grained, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1] # 4 show plt.subplot(221) plt.imshow(img) plt.title('img') plt.subplot(222) plt.imshow(img_Residual) plt.title('img_Residual') # plt.subplot(223) plt.imshow(img_Grained) plt.title('img_Grained') plt.subplot(224) plt.imshow(thre) plt.title('thre') plt.show()
加载全部内容