【发布时间】:2021-06-24 11:11:33
【问题描述】:
标题所示的目标是均衡给定图像,只是在我的情况下它是过度饱和的,顺便说一下,我上传的任何图像“弹出”。我正在尝试重现 Gonzalez 和 Woods 算法。除此之外,必须有一些方法可以使代码“更轻”地被编译,唯一的规则是一切都必须使用 numpy 库来完成。 算法链接:https://pt.wikipedia.org/wiki/Equaliza%C3%A7%C3%A3o_de_histograma
代码中间有绘图,因为它是在 jupyter 中制作的,我使用了几个单元格来尝试优化代码,即更快地运行它。
代码如下:
import numpy as np
import matplotlib.pyplot as plt
olho=plt.imread('training/images/29_training.tif')
olho_verde=olho[:,:,1]
teste=np.copy(olho_verde)
incidencia=np.zeros((teste.size))
ocorrencia=np.zeros(256)
k=0
for i in range(584):
for j in range(565):
incidencia[k]=teste[i,j] #all image intensities
k=k+1
count=0
for i in range(256): # how many times each intensity occurs for a total number of pixels of 255
for j in range(len(incidencia)):
if incidencia[j]==i:
count=count+1
ocorrencia[i]=count
count=0
acumulado=np.zeros(256) #down here I have the algorithm so with histogram and image plot
count=0
for i in range(256):
count=count+ocorrencia[i]
acumulado[i]=count
constante=255/(584*565)
for i in range(256):
acumulado[i]=round(acumulado[i]*constante,0)
plt.figure(figsize=(20,8))
plt.hist(acumulado,256,[0,256])
plt.show
equaliza=np.copy(olho_verde)
i1,j1=np.nonzero(equaliza)
for i in range(256):
for j in range(len(i1)):
if(equaliza[i1[j],j1[j]]==i):
equaliza[i1[j],j1[j]]=acumulado[i]
plt.imshow(equaliza)
【问题讨论】:
标签: image numpy image-processing