matlab非负矩阵实现图片降维

来源:互联网 发布:肯尼迪v5数据 编辑:程序博客网 时间:2024/05/29 02:41

最近在看非负数矩阵,参考了一位博主的文章。非负矩阵的大意是将一个矩阵拆分成为两个较小矩阵。


例如:n*n矩阵,可以分解为n*1的列向量乘以1*n的行向量矩阵。

其原理如下,首先构建两个随机矩阵,然后通过递归的形式,每迭代一次,结果向原矩阵靠近一次。



原博客中matlab代码如下:

clear all;close all;clc;V=double(imread('lena.jpg'));imshow(mat2gray(V));[i u]=size(V);                                    %计算V的规格r=100;                                  %设置分解矩阵的秩W=rand(i,r);                            %初始化WH,为非负数H=rand(r,u);maviter=100;                                    %最大迭代次数for iter=1:maviter    W=W.*((V./(W*H))*H');           %注意这里的三个公式和文中的是对应的    W=W./(ones(i,1)*sum(W));        H=H.*(W'*(V./(W*H)));endimg_V=W*H;figure;imshow(mat2gray(img_V));

经过实际运行发现,该代码只适合处理二维矩阵,如果直接处理三维矩阵,会报错。有兴趣的同学可以自己考虑下,用reshape语句将三维图像降成二维再使用非负矩阵降维处理。

运行结果(左边为原图,右边为非负矩阵压缩过图片):


1.迭代50次



2.迭代100次



3、迭代500次



4、迭代1000次



非负矩阵优势是降维,劣势是迭代次数越多,越精确,但是随着迭代次数的增加,500次左右能够逼近原图,但是1000次和500次之间区别不大。

最后有个问题:如果知道多次次迭代能最接近原图呢?


参考文献: https://www.cnblogs.com/tiandsp/archive/2012/11/13/2768597.html

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 商场化妆品品牌有哪些 商场专柜美陈 商场规划与设计 商场中空美陈 商场防盗磁扣 商场形象墙设计 商场店铺招租 商场中空装饰 商场十一活动策划 商场标志设计 上海国金中心商场 长春这有山景观商场 商均 积分商城 云天商城 必要商城 应用商城 绿叶商城 绿森商城 赞微商城 药房商城 realme商城 海尔商城 电子商城 闪购商城 zol商城 商城路 中关村商城 网络商城 商城县 河南商城县 爱购商城 2688商城 惠购商城 淘吉吉商城 知道商城 国内商城 厂家网商城 正品 商城 招商商城 享云商城