matlab非负矩阵分解(添加彩色图片灰度化)

matlab非负矩阵分解(添加彩色图片灰度化)

先上代码吧~引用了别人的https://www.cnblogs.com/tiandsp/archive/2012/11/13/2768597.html

clear all;  
close all;
clc;                                    %清空命令行窗口

pic = imread('1.jpg');               	%imread读取灰度或者彩色图像
[d1,d2,d3] = size(pic);
if d3 > 2                               %判断是否是彩色图片
    gray_pic = rgb2gray(pic);           %将彩色图片灰度化
else
    gray_pic = pic;
end
V=double(gray_pic);                    
imshow(mat2gray(V));                    %mat2gray将矩阵v归一化,每个值在0,1

[i,u]=size(V);                          %计算V的规格,i行 u列
r=100;                                  %设置分解矩阵的秩
W=rand(i,r);                            %初始化W,H,为非负数
H=rand(r,u);
maviter=500;                            %最大迭代次数,越大越越接近原图
for iter=1:maviter
    W=W.*((V./(W*H))*H');               
    W=W./(ones(i,1)*sum(W));            %ones(i,1)产生一个i行1列的矩阵
    H=H.*(W'*(V./(W*H)));
end

img_V=W*H;
figure;
imshow(mat2gray(img_V));
  

因为第一次接触matlab,所以注释写得很详细。代码引用了很多大佬的,然后自己添加了判断彩色图片,然后将彩色图片灰度化的部分。

说说自己遇到的几个问题

(1)因为第一次接触matlab和非负矩阵分解,很多细节不知道,虽然用了大佬的代码,但是我把图片换了,是彩色的,再运行代码就跑不起来了。冥思苦想,各种百度,最后才知道彩色图片是三维的,然而非负矩阵分解是二维的,知道自己错在哪了,那接下来就是开始改正,开始做彩色图片灰度化。

(2)在灰度化中,我第一次尝试时,文件名保存为gray.m,然后报错了,下面放图:
在这里插入图片描述
遇到这种情况,就改文件名就好了 哈哈哈哈哈哈

效果图:
在这里插入图片描述灰度化的

好的,这次就记录这些吧,好好看论文了。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zheng113

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值