【MATLAB图像处理实用案例详解(12)】——利用BP神经网络实现图像压缩

news/2024/7/21 6:05:39 标签: matlab, 图像处理, 神经网络

目录

    • 一、图像压缩
    • 二、BP神经网络实现图像压缩原理
    • 三、算法步骤
      • 3.1 图像块划分
      • 3.2 归一化
      • 3.3 建立BP神经网络
      • 3.4 保存结果
    • 四、效果演示

一、图像压缩

常见的文件压缩软件如WinZip、WinRAR等采用的是无损压缩,能够完全恢复原文件内容。多媒体信息具有信息量大、冗余信息多的特点,往往采用有损压缩技术。

  1. 根据大面积着色原理,图像必须在一定面积内存在相同或相似的颜色,对于人眼的观察来说才有意义,否则看到的只是杂乱无章的雪花。因此,图像中相邻象素间存在相似性,这样就产生了图像的预测编码。
  2. 由于存在视觉的掩盖效应,因此人眼对于颜色细节往往并不敏感。图像信息上的微小损失往往是无法感知或可以接受的,这样就提供了广阔的压缩空间
  3. 数据都存在统计上的冗余,如在某一幅描绘海洋的图像中,蓝颜色出现的频率可能远高于红颜色,通过去除统计上的冗余同样可以实现压缩。

二、BP神经网络实现图像压缩原理

BP神经网络用于压缩 :
只采用一个隐含层,因此整体构成了一个三层的网络。

把一组输入模式通过少量的隐含层单元映射到一组输出模式,并使输出模式尽可能等于输入模式。因此,隐含层神经元的值和相应的权值向量可以输出一个与原输入模式相同的向量。当隐含层的神经元个数较少时,就意味着隐含层能用更少的数来表现输入模式,而这实际上就是压缩。
在这里插入图片描述
第一层为输入层,中间层为隐含层,网络的映射功能依赖隐含层实现。输入层到隐含层的变换相当于压缩的编码过程;而从隐含层到输出层的变换则相当于解码过程。
在这里插入图片描述
假设输入图像为像素 N ∗ N N*N NN大小,被细分为多个 n ∗ n n*n nn的图像块。如果将图像块中每一个像素点与一个输入或输出神经元相对应
在这里插入图片描述
网络随机地抽取图像中各 n ∗ n n*n nn图像块作为学习模式,使用反向传播算法进行学习,通过调整网络中神经元之间的连接权值,使训练集图像的重建误差 E=f-g 的均值达到最小。

其主要流程图如下:
在这里插入图片描述

三、算法步骤

主要步骤如下:

3.1 图像块划分

为简单起见,这里将所有输入图像大小调整为128x128像素大小。为了控制神经网络规模,规定网络输入神经元节点个数为16个,即将图像划分为1024个4x4大小的图像块,将每个图像块作为一一个样本向量,保存为16x1024大小的样矩阵。
在这里插入图片描述
具体代码如下:

matlab">function P=block_divide(I,K)
%实现图像分块
%输入:I——二维矩阵,且图像的行数和列数都是K的倍数;
%输出:当K=4时,输出是一个16*N的矩阵
%计算块的个数
[row,col]=size(I);
R=row/K;
C=col/K;
%预分配空间
P=zeros(K*K,R*C);
for i=1:R
    for j=1:C
        %依次取K*K图像块
        I2=I((i-1)*K+1:i*K,(j-1)*K+1:j*K);
        %将K*K块变为列向量
        I3=reshape(I2,K*K,1);
        %将列向量放入矩阵
        P(:,(i-1)*R+j)=I3;
    end
end
end

3.2 归一化

神经网络的输入样本一般都需要进行归一化处理,这样更能保证性能的稳定性。归一化可以使用mapminmax函数进行,考虑到图像数据的特殊性,像素点灰度值为整数,且处于0-255之间,因此归一化处理统一将数据除以255即可。
归一化代码如下:

matlab">P=double(P)/255;

3.3 建立BP神经网络

