Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Desblurring images usando el algoritmo de deconvolución ciega

Este ejemplo muestra cómo utilizar la deconvolución ciega a las imágenes enfoque vibración. El algoritmo de deconvolución ciega se puede utilizar eficazmente cuando no se conoce información sobre la distorsión (desenfoque y ruido). El algoritmo restaura la imagen y la función de dispersión de puntos (PSF) simultáneamente. El algoritmo acelerado y amortiguado Richardson-Lucy se utiliza en cada iteración. Las características adicionales del sistema óptico (por ejemplo, de la cámara) se pueden utilizar como parámetros de entrada que podrían ayudar a mejorar la calidad de la restauración de la imagen. Las restricciones PSF se pueden pasar a través de una función especificada por el usuario.

Paso 1: leer imagen

Lea una imagen en escala de grises en el espacio de trabajo. La función puede manejar matrices de cualquier dimensión.deconvblind

I = imread('cameraman.tif'); figure;imshow(I);title('Original Image'); text(size(I,2),size(I,1)+15, ...     'Image courtesy of Massachusetts Institute of Technology', ...     'FontSize',7,'HorizontalAlignment','right');

Paso 2: simular un desenfoque

Simular una imagen de la vida real que podría ser borrosa (por ejemplo, debido al movimiento de la cámara o la falta de enfoque). El ejemplo simula el desenfoque mediante la conformación de un filtro Gaussiano con la imagen verdadera (utilizando).imfilter El filtro gaussiano representa entonces una función de dispersión de puntos,.PSF

PSF = fspecial('gaussian',7,10); Blurred = imfilter(I,PSF,'symmetric','conv'); imshow(Blurred) title('Blurred Image')

Paso 3: restaurar la imagen borrosa utilizando PSFs de varios tamaños

Para ilustrar la importancia de conocer el tamaño del PSF verdadero, este ejemplo realiza tres restauraciones. Cada vez que la reconstrucción de PSF comienza a partir de una matriz uniforme (una matriz de unos).

La primera restauración, y, utiliza una matriz de tamaño inferior,, para una suposición inicial del PSF.J1P1UNDERPSF El tamaño de la matriz UNDERPSF es 4 píxeles más cortos en cada dimensión que el verdadero PSF.

UNDERPSF = ones(size(PSF)-4); [J1,P1] = deconvblind(Blurred,UNDERPSF); imshow(J1) title('Deblurring with Undersized PSF')

La segunda restauración, y, utiliza una matriz de unos,, para un PSF inicial que es 4 píxeles más largo en cada dimensión que el verdadero PSF.J2P2OVERPSF

OVERPSF = padarray(UNDERPSF,[4 4],'replicate','both'); [J2,P2] = deconvblind(Blurred,OVERPSF); imshow(J2) title('Deblurring with Oversized PSF')

La tercera restauración, y, utiliza una matriz de unos,, para un PSF inicial que es exactamente del mismo tamaño que el verdadero PSF.J3P3INITPSF

INITPSF = padarray(UNDERPSF,[2 2],'replicate','both'); [J3,P3] = deconvblind(Blurred,INITPSF); imshow(J3) title('Deblurring with INITPSF')

Paso 4: analizando el PSF restaurado

Las tres restauraciones también producen un PSF. Las siguientes imágenes muestran cómo el análisis del PSF reconstruido podría ayudar a adivinar el tamaño adecuado para el PSF inicial. En el verdadero PSF, un filtro gaussiano, los valores máximos están en el centro (blanco) y disminuyen en los bordes (negro).

figure; subplot(2,2,1) imshow(PSF,[],'InitialMagnification','fit') title('True PSF') subplot(222) imshow(P1,[],'InitialMagnification','fit') title('Reconstructed Undersized PSF') subplot(2,2,3) imshow(P2,[],'InitialMagnification','fit') title('Reconstructed Oversized PSF') subplot(2,2,4) imshow(P3,[],'InitialMagnification','fit') title('Reconstructed true PSF')

