Mejora de la realización del filtrado Wiener: investigación sobre el algoritmo de restauración de imágenes del sistema óptico de imágenes de apertura dispersa Chen Hao

        Este documento simplemente implementa el algoritmo de filtrado de Wiener mejorado mencionado en la sección 4.2 de la tesis de maestría de Chen Hao de la Universidad de Zhejiang "Investigación sobre algoritmos de restauración de imágenes para sistemas de imágenes de apertura óptica dispersa" (2017).

        Resumen preliminar: Los diferentes valores de K (la relación entre el ruido y el espectro de potencia de la imagen original) en la función de filtro Wiener corresponden a diferentes efectos de restauración. Cuando el valor de K es relativamente pequeño (10 ^ -4 ~ 10 ^ -3) , el borde de la imagen Hay un efecto de timbre grave y, a medida que K aumenta lentamente, el efecto de timbre se debilita cada vez más hasta que desaparece y, finalmente, la imagen se vuelve cada vez más borrosa. Por ello, el autor propone un algoritmo de filtrado de Wiener mejorado basado en el sistema de evaluación de la calidad de imagen PSNR. El objetivo es seleccionar el valor óptimo de K para que la imagen restaurada obtenida mediante el filtrado de K para Wiener se acerque más a la imagen original (valor de PSNR es el más grande).

        El texto original está en la página 36 del texto principal:

 

        Sin embargo, el texto original no parece tener una introducción detallada a este método, así que considerámoslo de una manera simple: cada vez que K aumenta de cierta manera de 10 ^ -5 a 10 ^ 3, se considera que se debe usar el valor actual de K para realizar el filtrado de Wiener. Si la diferencia entre la imagen restaurada obtenida y la imagen original (es decir, PSNR) es mejor que el valor histórico óptimo, que es similar a la estrategia de atravesar para encontrar el valor máximo, pero el salto de magnitud es demasiado grande, si es 10 ^ -5 ~ a 10 ^ Si viene el principio de magnitud 3, se requieren 10 ^ 8 cálculos, lo que indudablemente aumenta la cantidad de cálculos. Según las observaciones, el límite de salto de K se puede realizar de acuerdo con la curva de valor K y valor PSNR en el texto original: al principio, con el aumento del valor K, PSNR aumenta rápidamente al valor máximo y luego comienza a disminuya cada vez más de manera constante. Establezca el aumento (tamaño de paso) del valor de K en la etapa inicial en 10 ^ -5 niveles, y luego aumente el tamaño de paso de acuerdo con el valor de K, por ejemplo, 10 veces. Por supuesto, la precisión se puede modificar a voluntad según las necesidades o preferencias personales. En el código, la inicialización K es 0 y el tamaño del paso es 1 * 10 ^ -5 (se puede expresar simplemente como 1e-5 en matlab Cuando el valor de K se incrementa a un paso Cuando la longitud es 100 veces mayor, la longitud del paso se incrementa correspondientemente a 10 veces la original, hasta que K sea mayor que 1000, el bucle se detiene.

      En matlab, puede usar directamente la función deconvwnr para realizar operaciones de filtrado de Wiener. Por conveniencia, se resume el uso de la misma función:

Método de llamada Nombre del método Explicación de parámetros

J = deconvwnr (I, psf)

J = deconvwnr (I, psf, nsr)

J = deconvwnr (I, psf, ncorr, icorr)

Filtro de salchicha

psf: función de dispersión de puntos (kernel de convolución)

nsr: Relación ruido-señal de ruido aditivo (K)

ncorr: función de autocorrelación de ruido

icorr: Función de autocorrelación de I

J = deconvlucy(I,psf)

J = deconvlucy(I,psf,iter)

J = deconvlucy(I,psf,iter,dampar)

J = deconvlucy(I,psf,iter,dampar,weight)

J = deconvlucy(I,psf,iter,dampar,weight,readout)

J = deconvlucy(I,psf,iter,dampar,weight,readout,subsample)

Filtrado de Lucy-Richardson

iter: número de iteraciones

dampar: umbral de amortiguación 

peso: matriz de peso

lectura: leer el ruido de la cámara

submuestreo: submuestreo múltiple

[J,psfr] = deconvblind(I,psfi)

[J,psfr] = deconvblind(I,psfi,iter)

[J,psfr] = deconvblind(I,psfi,iter,dampar)

[J,psfr] = deconvblind(I,psfi,iter,dampar,weight)

[J,psfr] = deconvblind(I,psfi,iter,dampar,weight,readout)

[J,psfr] = deconvblind(___,fun)

Deconvolución ciega

psfi: estimación inicial de la función de dispersión de puntos

psfr: función de dispersión de puntos después de la restauración

divertido: el identificador de la función que describe las restricciones adicionales de la función de extensión de puntos

J = deconvreg(I,psf)

J = deconvreg(I,psf,np)

J = deconvreg(I,psf,np,lrange)

J = deconvreg(I,psf,np,lrange,regop)

[J,lagra] = deconvreg(___)

Filtrado por mínimos cuadrados

np: intensidad de ruido aditivo

lrange: busque el rango de solución óptimo

regop : 正 reg 算 子

lagra: multiplicador de Lagrange

        El psf es equivalente al kernel de convolución, que se lee desde el archivo y también se puede configurar de otras formas. psnr puede llamar directamente a funciones de matlab, o puede implementarse manualmente. Los datos son una matriz de n * 4 dimensiones y cada fila almacena el número correspondiente de cálculos, el valor K, el tamaño del paso y el valor PSNR para cada cálculo.

        El código y los comentarios son los siguientes, y usted mismo puede ajustar las condiciones correspondientes:

clc
clear
close all
f=rgb2gray(imread('timg.jpg'));
[m,n]=size(f);
Psf=load('psfdata.txt');
%   C=uint8(conv2(f,Psf,'same')); %另一种卷积方式
C = imfilter(f,Psf,'conv','circular'); %卷积得到模糊图像
K=0;
step=1e-5; %步长 
Img=[];%最大PSNR对应的图像
best_PNSR=-Inf;%最大值
best_K=-Inf;%最大值对应的K
t=1;%计算次数
while K<=1000
    img=deconvwnr(C,Psf,K);%维纳滤波
    new_PSNR=psnr(img,f);%计算滤波复原后的图像与原图的PSNR值
    data(t,1:4)=[t,K,step,new_PSNR];%储存次数、K值、步长、PSNR值
    if new_PSNR>best_PNSR%最大PSNR对应的更新
        best_PNSR=new_PSNR;
        best_K=K;
        Img=img;
    end
    if K/step>100%步长的更新
        step=step*10;
    end
    K=K+step;%K值的更新
    t=t+1;
end
%对K值和PSNR值进行绘制,由于图像前后差距过大,只取前120行
x=data(1:120,2);
y=data(1:120,4);
plot(x,y)
xlabel('K值')
ylabel('PSNR')
figure,
subplot(131),imshow(f),title('原始图像')
subplot(132),imshow(C),title('模糊图像')
subplot(133),imshow(Img),title('复原图像')

Los resultados de la ejecución son los siguientes: 

Imagen borrosa PSNR: 19.9984

PSNR de la imagen restaurada: 27.3320

Supongo que te gusta

Origin blog.csdn.net/qq_36614557/article/details/108392989
Recomendado
Clasificación