直方图均衡:未获得所需的输出图像

问题描述 投票:0回答:1

我试图自己实现直方图均衡功能,但没有得到所需的输出图像。

import numpy as np
import cv2
import matplotlib.pyplot as plt
import math
%matplotlib inline

def freq(lst):
    d = {}
    for i in lst:
        for j in i:
            if d.get(j):
                d[j] += 1
            else:
                d[j] = 1

    return d
def probability(d,total_pixels):
    l = {}
    for i in range(256):
        value = d.get(i)
        if value != None:
            l[i] = value/total_pixels
    return l
def equalizer(d, l):
    f_dic = {}
    last_sum = 0
    for i in range(l):
        if d.get(i):
            prob = d.get(i)
            last_sum = last_sum+((l-1)*prob)
            f_dic[i] = math.floor(last_sum)
    return f_dic
def replace_values(f_dic, img):
    print(f_dic)
    for i in range(len(img)):
        for j in range(len(img)):
            vv = f_dic.get(img[i][j])
            if vv != None:
                img[i][j] = vv
    return img
def histogramEqualization(img):
    img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    freqq = freq(img)
    area = img.shape
    total_pixels = area[0]*area[1]
    prob = probability(freqq, total_pixels)
    f_dic = equalizer(prob,len(img))
    new_img = replace_values(f_dic,img)
    return new_img
pollen_dark = cv2.imread("/home/ahmed/Downloads/dip/DIP_A1_Fall2019/pollen_dark.tif")
new = histogramEqualization(pollen_dark)
plt.imshow(new, cmap='gray')

我正在得到这张图片:“

输入图像是这个:“

所需的输出图像是:“

python opencv image-processing
1个回答
0
投票

使用NumPy执行此操作的一种方法是使用np.unique()查找要修改的值,并使用np.linspace()生成相应的正确值。整个想法在Wikipedia中用图片很好地描述了。与循环遍历数组相比,这通常是一种更干净的方法:

DEPTH = 2 ** 8


def hist_equalization(arr, depth=DEPTH):
    vals = np.unique(arr)
    new_vals = np.linspace(0, depth - 1, len(vals), dtype=int)
    result = np.empty_like(arr)
    for i, val in enumerate(vals):
        result[np.nonzero(arr == val)] = new_vals[i]
    return result


plt.imshow(arr, cmap='gray', vmin=0, vmax=DEPTH - 1)
plt.imshow(hist_equalization(arr), cmap='gray', vmin=0, vmax=DEPTH - 1)

输入:

img_input

输出:

enter image description here

(完整脚本可用here。]

© www.soinside.com 2019 - 2024. All rights reserved.