我可以在 python 中平衡非常明亮的画面吗?这张照片是数千张图片拼接在一起形成的全景图

Can I balance an extremely bright picture in python? This picture is a result of thousands of pictures stitched together to form a panorama

我的目标是将 1-2 千张图像拼接在一起。我找到所有图像中的关键点,然后找到它们之间的匹配项。接下来,我找到两个图像之间的单应性。我还考虑了当前的单应性和所有以前的单应性。最后,我根据组合单应性对图像进行变形。 (我的代码是python2.7写的)

我面临的问题是,当我叠加扭曲的图像时,它们变得非常亮。原因是连续两张图片之间的大部分区域是common/overalapping。所以,当我覆盖它们时,公共区域的强度增加了 2 倍,并且随着越来越多的图像被覆盖,moew 明亮的值变得,最终我得到一个矩阵,其中所有像素的值为 255.

我可以在每次叠加图像后调整亮度吗?

我是 combining/overlaying 通过名为 cv.addWeighted()
的打开 cv 函数的图像 dst = cv.addWeighted( src1, alpha, src2, beta, gamma)

在这里,我取 alpha 和 beta = 1

dst = cv.addWeighted( image1, 1, image2, 1, 0)

我也试过降低 alpha 和 beta 的值,但问题来了,当大约 100 张图像被叠加时,第一张开始消失,可能是因为这些图像的强度在乘以 0.5 后变为零在每次迭代中。该函数如下所示。在这里,我还将伽玛设置为 5:
dst = cv.addWeighted( image1, 0.5, image2, 0.5, 5)

谁能帮我解决图像变得非常亮(当 aplha = beta = 1 时)或图像在某个点后消失(当 alpha 和 beta 都在 0.5 左右时)的问题。

这是我叠加图像的代码:

       for i in range(0, len(allWarpedImages)):
          for j in range(1, len(allWarpedImages[i])):
             allWarpedImages[i][0] = cv2.addWeighted(allWarpedImages[i][0], 1, allWarpedImages[i][j], 1, 0)
          images.append(allWarpedImages[i][0])

    cv2.imwrite('/root/Desktop/thesis' + 'final.png', images[0])

拼接两张图片时,重叠部分的像素值不只是相加。理想情况下,两个匹配像素应具有相同的值(第一张图像中的一个点在第二张图像中也应具有相同的值),因此您只需保留一个值即可。

实际上,两个匹配像素的像素值可能略有不同,您可以简单地将它们取平均。更好的是,您可以在拼接之前调整它们的曝光级别以相互匹配。

对于要拼接在一起的许多图像,您需要调整它们的所有曝光级别以匹配。均衡他们的曝光水平是一个比较大的话题,如果你还不熟悉,请阅读“直方图均衡”。

此外,很可能在这么多图像之间存在高对比度,因此您可能需要将拼接图像设为 HDR(高动态范围)图像,以防止像素值 overflow/underflow。