El PSF reconstruido en la primera restauración,, obviamente, no encaja en el tamaño restringido.P1 Tiene una fuerte variación de la señal en los bordes. La imagen correspondiente,, no muestra ninguna claridad mejorada frente a la imagen borrosa,.J1Blurred

El PSF reconstruido en la segunda restauración, se vuelve muy suave en los bordes.P2 Esto implica que la restauración puede manejar un PSF de un tamaño más pequeño. La imagen correspondiente,, muestra algunos desblurring pero está fuertemente corrompido por el timbre.J2

Finalmente, el PSF reconstruido en la tercera restauración, es algo intermedio entre y.P3P1P2 La matriz,, se asemeja a la verdadera PSF muy bien.P3 La imagen correspondiente,, muestra una mejora significativa; sin embargo, todavía está corrompido por el timbre.J3

Paso 5: mejorar la restauración

El timbre en la imagen restaurada, se produce a lo largo de las áreas de contraste de intensidad aguda en la imagen y a lo largo de los bordes de la imagen.J3 En este ejemplo se muestra cómo reducir el efecto de timbre especificando una función de ponderación. El algoritmo pondera cada píxel según la matriz mientras restaura la imagen y el PSF.WEIGHT En nuestro ejemplo, comenzamos encontrando los píxeles "afilados" usando la función Edge. Por ensayo y error, determinamos que un nivel de umbral deseable es 0,08.

WEIGHT = edge(Blurred,'sobel',.08);

Para ensanchar el área, usamos y pasamos un elemento estructurante,.imdilatese

se = strel('disk',2); WEIGHT = 1-double(imdilate(WEIGHT,se));

Los píxeles cercanos a los bordes también tienen asignado el valor 0.

WEIGHT([1:3 end-(0:2)],:) = 0; WEIGHT(:,[1:3 end-(0:2)]) = 0; figure imshow(WEIGHT) title('Weight Array')

La imagen se restaura llamando a deconvblind con la matriz y un mayor número de iteraciones (30).WEIGHT Casi todo el timbre se suprime.

[J,P] = deconvblind(Blurred,INITPSF,30,[],WEIGHT); imshow(J) title('Deblurred Image')

Paso 6: uso de restricciones adicionales en la restauración de PSF

El ejemplo muestra cómo puede especificar restricciones adicionales en el PSF. La función, a continuación, devuelve una matriz PSF modificada que deconvblind utiliza para la siguiente iteración.FUN

En este ejemplo, modifica el PSF recortándolo y el número de píxeles en cada dimensión y, a continuación, volver a rellenar la matriz a su tamaño original con ceros.FUNP1P2 Esta operación no cambia los valores en el centro del PSF, pero reduce eficazmente el tamaño de PSF por y píxeles.2*P12*P2

P1 = 2; P2 = 2; FUN = @(PSF) padarray(PSF(P1+1:end-P1,P2+1:end-P2),[P1 P2]);

La función anónima,, se pasa a la última.FUNdeconvblind Consulte la sección parametrizar funciones, en la documentación de matemáticas de MATLAB, para obtener información sobre cómo proporcionar parámetros adicionales a la función.FUN

En este ejemplo, el tamaño del PSF inicial, es 4 píxeles más grande que el verdadero PSF.OVERPSF Al establecer P1 = 2 y P2 = 2 como parámetros, se convierte eficazmente el valioso espacio del mismo tamaño que el PSF verdadero.FUNOVERPSF Por lo tanto, el resultado, y, es similar al resultado de la deconvolución con el tamaño correcto PSF y ninguna llamada, y, desde el paso 4.JFPFFUNJP

[JF,PF] = deconvblind(Blurred,OVERPSF,30,[],WEIGHT,FUN); imshow(JF) title('Deblurred Image')

Si hubiéramos utilizado el PSF inicial de gran tamaño, sin la función de restricción, la imagen resultante sería similar al resultado insatisfactorio, alcanzado en el paso 3.OVERPSFFUNJ2

Tenga en cuenta que los parámetros no especificados antes se pueden omitir, como en este ejemplo, sin necesidad de un titular de lugar, ([]).FUNDAMPARREADOUT

Consulte también

| | |

Temas relacionados