基于R语言SVD的图像压缩方法

图片的基本构成

假设我们有一个灰度图像(128×128,即128×128像素)。我们可以使用矩阵来表示这个图像。如果我们有彩色图像,用R中的readJEPG函数读取图片就可以发现它是由一个三维数组构成(我们常说的三原色:Red, Green, Blue )它有三个矩阵,大小与图像相同, 每个矩阵表示包括RGB色标的颜色值,每个像素由0-255的整数表示。接下来,我们可以通过SVD分解矩阵,再通过消除小的奇异值,我们可以近似矩阵,选择k的值进行矩阵近似,也就是压缩原有矩阵,得到一个保留了原始矩阵大多数信息的压缩矩阵。注意:绘制奇异值图像可能有助于确定重要性显着下降的位置

假设我们选择了k的值,k = 我们希望保留的奇异值的数量,我们可以通过扩展A来生成新的图像矩阵一个使用SVD(第一个k,仅限奇异值)。如果要使用彩色图像,请分别对R,G,B矩阵进行重新组装。
如果你想要得到一个基于原有的彩色图片的灰度图片的话,可以采用: N e w . i m g = 0.299 ∗ r + 0.587 ∗ g + 0.114 ∗ b New.img = 0.299 * r + 0.587 * g + 0.114 * b New.img=0.299r+0.587g+0.114b的公式处理。

如果对SVD(奇异值分解)不了解的话,可以参考我另外一篇有关SVD原理的方面的文章:SVD及PCA的详细原理以及联系

R代码


                
  • 5
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值