自适应直方图均衡(AHE)算法

Eli*_*lia 5 python image-processing histogram python-2.7 histogram-equalization

我一直在试图找出执行完全自适应直方图均衡(无需插值)的算法。然而,我似乎仍然缺少一块,并且没有设法获得正确的结果图像。

以下是我遵循的步骤,希望有人能够阐明缺少的内容:

  1. 输入灰度图像(0-255)。
  2. 创建超大图像并镜像边界附近的值以避免边界和角的特殊情况。(正如本文第 20 页所提出的:自适应直方图均衡化并行实现
  3. 为源图像中的每个像素初始化等级 0。
  4. 对于源图像中的每个像素,找到其在其局部区域中的排名(局部区域大小将作为输入给出)。像素等级是局部区域中小于中心像素的像素数量(我们正在循环的像素,在源图像中)
  5. 新像素值计算公式为:Rank * (最大强度 = 255) / (局部区域像素数)

遵循这些步骤会产生 30x30 局部区域窗口大小的以下输出:

原来的:

原来的

输出:

输出

我希望在以下问题上得到一些指导,以解决我在这里缺少的内容。

San*_*Dey 2

我们可以用下面的代码实现上述AHE算法python,并行版本请参考这篇论文。这wsz是上下文窗口大小参数:

def AHE(im, wsz=8):    
    h, w = im.shape
    out = np.zeros(im.shape) # Declare output variable
    im = np.pad(im.copy(), ((wsz//2, wsz//2), (wsz//2, wsz//2)), mode = 'reflect')
    for x in range(wsz//2, h + wsz//2):
        for y in range(wsz//2, w + wsz//2):
            blk = im[x-wsz//2:x+wsz//2, y-wsz//2:y+wsz//2]
            rank = np.sum(im[x, y] > blk)
            out[x - wsz//2, y - wsz//2] = rank * 255 / wsz**2
    return out
Run Code Online (Sandbox Code Playgroud)

并获得以下输出(带有wsz=50):

在此输入图像描述