【问题标题】:Matching a Source image to a destination image in python将源图像与python中的目标图像匹配
【发布时间】:2016-05-14 14:31:23
【问题描述】:

好的,伙计们,我一直在尝试为两个图像创建直方图匹配;模板图像和目标图像(目标意味着我想要匹配模板图像的图像)。我没有显示匹配的图像,而是得到一个空白图像。我觉得我对此感到筋疲力尽,因此我来到SO。有人可以指导我正确的方向吗?

任何正确方向的帮助将不胜感激。

def matching(template, target, numberOfBins=256):

    templateHist, bins1 = np.histogram(template.flatten(), numberOfBins, density = False)
    targetHist, bins2 = np.histogram(target.flatten(), numberOfBins, density = False)
    cdfTemplate = templateHist.cumsum() #Cumulative distributed function
    cdfTemplate = (255 * cdfTemplate / cdfTemplate[-1]) #normalize
    cdfTarget = targetHist.cumsum()
    cdfTarget = (255 * cdfTarget / cdfTarget[-1]).astype(np.float64)
    im2 = np.interp(template.flatten(), cdfTemplate, bins1[:-1])
    im3 = np.interp(im2, cdfTarget, bins2[:-1])
    result = im3.reshape((template.shape))

    return result

【问题讨论】:

  • 表示 cdfTemplate[-1] 返回 0。
  • 错误信息告诉你cdfTemplate[-1]等于0,这导致cdfTemplate中的所有元素都变成了NaN。这意味着templateHist 的总和也必须为 0。很难解释为什么会这样,因为它由直方图 bin 计数组成,并且直方图 bin 边缘的自动选择应该确保至少一个 bin包含非零计数。 templatetarget 是什么?我猜它们是屏蔽数组?
  • 我能想到的唯一能让你得到全零 bin 计数的方法是,如果你将一个空数组传递给 np.histogram
  • 它将一个空数组传入 np.histogram。我读到的每一篇关于直方图匹配的文章都给了我类似的功能和设计。

标签: python numpy histogram


【解决方案1】:
  • 错误消息告诉您cdfTemplate[-1] 等于零,这导致cdfTemplate 中的所有元素都变为NaN。
  • 向后推算,这意味着templateHist 的总和也必须为零。
  • templateHist 包含从 template.flatten() 计算的 bin 计数。由于您没有为np.histogram 指定一组权重,因此templateHist 中的任何元素都不可能为负数。因此templateHist 必须全为零。
  • 您还将一个正整数作为bins 参数传递给np.histogram,但您尚未指定range 参数。因此,如果template 包含任何 个值,那么np.histogram 应自动选择一组 bin 边缘,以便至少有一个计数为正数。
  • 如果 template 包含 NaN 或无限值,您应该得到一个 ValueError 而不是一个全零 bin 计数的向量。
  • 因此合乎逻辑的结论是template 必须是一个空数组。

【讨论】:

  • 当你说我没有指定范围参数时,我有点失落。能不能说的清楚一点。
  • np.histogram 接受 range 参数,该参数可用于指定 bin 边缘范围的 (lower, upper) 限制。原则上,您可以得到全零的 bin 计数,因为您传递了两个数字,使得 template 中的所有值都超出了此范围,但您没有。
  • 你说得对。我正在调试我的代码,发现我的 hist 函数 中的第一条第二条语句一执行,结果 == 0。
  • 好的,@ali_m,你能指导我选择我的范围吗?我尝试关注 [docs.scipy.org/doc/numpy-dev/reference/generated/…,但我仍然有点不清楚。
猜你喜欢
  • 2014-10-01
  • 2016-03-21
  • 1970-01-01
  • 1970-01-01
  • 2018-02-03
  • 2019-07-20
  • 1970-01-01
  • 2013-11-13
  • 2014-01-06
相关资源
最近更新 更多