为什么在计算灰度图像的平均值时会出现杂散像素?

Why there are stray pixels in computing the average of grayscale images?

我正在计算随附的三张灰度图像的平均值。 image1Each 图像的大小为 256 x 256。平均后,我在平均输出中得到几个杂散像素。下面给出的是我用来生成平均图像的代码。

import cv2
img1 = 'image1.png'
img2 = 'image2.png'
img3 = 'image3.png'

img_1 = cv2.imread(img1).astype("float32")
img_2 = cv2.imread(img2).astype("float32")
img_3 = cv2.imread(img3).astype("float32")

# averaging
result = 255*((img_1 + img_2 + img_3)/3)
result1 = result.clip(0, 255).astype("uint8")    
cv2.imwrite('avg.png', result1)

吉菲有答案。如果你打印了你正在阅读的数组,你会意识到这些数组已经 运行 从 0 到 255。你假设它们 运行 从 0 到 1。如果你删除 255*, 你会得到你期望的结果。

也就是说,至少您的某些图像在底部区域确实有杂散像素。任何图像中的像素值为 1(满分 255)将导致最终平均值为 85。

跟进

好的,我现在假设您真正想要的是这三个图像的 UNION,而不是 AVERAGE。如果是这样,这样做就可以了:

import cv2
img1 = 'x1.png'
img2 = 'x2.png'
img3 = 'x3.png'

img_1 = cv2.imread(img1) > 1
img_2 = cv2.imread(img2) > 1
img_3 = cv2.imread(img3) > 1

result = ((img_1 | img_2 | img_3) * 255).astype("uint8")
cv2.imwrite('avg.png', result)

因此,img_x将包含图像像素值大于1的True。True和False在算术计算中表现为1和0。

如果将 > 1 更改为 > 0,您将看到原始图像中的所有 non-zero 像素,这会在底部显示散乱的斑点。