当前位置: 首页 > news >正文

PCA Jittering 图像增强

文章目录

  • PCA Jittering
    • 具体流程
    • 具体步骤
    • 参考文献

PCA Jittering

PCA Jittering [ 1 ] ^{[1]} [1] 可以找出图像 RGB 通道中的主要色系,并大幅改变主要色系的值,而图像的整体色调不发生改变。简言之,PCA Jittering 通过扰动颜色通道,在不过度扭曲图像语义的前提下,提升了模型对颜色变化的鲁棒性,因此也是一种有效的图像增强方法。效果图如下:

在这里插入图片描述



具体流程

PCA Jittering的具体流程 [ 2 ] ^{[2]} [2]:首先,对整个训练集图像的 RGB 三通道进行主成分分析,得到协方差矩阵,并计算特征值和特征向量;其次,在特征值中添加高斯抖动(Jittering),并将特征值与特征向量相乘;最后,将相乘后的结果添加到原图像中,从而改变原图像 RGB 三通道的强度,并将通过 PCA Jittering 处理过的图像添加到训练集中进行训练,从而增加训练集的数量,具体流程图如下:

在这里插入图片描述



具体步骤

  1. 获取原图像 I x y I_\mathrm{xy} Ixy,拆分原图像 I x y I_\mathrm{xy} Ixy 的 RGB 三通道,得到三通道的值 I x y R 、 I x y G 、 I x y B 。 I_{xy}^R、I_{xy}^G、I_{xy}^B。 IxyRIxyGIxyB

  2. I x y R I_{xy}^R IxyR 为例,为了消除奇异数据的影响,对 I x y R I_{xy}^R IxyR 进行归一化。归一化的公式如下:

I x y R = I x y R 255.0 I_{xy}^R=\frac{I_{xy}^R}{255.0} IxyR=255.0IxyR

  1. 为消除不同量纲的影响,对 I x y R I_{xy}^R IxyR 进行标准化。标准化公式如下:

g i j R = x i j R − μ R σ R g_{ij}^{R}=\frac{x_{ij}^{R}-\mu^{R}}{\sigma^{R}} gijR=σRxijRμR

其中, x i j R x_{ij}^{R} xijR 表示原图 R R R 通道图像的第 i i i 行、第 j j j 列的灰度值; g i j R g_{ij}^{R} gijR 表示原图 R R R 通道图像第 i i i 行、第 j j j标准化后的灰度值; μ R \mu^R μR 表示 R R R 通道的算术平均值,由下式表示:
μ R = 1 n × m ∑ i = 1 n ∑ i = 1 m x i j R \mu^R=\frac1{n\times m}\sum_{i=1}^n\sum_{i=1}^mx_{ij}^R μR=n×m1i=1ni=1mxijR
上式中, n n n 表示图像的行数, m m m 表示图像的列数; σ R \sigma^R σR 表示 R R R 通道的标准差,公式如下:
σ R = 1 n − 1 ∑ i = 1 n ( x i j R − μ R ) 2 \sigma^R=\sqrt{\frac{1}{n-1}\sum_{i=1}^n(x_{ij}^R-\mu^R)^2} σR=n11i=1n(xijRμR)2

  1. 将标准化后的 g i j R g_{ij}^R gijR 展开成一列向量 g R = [ g 1 R g 2 R … g m × n R ] T g^R=\begin{bmatrix}g_1^R&g_2^R&\ldots&g_{m\times n}^R\end{bmatrix}^\mathrm{T} gR=[g1Rg2Rgm×nR]T

  2. I x y G I_{xy}^G IxyG I x y B I_{xy}^B IxyB 的处理方法与 I x y R I_xy^R IxyR相同,处理完后会得到 G G G 通道和 B B B 通道标准化后的向量
    g G g^G gG g B g^B gB。接着将 g R g^R gR g G g^G gG g B g^B gB 向量组成矩阵 T T T。矩阵 T T T 的公式如下所示:

T = [ g 1 R g 1 G g 1 B g 2 R g 2 G g 2 B ⋮ ⋮ ⋮ g m × n R g m × n G g m × n B ] = [ g R g G g B ] T=\begin{bmatrix}g_1^R&g_1^G&g_1^B\\g_2^R&g_2^G&g_2^B\\\vdots&\vdots&\vdots\\g_{m\times n}^R&g_{m\times n}^G&g_{m\times n}^B\end{bmatrix}=\begin{bmatrix}g^R&g^G&g^B\end{bmatrix} T= g1Rg2Rgm×nRg1Gg2Ggm×nGg1Bg2Bgm×nB =[gRgGgB]

  1. 创建 T T T 的协方差矩阵:

