【问题标题】:Make an weighted histogram using python?使用python制作加权直方图?
【发布时间】:2014-11-11 23:55:55
【问题描述】:

所以我想创建一个加权直方图,因为我有一些像素比其他像素更重要。例如,我想赋予中心区域像素比边界像素更大的权重。

我目前正在使用 opencv cascadeClassifier 检测对象并使用 numpy 生成目标的直方图,但我想赋予中心区域的像素比边界上的其他像素更大的权重。

例如:

def generateHistogram(self,img):
    hist,bins = np.histogram(img.flatten(),256,[0,256])
    self.hist = hist
    #print hist
    return hist

那我该怎么做呢?是叫加权直方图还是有别的名字?

非常感谢!!!

【问题讨论】:

  • 我认为此类事物的更正式名称是应用统计先验。这可能是图像处理中的一项常见任务,它有自己的命名法,但如果你想自己动手,你可以生成一个以图像中心为中心的正态分布,试验方差,并按分布对每个像素进行加权到那时。
  • 在相关说明中,仅循环遍历图像像素怎么样?
  • @a-Jays 嗯,但是像素分布有空间信息吗?重要的是要知道哪个像素位于中心,哪个像素位于边界。
  • 您始终可以使用像素的(x,y) 来做到这一点。我关心的是效率......就像“有没有更好的方法来做到这一点”。

标签: python opencv image-processing computer-vision histogram


【解决方案1】:

当我尝试构建图像梯度相位的加权直方图时遇到了同样的问题:强梯度应该比弱梯度具有成比例的权重。我发现 NumPy 有适合 histogram 函数的标志:

https://docs.scipy.org/doc/numpy/reference/generated/numpy.histogram.html#numpy.histogram

所以我用下面的代码解决了我的问题:

import cv2
import numpy as np

# see tau manifest
TAU = np.pi * 2

# load image
#..

# calculate gradient
gradX = cv2.Scharr(image, ddepth=cv2.CV_32F, dx=1, dy=0)
gradY = cv2.Scharr(image, ddepth=cv2.CV_32F, dx=0, dy=1)

# calculate magnitude and phase
magnitude = cv2.magnitude(gradX, gradY)
phase = cv2.phase(gradX, gradY)

# build weighted histogram of phase
hist, bins = np.histogram(phase, bins=360, range=[0, TAU], weights=magnitude)

【讨论】:

    【解决方案2】:

    如果您只需要一些工作而不用担心方法,我会这样做,首先获取图像的宽度和高度大小。现在你知道中心在哪里,假设它是第 (x, y) 个像素。

    为您想要特殊处理的像素定义阈值 (t) 和权重 (w)。

    这里的复杂性非常低,但取决于图像的大小和您将选择的阈值,它可能并不全是坏事。简而言之,它会是这样的:

    遍历所有距图像中心最多 (t) 个像素的像素 使用权重 normalize(t * w) 修改它们的值

    这里要注意的一点是,您可能希望将结果值标准化为 0-256(如果您使用更多颜色,则更大)以避免溢出错误。

    【讨论】:

      【解决方案3】:

      您希望通过高斯或 Epanechnikov 内核等内核函数运行每个像素,以获得加权颜色分布。这是在平均偏移跟踪中完成的。确切的公式可以在第 7 页找到here

      我不知道 opencv 中的任何函数只处理直方图部分,但您可以参考 scipy.stats.gaussian_kdesklearn.neighbors.kde.KernelDensity 了解更多信息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多