opencv histograma e equalização de histograma (cv2.calcHist, cv2.equalizeHist)

Um histograma imagem Avaliação da função: cv2.calcHist ()

cv2.calcHist(images, channels, mask, histSize, ranges[, hist[, accumulate ]]) ->hist

imaes: Imagem de entrada
canais: Uma imagem canais
mascarar: Máscara, e é um tamanho igual a np matriz de imagem, em que a porção específica para ser processado é 1, especifica que nenhuma parte do processamento é zero, tipicamente definido como Nenhum, que mostra todo o processamento de imagem
HISTSIZE: Utilizar o número de bin (colunas), tipicamente 256
gamas: Intervalo de valores de pixel, geralmente [0, 255] é de 0 a 255
por trás dos dois parâmetros básicos do tubo.
Note-se que na máscara disso, os outros quatro parâmetros tive que tomar número [].
Aqui Insert Picture Descrição

img = cv2.imread('cat.jpg',0) #0表示灰度图
hist = cv2.calcHist([img],[0],None,[256],[0,256])
hist.shape#(256, 1)

1, sem parâmetros de máscara

img = cv2.imread('cat.jpg') 
color = ('b','g','r')
for i,col in enumerate(color): 
    histr = cv2.calcHist([img],[i],None,[256],[0,256]) 
    plt.plot(histr,color = col) 
    plt.xlim([0,256]) 

Aqui Insert Picture Descrição
2, usando o parâmetro de máscara

# 创建mask
mask = np.zeros(img.shape[:2], np.uint8)
mask[100:300, 100:400] = 255

img = cv2.imread('cat.jpg', 0)
masked_img = cv2.bitwise_and(img, img, mask=mask)#与操作

hist_full = cv2.calcHist([img], [0], None, [256], [0, 256])
hist_mask = cv2.calcHist([img], [0], mask, [256], [0, 256])

plt.subplot(221), plt.imshow(img, 'gray')
plt.subplot(222), plt.imshow(mask, 'gray')
plt.subplot(223), plt.imshow(masked_img, 'gray')
plt.subplot(224), plt.plot(hist_full), plt.plot(hist_mask)
plt.xlim([0, 256])
plt.show()

Aqui Insert Picture Descrição

Em segundo lugar, a função de imagem histograma de equalização: cv2.equalizeHist () e cv2.createCLAHA ()

Histograma equalização descrito
histograma equalização é uma técnica simples e eficaz de melhoramento de imagem, uma imagem é mudada mudando a gradação de cada pixel do histograma da imagem, a gama dinâmica usada para melhorar o contraste da imagem é pequena. Devido à sua distribuição de intensidade de imagem original pode ser concentrado em um intervalo estreito, imagem resultante não é suficientemente claro. Por exemplo, os níveis de cinzento da imagem sobre-exposição é concentrada numa gama alta luminância, mas irá causar nível cinzento imagem subexposto na gama baixa luminância concentrada. Usando a equalização de histograma, o histograma pode ser imagem original convertido é uma forma de distribuição uniforme (equilibrado), aumentando assim o valor da diferença entre o intervalo dinâmico escala de cinzentos do pixel, de modo a atingir o efeito de aumentar o contraste da imagem inteira. Em outras palavras, o princípio básico de equalização de histograma é: O número de pixels no valor gradação de imagem (ou seja, a imagem desempenhar um valor importante papel gradação) para a ampliação e o menor número de valores em escala de cinza do pixel (ou seja, não desempenham um papel importante na mesclagem valor gradação de imagem), aumentando assim o contraste, nitidez de imagem, atingir o objectivo de reforçada.

cv2.equalizeHist(img)  

Parâmetros: representação img da imagem de entrada
Aqui Insert Picture Descrição
Aqui Insert Picture Descrição

img = cv2.imread('clahe.jpg',0) #0表示灰度图
plt.hist(img.ravel(),256); 
plt.show()

Aqui Insert Picture Descrição

equ = cv2.equalizeHist(img) 
plt.hist(equ.ravel(),256)
plt.show()

Aqui Insert Picture Descrição

res = np.hstack((img,equ))
cv_show(res,'res')

Aqui Insert Picture DescriçãoEsta equalização global vai haver alguns problemas, devido ao brilho geral do elevador, de modo que os detalhes da imagem parcial ficará embaçada; por isso podemos usar equalização melhor adaptativa

cv2.createCLAHA(clipLimit=8.0, titleGridSize=(8, 8))  

Parâmetros: clipLimit limiar de contraste de cor, titleGridSize equalização tamanho da grade pixel, isto é, uma operação de equalização de histograma em muito malha

clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8)) 
res_clahe = clahe.apply(img)
res = np.hstack((img,equ,res_clahe))
cv_show(res,'res')

Aqui Insert Picture DescriçãoPode ser visto equalização adaptativa não fez os detalhes de rostos de pessoas desaparecem

Publicado 27 artigos originais · Louvor obteve 20 · vista 1545

Acho que você gosta

Origin blog.csdn.net/qq_39507748/article/details/104596171
Recomendado
Clasificación