PY
Neste módulo vamos aprender calcular e visualizar o histograma de uma imagem. O histograma de uma imagem é um gráfico que monstra a distribuição de frequências dos valores digitais dos pixels. No histograma, o eixo "x" representa cada um dos possíveis valores digitais (0 0 255, ou 1-256) e a altura representa a quantidade ou frequência absoluta com que cada valor digital ocorre.
Passos
Não vamos repetir a parte inicial, então vamos para a segunda parte.
Dada a imagem I (igreja.jpg disponível no seu drive) con n linhas e m colunas, podemos ler ela, calcular seu tamanho (n e m) e também seus valores mínimos e máximos
nome="igreja.jpg"
arq=pasta+nome
print(arq)
I = plt.imread(arq)
print('tamanho',I.shape) # numero de linhas, colunas e bandas!
n,m=I.shape
minimo=np.min(I)
maximo=np.max(I)
print('minimo=', minimo, 'maximo=', maximo)
plt.imshow(I, cmap=plt.get_cmap('gray'),vmin=0,vmax=255)
Agora, calcule o histograma, para isto devemos:
Como o histograma pode ser uma função que podemos chamar de diferentes partes do programa, não vale a pena repetir toda vez estas linhas. Poderiamos agrupar estes comandos sob forma de uma função, dar nome a ela, e chamar a função de dentro do programa em diferentes locais.
Para isto, os comandos debem ser incluídos no programa antes de sua chamada. Geralmente fazemos isso no início do programa, após as linhas de import
Note que a imagem, dentro da função se chama X, não mais I. isto é porque as variáveis usadas valem apenas dentro da função. mesmom que usemos variáveis com o mesmo nome dentro e fora da função, elas são independentes.
a função:
vejamos:
minimo=np.min(I)
maximo=np.max(I)
n,m=I.shape
print('minimo=', minimo, 'maximo=', maximo)
h = [0 for x in range(256)] # aloca vetor para histograma
# calcula histograma
H=np.zeros( (256))
for i in range(n):
for j in range(m):
v=int( I[i,j] )
H[v]=H[v]+1
plt.plot(H)
plt.title("Histograma da imagem")
plt.legend()
plt.show()
return(H)
# FIM de funcao
# inicio de processamento da imagem
pasta= "/content/drive/My Drive/images/"
nome="igreja.jpg"
arq=pasta+nome
I = plt.imread(arq)
print('tamanho',I.shape) # numero de linhas, colunas e bandas!
n,m=I.shape
# chamar função Histograma
h=histograma(I)
Um fotógrafo amador, na sua viagem por Curitiba, obteve várias imagens usando sua câmara digital. Como ele não leu o manual da câmara antes de fotografar, algumas imagens não apresentam boa qualidade. Para sua correção, o fotógrafo enviou as imagens para que nosso laboratório as recuperasse.
imagem |
mínimo |
máximo |
brilho |
contraste |
bits |
a |
b |
600-400 |
|||||||
400-300 |
|||||||
500-400 |
|||||||
351-500 |