不添加噪声,添加运动模糊
时间: 2023-08-29 11:06:09 浏览: 36
好的,以下是基于LR算法的matlab图像复原代码,用于复原添加了运动模糊的图像。您可以根据需要修改和优化代码:
```matlab
% 读取需要复原的图像
im = imread('input.jpg');
% 将图像转换为灰度图
im_gray = rgb2gray(im);
% 显示原始图像
subplot(1,2,1);
imshow(im_gray);
title('Original Image');
% 添加运动模糊
motion_kernel = fspecial('motion', 20, 45);
im_blur = imfilter(im_gray, motion_kernel, 'conv', 'circular');
% 显示加入运动模糊的图像
subplot(1,2,2);
imshow(im_blur);
title('Blurred Image');
% LR算法参数设置
lambda = 0.1;
delta = 0.1;
max_iter = 100;
% 图像复原
im_restore = LR(im_blur, lambda, delta, max_iter);
% 显示复原后的图像
figure;
imshow(im_restore);
title('Restored Image');
% LR算法函数
function im_restore = LR(im_blur, lambda, delta, max_iter)
% 将图像转换为double类型
im_blur = im2double(im_blur);
[m,n] = size(im_blur);
% 初始化
im_restore = im_blur;
% 迭代
for k = 1:max_iter
% 计算梯度
dx = imfilter(im_restore, [1 -1], 'symmetric');
dy = imfilter(im_restore, [1 -1]', 'symmetric');
% 更新图像
im_restore = im_restore + delta*(lambda*div(dx,dy) - im_restore + im_blur);
end
end
% 计算梯度的div函数
function div_f = div(dx,dy)
[m,n] = size(dx);
div_f = zeros(m,n);
div_f(1:end-1,:) = div_f(1:end-1,:) + dx(1:end-1,:);
div_f(2:end,:) = div_f(2:end,:) - dx(1:end-1,:);
div_f(:,1:end-1) = div_f(:,1:end-1) + dy(:,1:end-1);
div_f(:,2:end) = div_f(:,2:end) - dy(:,1:end-1);
end
```
在这个代码中,我们使用了 `fspecial` 函数来生成一个运动模糊的卷积核,然后使用 `imfilter` 函数将其应用于原始图像。然后,我们使用类似的LR算法参数和迭代步骤来复原图像。您可以根据需要修改参数,例如lambda和delta,来获得更好的结果。