【问题标题】:Sum of the intensity values of all pixels in image segment图像段中所有像素的强度值之和
【发布时间】:2019-10-22 09:39:34
【问题描述】:

根据下面显示的公式,我需要通过将段中的强度值之和除以段中的像素数来计算平均阈值。

其中 Xi' 是二进制掩码 (structure_mask),|Xi'|是多个 (xi_modulus)。 I(x,y) 是像素强度。

img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
...
...
structure_mask = np.logical_and(magnitude_mask, intensity_mask).astype(np.uint8)
xi_modulus = np.count_nonzero(structure_mask.all(axis=2))
intensity_sum  # = ??

如何计算与numpy的强度总和?

已编辑:根据@HansHirse 的回答,我尝试执行以下操作:

thresh_val = np.mean(img_gray[structure_mask])

我有IndexError: too many indices for array

structure_mask 的形状为 (1066, 1600,1)img_gray - (1066,1600)

更新:只是一个愚蠢的错误。形状不匹配已通过适当的索引修复

structure_mask = np.logical_and(magnitude_mask, intensity_mask)[:, :, 0]

【问题讨论】:

  • 使用np.squeeze(structure_mask) 去掉额外的维度。

标签: python image numpy math image-processing


【解决方案1】:

使用 NumPy 的boolean array indexing,您可以轻松访问所需的值。您只需要注意,您的 mask(或片段)属于 NumPy 的 bool_ 类型。

让我们看看这个短代码 sn-p,我将在其中比较从 np.mean 获得的平均值与由给定公式明确计算的平均值:

import cv2
import numpy as np

# Some artificial image
img = np.uint8(255 * np.tile(np.linspace(1, 0, 400), (400, 1)))
cv2.imshow('img', img)

# Some mask (or segment)
mask = np.zeros((400, 400), np.uint8)
mask[10:390, 10:30] = 255
cv2.imshow('mask', mask)

# Convert mask to bool_ type
mask = np.bool_(mask)

# Calculate mean by NumPy's mean
mean = np.mean(img[mask])
print('mean by np.mean:\n', mean)

# Calculate mean explicitly by given formula
mean = np.sum(img[mask]) / np.count_nonzero(mask)
print('mean by formula:\n', mean)

cv2.waitKey(0)
cv2.destroyAllWindows()

输出(此处省略图片):

mean by np.mean:
 242.05
mean by formula:
 242.05

希望有帮助!

【讨论】:

  • 我应该接受您的回答,但由于形状不匹配而出现错误。我已经为您更新了问题,请查看
  • 1) 使用np.squeeze(structure_mask) 去掉额外的维度。 2) 我编辑了我的答案并设置了一个uint8 图片 - 很抱歉造成混淆。
  • 是的,我已经通过切片 structure_mask 解决了这个问题,效果与 np.squeeze() 相同
【解决方案2】:

numpy 支持逻辑索引所以

magnitude_mask[intensity_mask].mean()

会给你你想要的。

如果你坚持使用 sum

magnitude_mask[intensity_mask].sum()

【讨论】:

    猜你喜欢
    • 2016-07-02
    • 1970-01-01
    • 1970-01-01
    • 2017-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-19
    • 1970-01-01
    相关资源
    最近更新 更多