You are on page 1of 8

Correccin de imgenes ENVI con errores mediante interpolacin matricial difusa.

La toma de imgenes hiperespectrales, a veces, conlleva algunos errores debido a las condiciones ambientales, como nubes, o problemas de enfoques o reflejos incorrectos. El resultado es obtener imgenes que se salen de los resultados deseados, como la siguiente:

Este documento se trata de buscar un modo de correccin bajo la hiptesis siguiente: Hiptesis: La zona a corregir corresponde a un espacio de continuidad espacio-temporal en medio de las zonas correctas, por lo tanto es plausible que su correccin corresponda a una relacin de continuidad que se puede representar mediante una interpolacin entre los bordes de cada lado ad acentes a la zona a corregir. Metodologa: !hora, para resolver tal propuesta ser necesario implementar seguir una serie de pasos para lograr una correccin apro"imada a la realidad, esto es conseguir la modificacin de la imagen con alg#n m$todo que permita e"traer su informacin devolverla sin modificar las otras variables. Paso 1. Deteccin de bordes. %n set de imgenes E&'( hiperespectrales consiste en una serie de imgenes mapa de bits relacionadas por el lugar geogrfico, el mismo, las diferentes longitud de onda en que son tomadas cada una, permitiendo obtener informacin del lugar a distintos niveles. )or lo tanto, al ser mapa de bits, es posible conocer manipular el valor del pi"el su posicin dentro de la matriz imgen. *e aqu+ que se puede obtener el valor de los puntos de corte en el eje x - a la derecha. horizontal: x , a la izquierda

X , =./,

X -=00, representan las posiciones horizontales 1 de pi"eles en la matriz.

Paso 2. Definir ecuacin de interpolacin correctiva mediante Interpolacin Lineal IL!. 2e propone una funcin de interpolacin del tipo lineal y ( x )=mx + c 3ada punto de la imgen, pi"el, tiene un valor natural ( x , y ) 4 que var+a en 5 bits. V ( x , y )=({,,.. ,45- }; {,,.. ,45 - }) 6aciendo ceteris paribus, dejando constante, en eje vertical 7 7, definimos la pendiente 7m7 7c7 en: m= c= V ( X - )V ( X ,) X - X ,

V ( X , ) X - V ( X -) X , X - X , V ( X )= m X + c

)or lo que la funcin de interpolacin lineal correctiva quedar+a en:

Paso ". Definir ecuacin de interpolacin correctiva mediante Interpolacin Difusa ID!. Esta es una forma de crear la zona de reemplazo de manera difusa, utilizando varios parmetros. )rimero observar la siguiente imgen su composicin, nos referiremos a ella. Esta imgen representa una matriz de una bi-dimensional a la cual se le desea corregir la zona en verde.

&os interesa obtener los valores de 8 que formarn parte de la nueva zona corregida de la imagen. )ara eso es necesario seguir cuidadosamente lo siguiente: -. Establecer los l+mites de la zona a corregir, asignar los valores de estos l+mites a 9":,, :,; 9":-, :-;. 4. *eterminar la orientacin de la correccin, si es en sentido vertical u horizontal. /. *eterminar la zona de ad acencia en la cantidad de pi"eles a considerar ad acentes al pi"el de borde analizado, p en la horizontal, q en la vertical. Lo que resultan dos grupos de matrices #$a #$b. Esto se define en base a la operacin lgica, comparativa, que depende

de los tama<os

posicin de los pi"eles borde.

=. *efinir un factor de peso 9, a -; que se le da a la interpolacin lineal, de manera que: Q= Factor Interpolacin ( lineal )+( - Factor )Interpolacin ( difusa ) >. ?btener el valor de la serie de pi"eles entre los pi"eles borde, a partir de una seleccin aleatoria de un valor de cada uno, considerando adems un factor de distancia entre ambos. Es el vector de interpolacin difusa. =[ - : distancia ( V ,, V -)] @ =- ga=Ga ( aleatorio( filas (G a )) , aleatorio ( columnas ( Ga )))

