Zoom con splines (Métodos Numéricos)

De Cuba-Wiki
Revisión del 23:29 13 nov 2006 de 10.2.4.16 (discusión) (→‎Zoom)
(difs.) ← Revisión anterior | Revisión actual (difs.) | Revisión siguiente → (difs.)

Tipos de splines

Spline natural
s x0 = s xn = 0
Spline sujeto
s'(x_0) = A
s'(x_n) = B
Spline parabolico
Spline extrapolado
Asegura q el spline coincide con la funcion si era un polinomio de grado 3
Idem para el otro borde
Spline periodico
Se usa si la funcion original era periodica, si se esta interpolando un periodo

Agregar condiciones distintas, fuera de los bordes, puede dar un sistema compatible determinado pero se pierde tridiagonalidad.

Los splines tienen control global, es decir, un solo punto influye en todo el spline, no localmente. En caso de encontrar un salto, se deben usar dos splines por separado para evitar errores.

Zoom

El zoom tradicional consiste en, por ejemplo, si se desea duplicar las dimensiones de la matriz, por cada pixel original insertar 4 iguales. Esto produce un efecto de pixelado.

Usando splines se interpola por filas y/o columnas, y se extienden los valores del dominio a la cantidad necesaria. Luego se hallan los valores nuevos a partir del spline generado.

Algoritmo que hace zoom en la imagen:

img=imread('bart.bmp');
img=sum(img, 3)/3;
[n,m]=size(img);
V=1:1/2:m;
ret=zeros(n, length(V));
for i=1:n
        fila=img(i,:);
        ret(i,:)=spline(1:m,fila,V);
end; 

[n,m]=size(ret)
V=1:1/2:n;
ret2=zeros(length(V),m);
for i=1:m
        col=ret(:,i);
        ret2(:,i)=(spline(1:n,col',V))';
end; 

colormap(gray(255));
image(img);
figure;
colormap(gray(255));
image(ret2);
lin = ret2(100,:);
linori = ret2(50,:);
figure;
plot(lin);
figure;
plot(linori);