. PDI em python


Processamento digital de imagens
Histograma de imagem


Histograma

A seguir, são mostradas as etapas para a visualização do histograma de uma imagem de 256 valores (8 bits) na tela do computador.

Se não a tem, copie a imagem cachorro no seu google drive.

Passos

  1. - Ler a imagem (I)
  2. - se a imagem tiver 3 bandas (RGB) mudar para cinza (RGB2GRAY)
  3. - Alocar um vetor com 256 valores = 0 ... H(x)
  4. - Varrer a imagem (variando linhas e colunas)
  5. - Em cada posição:
    • * Ler o valor digital v=I(linha, coluna)
    • * Incrementar o contador deste valor digital no histograma      H(v)= H(v)+1
  6. - Visualizar resultado na tela

Código em python.

# carrega bibliotecas
import cv2
from google.colab.patches import cv2_imshow # para mostrar a imagem
from google.colab import drive

drive.mount('/content/drive') # montar o drive

# listar conteúdo da pasta, verifique se sua imagem está nessa pasta
!ls "/content/drive/My Drive/fotos"

# Ler a imagem com uma função de OpenCV
nome='/content/drive/My Drive/fotos/dog.jpg'
I = cv2.imread(nome) # ler imagem RGB deste endereço
nl,nc, nb= I.shape # Recupera o tamanho da imagem
print('tamanho', nl, nc, 'nro de bandas', nb)
cv2_imshow(I)

G = cv2.cvtColor(I, cv2.COLOR_BGR2GRAY)
# transforma imagem RGB para imagem cinza usando openCV
cv2_imshow(G)

h = [0 for x in range(256)] # aloca vetor nulo para novo histograma

# varrer imagem e, para cada posição, ler o valor e
# somar uma unidade na correspondente posição do histograma

for L in range(nl):
   for C in range (nc):
     v=np.uint8( np.round( G[L,C] ) ) # valor digital da posicao L,C
     h[v]=h[v]+1 # soma um ao histograma nesta posicao

# ver grafico
plt.plot(h, label='histograma')
plt.show()

tente no seu computador...
Se der certo, o histograma deve ser parecido a este:


.

com OpenCV

Afortunadamente, existe uma função em OpenCV que calcula o histograma. Podemos usar esta função e produzir uma nova versão de nosso programa # carrega bibliotecas
import cv2
from google.colab.patches import cv2_imshow # para mostrar a imagem
from google.colab import drive

drive.mount('/content/drive') # montar o drive

# Ler a imagem com uma função de OpenCV
nome='/content/drive/My Drive/fotos/dog.jpg'
I = cv2.imread(nome)
nl,nc, nb= I.shape # Recupera o tamanho da imagem
print('tamanho', nl, nc, 'nro de bandas', nb)

# transforma imagem RGB para imagem cinza usando openCV, e mostra
G = cv2.cvtColor(I, cv2.COLOR_BGR2GRAY)
cv2_imshow(G)

# calcular o histograma na faixa de 0-255, ou seja, 256 valores
histo= cv.calcHist([I],[0],None,[256],[0,256])

plt.plot(histo)
plt.show()