gb=Gb ( aleatorio ( filas (G b )) , aleatorio ( columnas ( Gb ))) T ( e , : )= ga +gb .. Luego, se recorta una matriz que corresponde a la zona a corregir original. M o= M ( X , Y ) 0. 2e reemplaza la zona a corregir de la matriz original por una operacin lineal entre un factor de reserva 9de , a -; la matriz 8. M ( X , Y )=Factor reser aM o +( - Factor reser a )T 5. Aepetir por cada capa de color 9A,B,C;. D. 2e guarda la matriz como imagen, en el formato original. %esultados. Este m$todo permite corregir imperfecciones de la toma de imgenes bajo ciertos supuestos, como resultado entrega una apro"imacin bastante ms acertada a la realidad. 2in embargo no es precisa. )ara encontrar precisin se requerir de un estudio estad+stico comparativo entre imgenes bien tomadas a las que se les aplique una correccin, imgenes bien tomadas que no se le aplique correccin con imgenes de la misma zona corregidas, etc$tera. !dems ser necesario determinar los parmetros correspondientes a los ratios 9q,p; los factores

con que se opera en el m$todo, de manera que se permita determinar los valores ms adecuados seg#n alg#n caso determinado.

&onsideraciones. El dise<o de este algoritmo se puede implementar bajo alg#n lenguaje de programacin matemtico que permita o tenga en sus librer+as la posibilidad de leer imgenes como matrices un set de funciones que permitan interpretarlas. En este caso se ha utilizado matlab para definir las funciones
interpolacion_matrix %M=interpolacion_matrix(V,x,y, b,c,p,q,factor) %interpola una zona de la matriz %V: matriz de valores % x_! x_"#: valores de posici$n %orizontal % y_! y_"#: valores de posici$n vertical %b: orientaci$n ": %orizontal, !: vertical %tener cuidado en de&nir bordes %orizontales y verticales c=! todo el %re'istro vertical, c=" todo re'istro %orizontal, c=( parcial, se toman %ambos vectores es una interpolaci$n difusa, basada en la as'incaci$n de un valor obtenido a partir % de las zonas conti'uas de cada pixel frontera, seleccionado al azar %la zona conti'ua es criterio del usuario, basada un un valor p: cantidad %de pixeles en torno a la vertical, y q cantidad de pixeles en torno a la %%orizontal %p= es el ratio %orizontal que reco'e a la izq y derec%a del punto ele'ido %q= es el ratio vertical que reco'e %acia arriba y aba)o del punto ele'ido %ambos determinan una matriz de dimensi$n (p*" x (q*" con centro el punto %esco'ido %factor: es un par de valores que le asi'na un peso la interpolaci$n lineal %difusa, tiene valor de ! a "+ %,factor_intercambio: es el factor que se aplica al intercambio de la zona, primero a %la misma zona y lue'o a la matriz de reemplazo function M=interpolacion_matrix(V,x,y, b,c,p,q,factor, factor_intercambio) %veri&car que sean mayores que ! y dentro de V n_v, m_v# = size(V)M=double(V)%%se evalua si corresponde operar la funci$n if len't%(x) .=( // len't%(y) .=( // factor .=" 00 factor 1=! // factor_intercambio .=" 00 factor_intercambio 1=! %%se construyen los vectores de factor y factor_intercambio factor= factor,"2factor#-

operar las matrices.

