Reducción de desenfoque de movimiento|Filtro Wiener|Procesamiento de imágenes

prefacio

那么这里博主先安利一些干货满满的专栏了!

这两个都是博主在学习Linux操作系统过程中的记录,希望对大家的学习有帮助!

操作系统Operating Syshttps://blog.csdn.net/yu_cblog/category_12165502.html?spm=1001.2014.3001.5482Linux Sys https://blog.csdn.net/yu_cblog/category_11786077.html?spm=1001.2014.3001.5482 Estas dos son columnas para que los bloggers aprendan estructuras de datos y simulen varios contenedores en la biblioteca de plantillas estándar STL.

Análisis de código fuente STL https://blog.csdn.net/yu_cblog/category_11983210.html?spm=1001.2014.3001.5482 estructura de datos desgarrada a mano https://blog.csdn.net/yu_cblog/category_11490888.html


1. Resumen 

Este informe utiliza Matlab para realizar el filtrado Wiener y restaurar imágenes borrosas.

2. Contenido y propósito del experimento

Comprenda los principios del desenfoque de movimiento y el ruido, y aprenda el principio del filtrado de Wiener para reducir el desenfoque de movimiento. Al mismo tiempo, la restauración de imágenes borrosas se realiza a través del código Matlab.

3. Descripción de los principios experimentales relevantes

Procedimiento experimental

El flujo es el siguiente:

  • Desenfoque de movimiento de la imagen original (imagen en escala de grises)

  • Agregue ruido gaussiano a la imagen original

  • Construir un filtro Wiener

Desenfoque de movimiento

