A New Image Contrast Enhancement Algorithm using Exposure Fusion Framework(使用曝光融合框架的新图像对比度增强算法)程序记录

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,灰度图像等),范围是从0255

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。索性我直接将文件名写死在了程序里。后续这个问题还要进行解决。

你可能感兴趣的:(图像增强实验,python,opencv)