当前位置:文档之家› 对图片的卡尔曼滤波matlab程序

对图片的卡尔曼滤波matlab程序

clc;
close all;
mine = imread('E:\matlab program\DSP\小井.jpg'); %读取图像
show_size = size(mine) %显示图像尺寸
figure(1);
imshow(mine); %显示无噪图像
mine_noise = imnoise(mine,'gaussian',0,0.02); %对给定图像加高斯白噪声
figure(2);
subplot(2,1,1);
imshow(mine_noise); %显示有噪图像
title('加噪后');
[r1,c1,m] = size(mine_noise)
imwrite(mine_noise,'小井_2.jpg','jpg'); %写加噪图像,保存成图像文件小井_2.jpg
mine_noise = double(mine_noise)/255; %uint转化成double类型

P = 3; %先验误差估计协方差初始值
Q = 0.25; %过程白噪协方差
R = 0.25; %观测白噪协方差
A = 1; %系统矩阵
H = 1; %观测矩阵

X = mine_noise(1,:,:); %读取加噪图像第一行
mine_alter = zeros(r1,c1,m);
mine_alter(1,:,:) = X;
for K = 2:r1;
X = A * X; %X(k|k-1) = A X(k-1|k-1) + B U(k)
P = A * P * A' + Q; %P(k|k-1) = A P(k-1|k-1) A’+ Q
Kg = P * H'/(H * P * H' + R); %Kg(k) = P(k|k-1) H’ / (H P(k|k-1) H’ + R)
X = X + Kg * (mine_noise(K - 1,:,:) - H * X); %X(k|k) = X(k|k-1) + Kg(k)(Z(k) - H X(k|k-1))
P = (1 - Kg * H) * P; %P(k|k) =(I - Kg(k) H)P(k|k-1)
mine_alter(K,:,:) = X; %保存像素值
end

% mine_alter = im2uint8(mine_alter);
subplot(2,1,2);
imshow(mine_alter);title('卡尔曼滤波后');

相关主题
文本预览
相关文档 最新文档