El desenfoque de movimiento es el fenómeno en el que las imágenes se ven borrosas debido al movimiento de la cámara o del objeto. El principio se puede describir mediante funciones analógicas. Suponiendo que durante un período de tiempo, un objeto o cámara x_0se mueve de una posición a otra x_1, el desenfoque durante ese período de tiempo se puede describir como una fórmula.
h(t)=\left\{\begin{array}{ll} \frac{1}{t_{\text {exposición}}}, & 0 \leq t \leq t_{\text {exposición}} \\ 0, & \text {de lo contrario} \end{matriz}\right.

donde t_\text{exposición}está el tiempo de exposición, el tiempo que la lente de la cámara está abierta. Esta función indica que durante el tiempo de exposición de un objeto en movimiento o cámara, la imagen del objeto tendrá un cierto desplazamiento en el plano de la imagen, lo que hará que la imagen se vea borrosa. En el dominio del aire, esta función puede representar una fórmula.
h(x, y)=\left\{\begin{array}{ll} \frac{1}{t_{\text {exposición}}}, & \text { if } a x+b y+c \leq 0 \\ 0, & \text { de lo contrario } \end{matriz}\right.
donde a,b,c son parámetros que describen la dirección y la velocidad del movimiento. Puede verse que esta función se expresa como una función lineal en el plano de la imagen, que representa la dirección de movimiento y la velocidad de la imagen del objeto en el plano de la imagen dentro del tiempo de exposición de la cámara.

Se puede obtener una imagen borrosa realizando una operación de convolución en la función de desenfoque de movimiento. Suponiendo que f(x,y) es la imagen original, g(x,y) es la imagen borrosa y h(x,y) es la función de desenfoque de movimiento, el cálculo de la imagen es como se muestra en la fórmula.

g(x, y)=h(x, y) * f(x, y)=\iint_{-\infty}^{\infty} h(\xi, \eta) f(x-\xi, y- \eta) d \xi d \eta

donde \ astrepresenta la operación de convolución. Se puede observar que la operación de convolución representa el promedio ponderado de la imagen original bajo la función de desenfoque, y se obtiene la imagen desenfocada.

En Matlab, podemos llamar directamente a la opción 'movimiento' de la función fspecial para completar la transformación del desenfoque de movimiento, parte del código es el siguiente:

%% 步骤1:添加运动模糊
img = imread('图像路径'); % 读入图像
img = rgb2gray(img);
motion_kernel_size = 31; % 运动模糊核大小
motion_angle = 30; % 运动方向(角度)
motion_distance = 15; % 运动距离(像素)
motion_kernel = fspecial('motion', motion_distance, motion_angle); % 生成运动模糊核
blurred_img = imfilter(img, motion_kernel, 'conv', 'circular'); % 对原始图像进行运动模糊
figure;
imshow(blurred_img);

ruido gaussiano

El ruido gaussiano es una señal aleatoria continua cuya función de densidad de probabilidad se ajusta a una distribución normal. La distribución normal es una distribución de probabilidad común, también conocida como distribución gaussiana, y su función de densidad de probabilidad se muestra en la fórmula.
f(x)=\frac{1}{\sigma \sqrt{2 \pi}} e^{-\frac{(x-\mu)^{2}}{2 \sigma^{2}}}

donde \mues la media de la distribución y \sigmaes la desviación estándar, Xque representa una variable aleatoria.

%% 步骤2:添加高斯噪声
noise_mean = 0; % 噪声均值
noise_var = 0.01; % 噪声方差
blurred_img = imnoise(blurred_img, 'gaussian', noise_mean, noise_var); % 添加高斯噪声
% figure;
% imshow(blurred_img);

Construir un filtro Wiener

En los pasos de construcción del filtro de Wiener, la transformación de la matriz se realiza en el dominio de la frecuencia.

Obtenga la transformada de Fourier del filtro de desenfoque de movimiento

El principio se muestra en la fórmula.
H(u,v) = \mathcal{F} (Núcleo de movimiento)

Entre ellos, \mathcal{F}representa la transformada de Fourier, H(u,v)representa la matriz de dominio de frecuencia del filtro de desenfoque de movimiento y MotionKernelrepresenta el kernel de desenfoque de movimiento generado por los pasos anteriores.

Extraer componentes de ruido

El principio se muestra en la fórmula.
N(u,v) = \mathcal{F}(img_{ruido}-img_{original})

Donde \mathcal{F}representa la transformada de Fourier, N(u,v)representa el componente de ruido en el dominio de la frecuencia, img_{ruido}representa la matriz de imagen de ruido después del procesamiento de ruido gaussiano y img_{original}representa la matriz original.

Obtener imagen sin degradar

El principio se muestra en la fórmula.
F(u,v) = \mathcal{F}(img_{original})

Construyendo un filtro de Venus

El principio del filtro se muestra en la siguiente fórmula.

El método de cálculo de la relación señal-ruido K se muestra en la fórmula.

K = \frac{|N(u,v)|^{2}}{|F(u,v)|^{2}}
obtener una imagen borrosa

El principio se muestra en la fórmula.
G(u,v) = \mathcal{F}(img_{vago})
Entre ellos \mathcal{F}, representa la transformada de Fourier, img_{vago}representa la imagen después del desenfoque de movimiento y Jefe)representa la representación del dominio de frecuencia de la imagen borrosa.

restaurar imagen

El principio se muestra en la fórmula.

F'(u,v) = G(u,v)\cdot\hat{F}(u,v)
El código de Matlab para construir la parte del filtro Wiener es el siguiente:

%% 步骤2:添加高斯噪声
noise_mean = 0; % 噪声均值
noise_var = 0.01; % 噪声方差
blurred_img = imnoise(blurred_img, 'gaussian', noise_mean, noise_var); % 添加高斯噪声
% figure;
% imshow(blurred_img);
%% 步骤3:构建维纳滤波器
% 1. 构建运动模糊滤波器的傅里叶变化
[m,n] = size(img);
H = fft2(motion_kernel,m,n);
% 2. 提取噪声分量
N = fft2(blurred_img - img);
% 3. 获取未退化图片
F = fft2(img);
% 4. 计算信噪比NSR
K = (abs(N).^2)./(abs(F).^2);
% 5. 搭建维纳滤波器
H_square = abs(H).*abs(H);
F_hat = (1./H).*(H_square./(H_square+K));
% 6. 获取模糊图片
G = fft2(blurred_img);
% 7. 还原图片
F_img = G .* F_hat;

4. Resultados experimentales

Cinco, el código general 
 

%% 步骤1:添加运动模糊
img_o = imread('图片路径'); % 读入图像
img = rgb2gray(img_o);
motion_kernel_size = 31; % 运动模糊核大小
motion_angle = 30; % 运动方向(角度)
motion_distance = 15; % 运动距离(像素)
motion_kernel = fspecial('motion', motion_distance, motion_angle); % 生成运动模糊核
G_img = imfilter(img, motion_kernel, 'conv', 'circular'); % 对原始图像进行运动模糊
% figure;
% imshow(blurred_img);
%% 步骤2:添加高斯噪声
noise_mean = 0; % 噪声均值
noise_var = 0.01; % 噪声方差
blurred_img = imnoise(img, 'gaussian', noise_mean, noise_var); % 添加高斯噪声
% figure;
% imshow(blurred_img);
%% 步骤3:构建维纳滤波器
% 1. 构建运动模糊滤波器的傅里叶变化
[m,n] = size(img);
H = fft2(motion_kernel,m,n);
% 2. 提取噪声分量
N = fft2(blurred_img - img);
% 3. 获取未退化图片
F = fft2(img);
% 4. 计算信噪比NSR
K = (abs(N).^2)./(abs(F).^2);
% 5. 搭建维纳滤波器
H_square = abs(H).*abs(H);
F_hat = (1./H).*(H_square./(H_square+K));
% 6. 获取模糊图片
G = fft2(G_img);
% 7. 还原图片
F_img = G .* F_hat;
%% 步骤4:应用维纳滤波器并还原图像
f_img = uint8(ifft2(F_img));
figure;
hold on;
% title('原图');
% imshow(img_o);
% title('灰度图');
% imshow(img);
% title('运动模糊后的图像');
% imshow(G_img);
% title('还原后的图像');
imshow(f_img);

Supongo que te gusta

Origin blog.csdn.net/Yu_Cblog/article/details/131751372
Recomendado
Clasificación