S = [ c o ν ( g R , g R ) c o ν ( g R , g G ) c o ν ( g R , g B ) c o ν ( g G , g R ) c o ν ( g G , g G ) c o ν ( g G , g B ) c o ν ( g B , g R ) c o ν ( g B , g G ) c o ν ( g B , g B ) ] S=\begin{bmatrix}co\nu(g^R,g^R)&co\nu(g^R,g^G)&co\nu(g^R,g^B)\\co\nu(g^G,g^R)&co\nu(g^G,g^G)&co\nu(g^G,g^B)\\co\nu(g^B,g^R)&co\nu(g^B,g^G)&co\nu(g^B,g^B)\end{bmatrix} S= coν(gR,gR)coν(gG,gR)coν(gB,gR)coν(gR,gG)coν(gG,gG)coν(gB,gG)coν(gR,gB)coν(gG,gB)coν(gB,gB)

其中, c o v ( g w , g ν ) = 1 n − 1 ∑ i = 1 m × n ( g i w − g w ‾ ) ( g i ν − g ν ‾ ) \mathrm{cov}(g^w,g^\nu)=\frac{1}{n-1}\sum_{i=1}^{m\times n}(g_i^w-\overline{g^w})(g_i^\nu-\overline{g^\nu}) cov(gw,gν)=n11i=1m×n(giwgw)(giνgν) w , ν ∈ [ R , G , B ] w,\nu\in[R,G,B] w,ν[R,G,B]

g w ‾ \overline{g^w} gw g ν ‾ \overline{g^\nu} gν 表示 w w w ν \nu ν 列的平均值。

  1. 求解协方差矩阵 S S S 的特征向量 p i p_i pi 和特征值 λ i \lambda_{i} λi ,其中 i ∈ [ 1 , 2 , 3 ] i\in[1,2,3] i[1,2,3]

  2. 将特征值 λ i \lambda_i λi 乘以一个以 0 0 0 为均值, 0.1 0.1 0.1 为方差的高斯扰动 a i a_i ai,将添加扰动后的特征值与特征向量相乘,并将结果乘以 255 255 255 后添加到原有像素值 I x y = [ I x y R , I x y G , I x y B ] I_{xy}=[I_xy^R,I_{xy}^G,I_{xy}^B] Ixy=[IxyR,IxyG,IxyB] 中。使用PCA Jittering 图像增强后的图像像素值如下式所示:
    I x y ′ = [ I x y R 、 I x y G 、 I x y B ] + 255 × [ p 1 , p 2 , p 3 ] [ α 1 λ 1 , α 2 λ 2 , α 3 λ 3 ] I_{xy}^{\prime}=[I_{xy}^{R}、I_{xy}^{G}、I_{xy}^{B}]+255\times[p_{1},p_{2},p_{3}][\alpha_{1}\lambda_{1},\alpha_{2}\lambda_{2},\alpha_{3}\lambda_{3}] Ixy=[IxyRIxyGIxyB]+255×[p1,p2,p3][α1λ1,α2λ2,α3λ3]



参考文献

[1] Krizhevsky A, Sutskever I, Hinton G E. Imagenet classification with deep convolutional neural networks[J]. Advances in neural information processing systems, 2012, 25.

[2] 陈刚.基于卷积神经网络的森林火灾识别系统的研究与设计[D].南京林业大学,2023.DOI:10.27242/d.cnki.gnjlu.2023.000651.

相关文章:

  • 【通过Groovy去热修复线上逻辑】1.执行线上数据修复 2.写工具
  • 仿函数 VS 函数指针实现回调
  • RAG现有技术方案
  • 【Golang】defer与recover的组合使用
  • PyCharm中使用pip安装PyTorch(从0开始仅需两步)
  • 设计和布局硬件电路是嵌入式系统开发的重要环节
  • 3.22日西南竞篮,NBA勇士VS老鹰,赛前数据前瞻
  • LeetCode 2643.一最多的行:模拟(更新答案)
  • Wispr Flow,AI语言转文字工具
  • 鸿蒙NEXT开发案例:程序员计算器
  • 使用若依AI生成springBoot的前后端分离版本
  • 为WordPress自定义一个留言板
  • 【QA】QT编译过程和C++编译过程的区别?
  • Flutter Dart 异步支持全面解析
  • Rocky9.5基于sealos快速部署k8s集群
  • C++Primer学习(13.2 拷贝控制和资源管理)
  • 搜广推校招面经五十六
  • 基于linux平台的C语言入门教程(4)输入输出
  • MySQL表的增加、查询的基础操作
  • 解决用户同时登录轮询获取用户信息错乱,使用WebSocket和Server-Sent Events (SSE)
  • 公交公司须关注新出行需求:“单车巴士”能否常态化
  • 政治局会议:持续稳定和活跃资本市场
  • 陕西全省公开征集涉企行政执法问题线索,切实减轻企业负担
  • 外交部:中方在黄海暂定海域建造渔业养殖设施,同中韩海域划界无关
  • 著名文学评论家、清华大学中文系教授蓝棣之逝世
  • 范福生受审:任高密市长、市委书记时滥用职权,致公共财产利益重大损失