keras中的zca_whtening白化处理

本文介绍了白化算法在图像预处理中的应用,通过去除输入数据的冗余信息,提高特征间的独立性并标准化特征方差。以高光谱遥感影像为例,详细解释了如何利用PCA进行特征空间转换,并通过Python代码示例展示了白化处理的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

白化:是一个比PCA稍微高级一点的算法。白化的目的就是去除输入数据中的冗余信息,假设训练数据是图像,由于图像中相邻的像素之间有很强的相关性,所以用于训练时输入是冗余的,白化的目的就是降低输入的冗余性。

其实从高光谱遥感影像的角度上,可能是可以一试的预处理。

输入数据集X,经过白化之后:

1.特征之间相关性较低。

2.所有特征具有相同的方差。

PCA作为降维算法,一般通过求出原数据的特征向量,再把原数据映射到特征向量空间内,实现了特征之间的低相关性。实现白化的第一步就是PCA,求出新特征空间中的X的坐标,在对新坐标进行方差归一化操作。


举个例子:


白化之后:


代码:

import matplotlib.pyplot as  plt
import glob
from PIL import Image
from keras.preprocessing import image
import numpy as np

path = 'train/'
gen_path = 'result/'

def print_result(path):
    name_list = glob.glob(path)
    fig = plt.figure()
    for i in range(9):
        img = Image.open(name_list[i])
        # add_subplot(331) 参数一:子图总行数,参数二:子图总列数,参数三:子图位置
        sub_img = fig.add_subplot(331 + i)
        sub_img.imshow(img)
    plt.show()
    return fig

datagen = image.ImageDataGenerator(zca_whitening=True)

gen = image.ImageDataGenerator()

data = gen.flow_from_directory(path, batch_size=1, class_mode=None, shuffle=True, target_size=(36, 36))
np_data = np.concatenate([data.next() for i in range(1)])

datagen.fit(np_data)

gen_data = datagen.flow_from_directory(path, batch_size=1, shuffle=False, save_to_dir=gen_path + '3', save_prefix='gen',
                                       target_size=(36, 36))

for i in range(9):
    gen_data.next()

fig = print_result(gen_path + '3/*')

fig.savefig(gen_path + '3/zcawhtening.png', dpi=200)



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值