numpy 颜色问题与对数变换,以照亮黑暗的地区,为什么和如何解决?

7lrncoxx  于 2022-11-23  发布在  其他
关注(0)|答案(1)|浏览(130)

因此,我尝试通过应用对数变换来增强这张图像original image有明亮的白色的区域变成了增强图像上的蓝色。enhanced image

path = '...JPG'
image = cv2.imread(path)
c = 255 / np.log(1 + np.max(image))    
log_image = c * (np.log(image + 1))

# Specify the data type so that
# float value will be converted to int
log_image = np.array(log_image, dtype = np.uint8)
cv2.imwrite('img.JPG', log_image)

还有一个警告:运行时警告:日志中遇到被零除
我尝试使用其他类型的日志(例如log2、log10...),但仍然显示相同的结果。我尝试更改dtype = np.uint32,但导致错误。

mbzjlibv

mbzjlibv1#

两个问题的原因相同
也就是这条线

log_image = c * (np.log(image + 1))

image+1np.uint8的数组,就像image一样。但是如果图像中有255个分量,那么image+1溢出。256变为0。这导致np.log(imag+1)在此时变为log(0)。因此产生了错误。因此最亮的部分具有奇怪的颜色,因为它们是包含255的部分
因此,由于log无论如何都必须与float一起工作,所以在调用log之前,您只需自己转换为float即可

path = '...JPG'
image = cv2.imread(path)
c = 255 / np.log(1 + np.max(image))    
log_image = c * (np.log(image.astype(float) + 1))

# Specify the data type so that
# float value will be converted to int
log_image = np.array(log_image, dtype = np.uint8)
cv2.imwrite('img.JPG', log_image)

相关问题