采用MATLAB神经网络工具箱的feedforwardnet函数创建BP网络,并指定训练算法。为了达到较好效果,采用LM训练法。
代码如下:

matlab">net=feedforwardnet(N,'trainlm');
T=P;
net.trainParam.goal=1e-3;
net.trainParam.epochs=500;
tic
net=train(net,P,T);
toc

3.4 保存结果

保存结果。训练完成后,压缩的结果是每个输入模式对应的隐含层神经元向量的值,以及网络的权值和阈值。 使用save命令保存为MAT文件。

matlab">save comp com minlw maxlw minb maxb mind maxd

四、效果演示

压缩过程如下:
在这里插入图片描述
解压过程如下:
原始图像和压缩重建图像如下:
在这里插入图片描述
PSNR:
29.2312

rate:
0.2766


如果需要源代码,可以参考资源:https://download.csdn.net/download/didi_ya/87734433。
制作不易,如果对你有所帮助,记得点个赞哟~


http://www.niftyadmin.cn/n/267763.html

相关文章

基于无线传感器网络(WSN) 查找两个节点之间的最短路径并发送数据(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 本代码基于无线传感器网络,在两个节点(源节点和目标节点)之间找到最短路径,并开…

Cilium架构简介eBPF数据流向查看

1 环境准备 上一篇文章将 k8s 的网络插件改为 cilium 同时部署了观测平台 hubble,部署方式可参考上篇。 基于eBPF的k8s网络插件Cilium部署与流量治理浅尝 本篇讲一下 cilium 的架构和数据流向的查看方式。首先,你需要一个kubernetes集群,并使…

强烈建议互联网人转战实体和农业,去了就是降维打击!实体太缺人才了,老板也不缺钱!...

大环境不好,互联网人该何去何从? 一位网友提出了一个新思路:强烈建议互联网同学转战实体、农业这些行业。实体真的太缺人才了,目前大部分实体都留下70后、80后在继续奋斗。其实实体老板很多都不缺钱,经过多年积累&…

《编程思维与实践》1039.字符组合

《编程思维与实践》1039.字符组合 题目 思路 先将字符串去重排序(保证每个组合中的字符按字典序),然后枚举出所有组合的情形,最后再进行字典序排序即可. 其中字符串的去重排序可以利用ASCII码值进行桶排序,关键在于如何枚举所有组合的情形. 每个位置有两种可能(选或不选),但至…

Linux_红帽8学习笔记分享_6(yum软件仓库技术)

Linux_红帽8学习笔记分享_6(yum软件仓库技术) 文章目录 Linux_红帽8学习笔记分享_6(yum软件仓库技术)1. RPM软件包的使用技巧1.1如何查询指定软件包是否安装1.2如何删除指定软件包1.3如何安装指定软件包1.5依赖关系 2. YUM软件仓库的配置及使用2.1修改YUM软件仓库的配置文件 3.…

力扣二叉树专题(五)- 左叶子之和、找树左下角的值、路径总和、从中序与后序遍历序列构造二叉树、从前序与中序遍历序列构造二叉树、最大二叉树 C++实现 总结

文章目录 一、404.左叶子之和二、513. 找树左下角的值三、112. 路径总和四、106.从中序与后序遍历序列构造二叉树五、相关题-105.从前序与中序遍历序列构造二叉树六、654.最大二叉树总结 一、404.左叶子之和 注意点: 是左叶子,不是左节点!&…

神策营销云时效性升级,秒级营销即刻开启

信息化时代,时效性成为企业营销与管理的重要竞争力之一。高时效营销能够帮助企业提高决策效率、降低成本,“争分夺秒”留住用户并给用户带来更好的体验,它是促成企业成功营销的关键。 为了帮助企业全面提升营销时效性,神策营销云即…

探究云计算的未来:优势与趋势以及应用案例分析

随着数字化转型的不断深入,企业越来越需要大规模、高效、灵活的计算能力来支撑业务的快速发展。云计算作为一种新兴的信息技术,正逐渐成为企业选择的重要方向。那么,云计算究竟有哪些优势?未来发展趋势又是怎样的呢?接…