IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> AlexNet中的图片增强--基于PCA的RGB三通道色彩抖动 -> 正文阅读

[人工智能]AlexNet中的图片增强--基于PCA的RGB三通道色彩抖动

AlexNet中的图片增强--基于PCA的RGB三通道色彩抖动


在阅读完AlexNet的论文之后有感而发。

这篇论文开创性地使用了很多卷积神经网络中结构,小技巧,非常建议大家去精读一遍,这篇神经网络奠基级别的论文。

概要

在AlexNet中介绍了一种基于PCA的色彩增强的方法,效果就是图片的明度(明亮程度)会发生整体的变化,并且没有发生图片结构的改变或色差的明显变化。

效果如下图:
效果图

  • 图像的亮度发生了明显的变化,有的暗,有的亮,而且图片的主要事物的轮廓还是十分清晰,没有发生改变;
  • 事物的主导颜色没有发生变化(上面树叶的主导色绿色没有发生变化);
  • 图片的相对色差没有发生改变,(原来图片暗的地方和亮的地方的对比度仍然存在)

论文中的实现方法

这里我简要地说一下论文中的实现方法:
实现步骤:

  1. 将图片按照RGB三通道进行normalization处理,均值为0,方差为1。
    值得一提的是,按照RGB三通道进行处理,因为我们进行的是色彩增强,在RGB 三通道的图片中,决定图像色彩的是RGB之间的相对关系,我们不能改变三通道内部的像素值分布。
  2. 将图片按照channel展平成大小为(?, 3)的array
  3. 求上述array的协方差矩阵
  4. 对协方差矩阵进行特征分解
  5. 下式的 p \mathbf{p} p 是特征向量, λ \lambda λ是特征值, α \alpha α即为我们添加的抖动系数
    [ p 1 p 2 p 3 ] [ α 1 λ 1 α 2 λ 2 α 3 λ 3 ] T \begin{bmatrix}\mathbf{p}_1 & \mathbf{p}_2 & \mathbf{p}_3\end{bmatrix} \begin{bmatrix}\alpha_1\lambda_1 & \alpha_2\lambda_2 & \alpha_3\lambda_3 \end{bmatrix}^T [p1??p2??p3??][α1?λ1??α2?λ2??α3?λ3??]T
    特征向量组成的矩阵是3x3的,特征值乘以抖动系数组成的array是3x1的,所以点乘得到的array 正好是3x1大小的,三个值分别加到原图像的R,G,B三通道上,就是最后得到的增强的图像。

我的理解

因为论文中没有明确解释为什么要这么做,所以我大致说一下我的理解.

  • 为什么要使用PCA主成分分析??
    因为要保持原图像的相对色差、主要色系和轮廓,我们不能在增强完数据之后让图像本身表达的事物发生改变。
    我们是对三通道进行PCA的,协方差矩阵的特征向量表达的是R、G、B三个channel之间的相对关系,比如上面的叶子的图片,绿色占主导地位,色差主要是由绿色体现出来,绿色的色系相对丰富,所以主成分是偏绿色系的。
    下面是8次增强中抖动的幅度(R,G,B三通道)
    抖动幅度

我们可以很明显地看到每一行第二个值的绝对值最大,也就是在绿色通道上抖动的幅度最大,这个就是PCA主成分的作用,找出图片中的主要色系,大幅改动主要色系的值,使得整张图像的整体的色调不发生改变。

举一个极端的例子,如果图像的像素点仅有G通道有值,R,B通道值为0,那么整张图像就是一张明暗不一的绿色图像,通过PCA主成分分析得到的扰动值,仅仅只有G通道有值,R,B通道的值仍然会是0,因为原图像中没有R、B图像的信息,PCA并不会得到这两个通道的主成分值,就不会向图片中加入原本图像中就没有的值。

PCA主成分分析会按照原图像中三各通道内数据的信息量进行权重的划分(即协方差矩阵的特征值大小)

Code

from numpy import linalg
import numpy as np
from PIL import Image
import random
import matplotlib.pyplot as plt
plt.style.use('seaborn')

def pca_color_augmention(image_array):
    '''
    image augmention: PCA jitter 
    :param image_array: 图像array
    :return img2: 经过PCA-jitter增强的图像array
    '''
    assert image_array.dtype == 'uint8'
    assert image_array.ndim == 3
    # 输入的图像应该是 (w, h, 3)这样的三通道分布
    
    img1 = image_array.astype('float32') / 255.0
    # 分别计算R,G,B三个通道的方差和均值
    mean = img1.mean(axis = 0).mean(axis = 0)
    std = img1.reshape((-1, 3)).std()    # 不可以使用img1.std(axis = 0).std(axis = 0)
    
    # 将图像标按channel标准化(均值为0,方差为1)
    img1 = (img1 - mean) / (std)
    
    # 将图像按照三个通道展成三个长条
    img1 = img1.reshape((-1, 3))
    
    # 对矩阵进行PCA操作
    # 求矩阵的协方差矩阵
    cov = np.cov(img1, rowvar = False)
    # 求协方差矩阵的特征值和向量
    eigValue, eigVector = linalg.eig(cov)

    # 抖动系数(均值为0,方差为0.1的标准分布)
    rand = np.array([random.normalvariate(0, 0.2) for i in range(3)])
    jitter = np.dot(eigVector, eigValue * rand)
    
    jitter = (jitter * 255).astype(np.int32)[np.newaxis, np.newaxis, :]

    img2 = np.clip(image_array + jitter, 0, 255)
    
    return img2

def show_image(image_array):
    for _ in range(8):
    
        ax = plt.subplot(241 + _)
        ax.imshow(pca_color_augmention(image_array))
        ax.axis('off')
    plt.show()

img_tensor = np.array(Image.open('./images/leaf.jpg'))
show_image(img_tensor)

参考

下面文章的代码部分写得非常详实,我的代码在他的基础上做了些许改动
让我们使用PCA色彩增强

附上leaf.jpg
leaf.jpg

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-09-03 11:53:35  更:2021-09-03 11:55:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 16:47:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码