没有合适的资源?快使用搜索试试~ 我知道了~
课后习题-维纳滤波代码
需积分: 0 0 下载量 143 浏览量
2024-05-17
13:23:50
上传
评论
收藏 2.57MB DOCX 举报
温馨提示
试读
19页
clc; clear; close all; % 课本图 5.28 % 读取图片 im = imread('plane.jpg'); % 原始图像 480x480 uint8 % 图像退化(大气湍流模型) % Output(H:退化模型, im_f:退化后图片) [H, im_f] = atmoTurbulence(im,0.0025); % 全逆滤波,半径受限逆滤波 D0 = 85; % Input(im_f:退化图片,H:退化模型,D0:半径) % Output(im_inverse:全逆滤波结果,im_inverse_b:半径受限逆滤波) [im_inverse, im_inverse_b] = my_inverse(im_f, H, D0); % [im_inverse, im_inverse_b] = my_inverse_F(im_f, H, D0,0.001); % 维纳滤波 K = 0.0001; % Input(im_f:退化图片,H:退化模型,K:维纳滤波常数) im_wiener = my_wiener(im_f, H,
资源推荐
资源详情
资源评论
原图
代替图 5.27
(a)用全滤波的结果 (b)半径为 40 时的结果
(c)半径为 70 时的结果 (d)半径为 85 时的结果
主程序:
clc;
clear;
close all;
% 课本图 5.28
% 读取图片
im = imread('plane.jpg'); % 原始图像 480x480 uint8
% 图像退化(大气湍流模型)
% Output(H:退化模型, im_f:退化后图片)
[H, im_f] = atmoTurbulence(im,0.0025);
% 全逆滤波,半径受限逆滤波
D0 = 85;
% Input(im_f:退化图片,H:退化模型,D0:半径)
% Output(im_inverse:全逆滤波结果,im_inverse_b:半径受限逆
滤波)
[im_inverse, im_inverse_b] = my_inverse(im_f, H, D0);
% [im_inverse, im_inverse_b] = my_inverse_F(im_f, H,
D0,0.001);
% 维纳滤波
K = 0.0001;
% Input(im_f:退化图片,H:退化模型,K:维纳滤波常数)
im_wiener = my_wiener(im_f, H, K);
% 显示结果
imshow(im); title('原图');
figure;imshow(im_f); title('大气湍流(k=0.0025)');
figure;imshow(im_inverse); title('全逆滤波');
figure;imshow(im_inverse_b); title('半径受限的逆滤波');
figure;imshow(im_wiener); title('维纳滤波');
///////////////////////////////////////////////////////
atmoTurbulence 函数
function [H,image_out] = atmoTurbulence(image_in, k)
% 模拟受大气湍流影响得到的图像
% 输入为初始灰度图像,大气湍流模型的系数 k
% 输出为受到大气湍流影响的结果图像
% 该实现方法没有对原图像进行填充。
[m, n] = size(image_in);
fp = zeros(m, n);
% 中心化
for i = 1 : m
for j = 1 : n
fp(i, j) = double(image_in(i,j)) * (-1)^(i+j);
end
end
% 傅里叶变换
F1 = fft2(fp);
% 变换中心
p = m / 2 + 1.0;
q = n / 2 + 1.0;
% 生成大气湍流模型函数
H = zeros(m, n);
for u = 1 : m
for v = 1 : n
temp1 = (u-p)^2+(v-q)^2;
H(u,v) = exp((-k)*(temp1^(5/6)));
end
end
% 滤波
G = H .* F1;
% 反傅里叶变换,并取实部
gp = real(ifft2(G));
% 反中心化
g = zeros(m, n);
for i = 1 : m
for j = 1 : n
g(i, j) = gp(i, j) * (-1)^(i+j);
end
end
% 归一化输出图像到[0, 255],g 取 uint8 的结果与课本一致
image_out = zeros(m, n, 'uint8');
mmax = max(g(:));
mmin = min(g(:));
range = mmax-mmin;
for i = 1 : m
for j = 1 : n
image_out(i,j) = uint8(255 * (g(i, j)-mmin) /
range);
end
end
end
///////////////////////////////////////////////////////
my_inverse 函数
剩余18页未读,继续阅读
资源评论
早點睡覺比什麼都強
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功