pca图像去噪 matlab
时间: 2023-11-17 11:09:04 浏览: 169
Matlab源码 基于鲁棒PCA图像去噪.zip
5星 · 资源好评率100%
PCA(Principal Component Analysis)是一种常用的数据降维方法,也可以用于图像去噪。下面是使用PCA进行图像去噪的Matlab代码:
```matlab
% 读取图像
img = imread('lena.png');
% 转换为灰度图像
img = rgb2gray(img);
% 加入高斯噪声
noise_img = imnoise(img, 'gaussian', 0, 0.01);
% 显示原图和加噪声后的图像
subplot(1,3,1);imshow(img);title('Original Image');
subplot(1,3,2);imshow(noise_img);title('Noisy Image');
% PCA去噪
% 将图像转换为向量形式
X = double(reshape(noise_img,[],1));
% 计算协方差矩阵
C = cov(X);
% 计算特征值和特征向量
[V,D] = eig(C);
% 对特征值进行排序
D = diag(D);
[D,idx] = sort(D,'descend');
V = V(:,idx);
% 选择前k个特征向量
k = 50;
Vk = V(:,1:k);
% 计算投影矩阵
P = Vk*Vk';
% 进行投影
Xp = P*X;
% 将投影后的向量转换为图像
pca_img = reshape(Xp,size(noise_img));
% 显示去噪后的图像
subplot(1,3,3);imshow(uint8(pca_img));title('PCA Denoised Image');
```
上述代码中,我们首先读取一张图像,并将其转换为灰度图像。然后,我们使用`imnoise`函数向图像中添加高斯噪声。接着,我们将图像转换为向量形式,并计算其协方差矩阵。然后,我们计算协方差矩阵的特征值和特征向量,并对特征值进行排序。我们选择前k个特征向量,并计算投影矩阵。最后,我们将投影后的向量转换为图像,并显示去噪后的图像。
阅读全文