factor_intercambio= factor_intercambio,"2factor_intercambio#x_!=x(")x_"=x(()y_!=y(")y_"=y(()if c==! y_!="y_"=n_velseif c==" x_!="x_"=m_velseif c==( else end ms'box(34rror al in'resar zona de re'istro3)

if x_!1=" 00 x_"1x_! 00 x_".=m_v 00 y_!1=" 00 y_"1y_! 00 y_".=n_v if b==" 5= x_!:x_"#6= y_!:y_"#lx=len't%(5)ly=len't%(6)for )=y_!:y_" m(),")=(V(),x_")2V(),x_!))7(x_"2x_!)c(),")=(V(),x_!)8x_"2V(),x_")8x_!)7(x_"2x_!)%%matriz 'rupo 92varian las columnas :_!(",:)= max()2q,"), max(x_!2p,")#:_"(",:)= min()*q,n_v),min(x_!*p,m_v)#%%matriz 'rupo ; :_!((,:)= max()2q,"), max(x_"2p,")#:_"((,:)= min()*q,n_v),min(x_"*p,m_v)#%%<rupos de matrices de adyacencia en torno a pixel frontera <_a=V(:_!(",")::_"(","),:_!(",()::_"(",())<_b=V(:_!((,")::_"((,"),:_!((,()::_"((,())%%tama=>o de matrices de adyacencia n_a, m_a#=size(<_a)n_b, m_b#=size(<_b)%%se determina aletoriamente que valor de matrices de adyacencia %%obtener for ?=":lx r_a_n=randi(n_a)r_a_m=randi(m_a)r_b_n=randi(n_b)r_b_m=randi(m_b)'a(?)=<_a(r_a_n,r_a_m)'b(?)=<_b(r_b_n,r_b_m)end %vector factor de posici$n del cada pixel beta= ":lx#7lxalp%a="2beta%%@e obtienen los vectores de interpolacion lineal y difusa pura+ vectorlineal=round(double(m(),")))85*c(),")vectordifuso=alp%a+8round(double('a))*beta+8round(double('b))%Ase suman linealmente vector=round((factor(")8vectorlineal*factor(()8vectordifuso))%%se asocia la lBnea correspondiente de C con el vector+ C(),:)=vectorend %%se rescata la matriz a corre'ir ori'inal M_o=double(M(6,5))-

%%se determina la nueva matriz M(6,5)=factor_intercambio(")8M_o*factor_intercambio(()8Celseif b==! 5= x_!:x_"#6= y_!:y_"#lx=len't%(5)ly=len't%(6)for i=x_!:x_" m(",i)=(V(y_",i)2V(y_!,i))7(y_"2y_!)c(",i)=(V(y_!,i)8y_"2V(y_",i)8y_!)7(y_"2y_!)%matriz 'rupo 92varian las &las :_!(",:)= max(y_!2q,"), max(i2p,")#:_"(",:)= min(y_!*q,n_v),min(i*p,m_v)#%matriz 'rupo ; :_!((,:)= max(y_"2q,"), max(i2p,")#:_"((,:)= min(y_"*q,n_v),min(i*p,m_v)#% <_a=V(:_!(",")::_"(","),:_!(",()::_"(",())<_b=V(:_!((,")::_"((,"),:_!((,()::_"((,())% n_a, m_a#=size(<_a)n_b, m_b#=size(<_b)% for ?=":ly r_a_n=randi(n_a)r_a_m=randi(m_a)r_b_n=randi(n_b)r_b_m=randi(m_b)'a(?)=<_a(r_a_n,r_a_m)'b(?)=<_b(r_b_n,r_b_m)end % beta= ":ly#7lyalp%a="2beta% vectorlineal=m(),")85*c(),")vectordifuso=alp%a+8round(double('a))*beta+8round(double('b))% vector=round((vectorlineal8factor(")*vectordifuso8factor(()))% C(:,i)=vectorend M_o=double(M(6,5))M(6,5)=factor_intercambio(")8M_o*factor_intercambio(()8Celse ms'box(34rror al in'resar orientaci$n ! para vertical o bien " para %orizontal3) end else ms'box(34rror al in'resar tus datos de interpolaci$n3) end else ms'box(34rror en lar'o de vetores x o y o factor3) end end

Luego, se invoca la funcin para operar las imgenes de prueba, bajo factores determinados por el

usuario. Lector 'I((


D:E4FCGE:G=pHdcd(D:E4FCGE:G)lista=I3bandaJKL+tif3- 3bandaK!(+tif3- 3bandaK""+tif3- 3bandaKLM+tif3Nn m# = size(lista)- %n indica posicion lista(n,") i="&le=c%ar(strcat(D:E4FCGE:G,37ima'enes73,lista(i,")))5,E# = 'eotiOread(&le):PQG = 'eotiRnfo(&le)SCM+'eo?ey=:PQG+<eoC:QQCa's+<eoTeyDirectoryCa'SCM+tipo=:PQG+Uro)ectionfactor=+(factor_intercambio=!+"p=(Vq=(Vb="c=!x= J!!,W!!#y= " X#V"=5(:,:,")V(=5(:,:,()VX=5(:,:,X)color=I3E3-3<3-3;3Nbits=:PQG+;itDept%for i=":n &'ure for )=":X M(:,:,))=interpolacion_matrix(5(:,:,)),x,y, b,c,p,q,factor,factor_intercambio):m(:,:,))=mat('ray(M(:,:,)))M_"Jb(:,:,)),Map_"Jb#='ray(ind(:m(:,:,)),(Ybits2")subplot(",V,)) ims%oH(M(:,:,))) titulo=strcat(lista(i,"),3 en :3,colorI)N)title(titulo)end subplot(",V,L) ims%oH(M) title( lista(i,"),3,corre'ida+3#) subplot(",V,V) ims%oH(5) title(lista(i,")) size(M_"Jb) %'uardar ima'enes corre'idas: &le_rev=c%ar(strcat(D:E4FCGE:G,37ima'enes7rev_3,lista(i,")))'eotiOHrite(&le_rev,M_"Jb,E,3<eoTeyDirectoryCa'3,SCM+'eo?ey)end

You might also like