A New Image Contrast Enhancement Algorithm using Exposure Fusion Framework(使用曝光融合框架的新图像对比度增强算法)程序记录
原文内容
论文链接:https://baidut.github.io/OpenCE/caip2017.html
代码链接:https://github.com/AndyHuang1995/Image-Contrast-Enhancement
直方图均衡化增强图像
代码
源程序略做了一些改动,并且还加了注释。
import numpy as np
import matplotlib.pyplot as plt
from skimage import exposure as ex
import imageio
import sys
'''直方图均衡化增强图像'''
def he(img):
print(img.shape)
if(len(img.shape)==2): #gray灰度图
outImg = ex.equalize_hist(img[:,:])*255
elif(len(img.shape)==3): #RGB彩色图像,
#img.shape[2]:图像的通道数
outImg = np.zeros((img.shape[0],img.shape[1],3))#返回来一个给定形状和类型的用0填充的数组;
# img.shape[0]为创建这么多个数组,img.shape[1]为每个二维数组的行,3为每个二维数组的列
for channel in range(3):
outImg[:, :, channel] = ex.equalize_hist(img[:, :, channel])*255#skimage用于图像的直方图均衡化的函数,返回直方图均衡化之后的图像
outImg[outImg>255] = 255
outImg[outImg<0] = 0
return outImg.astype(np.uint8)#uint8是专门用于存储各种图像的(包括RGB,灰度图像等),范围是从0–255
def main():
img_name = "dark_house.jpg" #sys.argv[1]
img = imageio.imread(img_name)
result = he(img)
plt.imshow(result)
plt.show()
if __name__ == '__main__':
main()
其中遇到的问题
1.outImg = np.zeros((img.shape[0],img.shape【1】,3))
在第三个位置作者直接填写的3,可以理解为想要一个三列的数组。
for channel in range((img.shape【2】):
outImg[:, :, channel] = ex.equalize_hist(img[:, :, channel])*255
但在下一行的循环里为img.shape【2】,此时如果图像是三个通道的则没有问题,如果图像为四个通道的就会出现如下问题:
目前想到的解决办法就是要不就是改range()函数里面的,要不就是改np.zeros( , , img,shape(2))。两个方法都试过之后发现,采用第一种处理图片结果要相对好一些。
2.img_name = “dark_house.jpg” #sys.argv(1)
原文作者采用的是sys.argv(1)函数,但是我在pycharm用命令运行的时候并未用我提前选择好的python3.6运行,而是采用的3.7。索性我直接将文件名写死在了程序里。后续这个问题还要进行解决。