gpt4 book ai didi

python - Python 中的自适应直方图均衡化

转载 作者:太空狗 更新时间:2023-10-30 01:32:15 27 4
gpt4 key购买 nike

我正在尝试在 python 中实现自适应直方图均衡化。我拍摄一张图像并将其分成较小的区域,然后对其应用传统的直方图均衡。然后我将较小的图像组合成一个并获得最终的合成图像。最终图像在本质上看起来非常 block 状,并且每个单独区域具有不同的对比度级别。有没有一种方法可以让每个单独的图像保持统一的对比度,使其看起来像一个单一的图像,而不是拼接在一起的较小图像。

Input Output

import cv2
import numpy as np
from matplotlib import pyplot as plt
from scipy.misc import imsave
from scipy import ndimage
from scipy import misc
import scipy.misc
import scipy

import image_slicer
from image_slicer import join
from PIL import Image

img = 'watch.png'
num_tiles = 25
tiles = image_slicer.slice(img, num_tiles)


for tile in tiles:
img = scipy.misc.imread(tile.filename)
hist,bins = np.histogram(img.flatten(),256,[0,256])
cdf = hist.cumsum()
cdf_normalized = cdf *hist.max()/ cdf.max()
plt.plot(cdf_normalized, color = 'g')
plt.hist(img.flatten(),256,[0,256], color = 'g')
plt.xlim([0,256])
plt.legend(('cdf','histogram'), loc = 'upper left')
cdf_m = np.ma.masked_equal(cdf,0)
cdf_o = (cdf_m - cdf_m.min())*255/(cdf_m.max()-cdf_m.min())
cdf = np.ma.filled(cdf_o,0).astype('uint8')
img3 = cdf[img]
cv2.imwrite(tile.filename,img3)
tile.image = Image.open(tile.filename

image = join(tiles)
image.save('watch-join.png')

最佳答案

我回顾了实际的算法并提出了以下实现。我相信有更好的方法可以做到这一点。任何建议表示赞赏。

import numpy as np
import cv2

img = cv2.imread('watch.png',0)
print img
img_size=img.shape
print img_size

img_mod = np.zeros((600, 800))

for i in range(0,img_size[0]-30):
for j in range(0,img_size[1]-30):
kernel = img[i:i+30,j:j+30]
for k in range(0,30):
for l in range(0,30):
element = kernel[k,l]
rank = 0
for m in range(0,30):
for n in range(0,30):
if(kernel[k,l]>kernel[m,n]):
rank = rank + 1
img_mod[i,j] = ((rank * 255 )/900)

im = np.array(img_mod, dtype = np.uint8)
cv2.imwrite('target.png',im)

关于python - Python 中的自适应直方图均衡化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43569566/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com