【python opencv】直方图反投影

【python opencv】直方图反投影,第1张

概述这是由Michael J. Swain和Dana H. Ballard在他们的论文《通过颜色直方图索引》中提出的。 用简单的话说是什么意思?它用于图像分割或在图像中查找感兴趣的对象。简而言之,它创建的

这是由Michael J. Swain和Dana H. Ballard在他们的论文《通过颜色直方图索引》中提出的。

用简单的话说是什么意思?它用于图像分割或在图像中查找感兴趣的对象。简而言之,它创建的图像大小与输入图像相同(但只有一个通道),其中每个像素对应于该像素属于我们物体的概率。用更简单的话来说,与其余部分相比,输出图像将在可能有对象的区域具有更多的白色值。好吧,这是一个直观的解释。(我无法使其更简单)。直方图反投影与camshift算法等配合使用。

我们该怎么做呢?我们创建一个图像的直方图,其中包含我们感兴趣的对象(在我们的示例中是背景等)。对象应尽可能填充图像以获得更好的效果。而且颜色直方图比灰度直方图更可取,因为对象的颜色对比灰度强度是定义对象的好方法。然后,我们将该直方图“反投影”到需要找到对象的测试图像上,换句话说,我们计算出属于背景的每个像素的概率并将其显示出来。在适当的阈值下产生的输出使我们仅获得背景。

Numpy中的算法首先,我们需要计算我们要查找的对象(使其为“ M”)和要搜索的图像(使其为“ I”)的颜色直方图。
#roi是我们需要找到的对象或对象区域roi = cv.imread('梅西_roi.png')cv2_imshow(roi)hsv = cv.cvtcolor(roi,cv.color_BGR2HSV)目标是我们搜索的图像target = cv.imread(梅西.jpg)hsvt = cv.cvtcolor(target,1)"> 使用calcHist查找直方图。也可以使用np.histogram2d完成M = cv.calcHist([hsv],[0,1],None,[180,256],180,256] )I = cv.calcHist([hsvt],256] )
求出比值$R = \frac{M}{I}$。然后反向投影R,即使用R作为调色板,并以每个像素作为其对应的目标概率创建一个新图像。即B(x,y) = R[h(x,y),s(x,y)] 其中h是色调,s是像素在(x,y)的饱和度。之后,应用条件$B(x,y) = min[B(x,1]$。
h,s,v = cv.split(hsvt)R=M/IB = R[h.ravel(),s.ravel()]B = np.minimum(B,1)B = B.reshape(hsvt.shape[:2])
现在对圆盘应用卷积,$B = D \ast B$,其中D是圆盘内核。
disc = cv.getStructuringElement(cv.MORPH_ELliPSE,(5,5))cv.filter2D(B,-1,disc,B)B = np.uint8(B)cv.normalize(B,B,255,cv.norM_MINMAX)
现在最大强度的位置给了我们物体的位置。如果我们期望图像中有一个区域,则对合适的值进行阈值处理将获得不错的结果
ret,thresh = cv.threshold(B,50,255,0) 

原始图像:

roi图像:

处理之后:

OpenCV的反投影

OpenCV提供了一个内建的函数cv.calcBackProject()。它的参数几乎与cv.calchist()函数相同。它的一个参数是直方图,也就是物体的直方图,我们必须找到它。另外,在传递给backproject函数之前,应该对对象直方图进行归一化。它返回概率图像。然后我们用圆盘内核对图像进行卷积并应用阈值。下面是我的代码和结果:

import numpy as np cv2 as cvfrom Google.colab.patches  cv2_imshowroi = cv.imread()hsv = 计算对象的直方图roihist = cv.calcHist([hsv],1)">] ) 直方图归一化并利用反传算法cv.normalize(roihist,roihist,255) 用圆盘进行卷积disc = cv.getStructuringElement(cv.MORPH_ELliPSE,1)">))cv.filter2D(dst,dst) 应用阈值作与 *** 作ret,thresh = cv.threshold(dst,0)thresh = cv.merge((thresh,thresh,thresh))res = cv.bitwise_and(target,thresh)res = np.vstack((target,res))cv2_imshow(res)

结果:

附加资源"Indexing via color histograms",Swain,Michael J.,Third international conference on computer vision,1990.

参考:

http://woshicver.com/FifthSection/4_10_4_%E7%9B%B4%E6%96%B9%E5%9B%BE-4%EF%BC%9A%E7%9B%B4%E6%96%B9%E5%9B%BE%E5%8F%8D%E6%8A%95%E5%BD%B1/

总结

以上是内存溢出为你收集整理的【python opencv】直方图反投影全部内容,希望文章能够帮你解决【python opencv】直方图反投影所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1190026.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存