PCA图像压缩的matlab实现
2016-04-03 21:08
495 查看
PCA
function pca_test clear;close all; img=imread('lena.png'); figure(1),subplot(121),imshow(img,[]);title('Original Image'); [M N] = size(img); f = double(img); bs = 16; %图像块尺寸 p = 30; %保留的维数 % PCA图像压缩 g = im2col(f, [bs bs], 'distinct'); %将图像块转换成列矢量表示 g_m = ones(size(g,1),1)*mean(g); %计算每个块的灰度均值 g = g - g_m; [E D]=fun_pca(g); E_proj = E(:,1:p); %取最大的p个特征值所对应的特征矢量进行降维 g_proj = g'*E_proj; %从bs*bs维映射到p维 % 恢复图像 g_rec = g_proj*E_proj'; s = g_rec' + g_m; s = col2im(s, [bs bs], [M N], 'distinct'); figure(1),subplot(122),imshow(s,[]);title('Recovered Image'); function [E,D] = fun_pca(X) % do PCA on image patches % INPUT variables: % X matrix with image patches as columns % OUTPUT variables: % E 特征矢量(第一列对应最大特征值) % D 特征值(按下降顺序排列) % Calculate the eigenvalues and eigenvectors covarianceMatrix = X*X'/(size(X,2)-1); [E, D] = eig(covarianceMatrix); % Sort the eigenvalues and recompute matrices [d_out,order] = sort(diag(D),'descend'); E = E(:,order); d = diag(D); D = diag(d(order));
相关文章推荐
- matlab矩阵的定义和运算
- matlab 取整函数的使用
- 多分类问题中每一类的Precision-Recall Curve曲线以及ROC的Matlab画法
- 多分类问题中混淆矩阵(Confusion Matrix)的Matlab画法
- MATLAB笔记
- matlab matconvnet
- matlab多变量牛顿方法求解非线性方程组
- 数据挖掘-matlab实现基于MovieLens数据集的协同过滤电影推荐系统
- 初学决策树之用Matlab工具箱函数实现性别识别
- matlab之simulink仿真入门
- matlab下利用K-Means进行图像分类
- 用matlab实现视频的空间滤波和直方图均衡化
- DES算法的matlab实现
- matlab练习程序(结构张量structure tensor)
- 【matlab】:颜色模型的分类及颜色模型的转换简介
- ubuntu系统安装Matlab2014a
- Matlab中三维直方图的显示方法
- Matlab函数(二)
- Matlab函数(一)
- Matlab中以三维的方式显示灰度图像