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.

Desintoxicación de imágenes mediante el algoritmo de desconvolución ciega

En este ejemplo se muestra cómo utilizar la desconvolución ciega para desenfocar imágenes. El algoritmo de desconvolució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 Richardson-Lucy acelerado y amortiguado se utiliza en cada iteración. Las características adicionales del sistema óptico (por ejemplo, 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 controlar 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 convolviendo un filtro gaussiano con la imagen verdadera (usando ).imfilter A continuación, el filtro gaussiano representa 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 usando 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 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 conjetura inicial del PSF.J1P1UNDERPSF El tamaño de la matriz UNDERPSF es 4 píxeles más corto en cada dimensión que el PSF verdadero.

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 PSF verdadero.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: Análisis del 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 correcto 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 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 liso 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 un poco de desenfoque, pero está fuertemente corrompido por el timbre.J2

Por último, el PSF reconstruido en la tercera restauración, , es algo intermedio entre y .P3P1P2 La matriz, , se asemeja muy bien al verdadero PSF.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 nítida 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 por encontrar los píxeles "nítidos" mediante la función de borde. Por prueba y error, determinamos que un nivel de umbral deseable es 0.08.

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

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

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

A los píxeles cercanos a los bordes también se les asigna 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 está suprimido.

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

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

En el ejemplo se muestra cómo 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 recortando por y el número de píxeles en cada dimensión y, a continuación, rellenando 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 píxeles 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 al último.FUNdeconvblind Consulte la sección Parametrización de funciones, en la documentación de MATLAB Mathematics, 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 PSF verdadero.OVERPSF El ajuste de P1 a 2 y P2 a 2 como parámetros en el mismo tamaño hace que el espacio valioso en el mismo tamaño que el verdadero PSF.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 , del 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, , logrado en el paso 3.OVERPSFFUNJ2

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

Consulte también

|

Temas relacionados