Python - Equilibrado de color parabólico BCET

 
Vista:

Equilibrado de color parabólico BCET

Publicado por Geomata (21 intervenciones) el 12/01/2021 10:04:13
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import numpy as np
import matplotlib.pyplot as plt
import skimage.io as io
from skimage import img_as_float
import skimage.exposure as exposure
 
def ibcet (CE,L,H,E):
    '''
    Parameters
    ----------
    CE : Canal de enbtrada
    L : Valor mínimo del canal objetivo
    H : VAlor maximo canal objetivo
    E : Valor medio canal objetivo
    Returns
    -------
    ibcet: canal de salida con el contraste equilibrado
    a,b,c: parametrosd e la funcion de wequilirbado y=a*(x-b)^^2+c
    '''
    ES = CE.size
    l = np.min(CE)
    h = np.max (CE)
    e = np.mean (CE)
    ce2=CE**2
    s = sum(sum(ce2))/(ES)
    b = ((h**2)*(E-L)-s*(H-L)+(l**2)*(H-E))/(2*(h*(E-L)-e*(H-L)+l*(H-E)))
    a = (H-L)/((h-l)*(h+l-2*b))
    c = L-a*(l-b)**2
    ibcet = a*(CE-b)**2+c
 
    return ibcet, a, b, c
 
# Programa principal: Lectur imagenes y rescalado contraste
img = io.imread('ColoradoLandsat8OLI541.jpg')
img = img_as_float(img)
plt.figure(figsize=(20,12))
plt.imshow(img)
plt.title('Original')
plt.xticks()
plt.yticks()
rojo = img [:,:,0]
verde = img [:,:,1]
azul = img [:,:,2]
plt.figure(figsize=(20,12))
pminr , pmaxr = np.percentile (rojo,(2,98))
rojoclip = exposure.rescale_intensity(rojo,in_range=(pminr,pmaxr))
 
plt.figure(figsize=(20,12))
pminv , pmaxv = np.percentile (verde,(2,98))
verdeclip = exposure.rescale_intensity(verde,in_range=(pminv,pmaxv))
Low = np.min (verdeclip)
High = np.max (verdeclip)
Emean= np.mean (verdeclip)
plt.figure(figsize=(20,12))
pmina , pmaxa = np.percentile (azul,(2,98))
azulclip = exposure.rescale_intensity(azul,in_range=(pmina,pmaxa))
# Llamadas a la funcion de equilibrado
rojoclip_ibcet, a,b,c = ibcet(rojoclip, Low,High, Emean)
azulclip_ibcet, a,b,c = ibcet(azulclip, Low, High, Emean)
# Apilado de los canales modificados y el canal objeiveo en iamgen final
RGB = np.dstack((rojoclip_ibcet,verdeclip,azulclip_ibcet))
plt.imshow (RGB)
plt.xticks()
plt.yticks()
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder