基本图像处理-1(图像直方图与数据降维-主成分分析PCA)

直方图

图像的直方图用来表征该图像像素值的分布情况。用一定数目的小区间(bin)来
指定表征像素值的范围,每个小区间会得到落入该小区间表示范围的像素数目。该
(灰度)图像的直方图可以使用python PIL中的 hist() 函数绘制。

hist(im.flatten(),128)

flatten() 方法将任意数组按照行优先准则转换成一维数组

直方图均衡化

直方图均衡化是指将一幅
图像的灰度直方图变平,使变换后的图像中每个灰度值的分布概率都相同。在对图
像做进一步处理之前,直方图均衡化通常是对图像灰度值进行归一化的一个非常好
的方法,并且可以增强图像的对比度。
直方图均衡化的变换函数是图像中像素值的累积分布函数(cumulative distribution function, 简写为 cdf,将像素值的范围映射到目标范围的归一化操作)

def histeq(im,nbr_bins=256):
	""" 对一幅灰度图像进行直方图均衡化 """
	# 计算图像的直方图
	imhist,bins = histogram(im.flatten(),nbr_bins,normed=True)
	cdf = imhist.cumsum() # cumulative distribution function
	cdf = 255 * cdf / cdf[-1] # 归一化
	12 | 第 1# 使用累积分布函数的线性插值,计算新的像素值
	im2 = interp(im.flatten(),bins[:-1],cdf)
return im2.reshape(im.shape), cd

主成分分析-PCA

PCA( Principal Component Analysis,主成分分析)是一个非常有用的降维技巧。它
可以在使用尽可能少维数的前提下,尽量多地保持训练数据的信息。PCA 产生的投影矩阵可以
被视为将原始坐标变换到现有的坐标系,坐标系中的各个坐标按照重要性递减排列。
为了对图像数据进行 PCA 变换,图像需要转换成一维向量表示。我们可以使用
NumPy 类库中的 flatten() 方法进行变换。
将变平的图像堆积起来,我们可以得到一个矩阵,矩阵的一行表示一幅图像。在计算
主方向之前,所有的行图像按照平均图像进行了中心化。我们通常使用 SVD(Singular
Value Decomposition,奇异值分解)方法来计算主成分。

from PIL import Image
from numpy import *
def pca(X):
	""" 主成分分析:
	输入:矩阵 X,其中该矩阵中存储训练数据,每一行为一条训练数据
	返回:投影矩阵(按照维度的重要性排序)、方差和均值 """
	# 获取维数
	num_data,dim = X.shape
	# 数据中心化
	mean_X = X.mean(axis=0)
	X = X - mean_X
	if dim>num_data:
	# PCA- 使用紧致技巧
	M = dot(X,X.T) # 协方差矩阵
	e,EV = linalg.eigh(M) # 特征值和特征向量
	tmp = dot(X.T,EV).T # 这就是紧致技巧
	V = tmp[::-1] # 由于最后的特征向量是我们所需要的,所以需要将其逆转
	S = sqrt(e)[::-1] # 由于特征值是按照递增顺序排列的,所以需要将其逆转
	for i in range(V.shape[1]):
	V[:,i] /= S
	else:
	# PCA- 使用 SVD 方法PCA( Principal Component Analysis,主成分分析)是一个非常有用的降维技巧
	U,S,V = linalg.svd(X)
	V = V[:num_data] # 仅仅返回前 nun_data 维的数据才合理
	# 返回投影矩阵、方差和均值
	return V,S,mean_X
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于主成分分析的人脸识别是一种常见的图像识别技术。在这个问题中,我们使用了ORL数据集,ORL数据集是一个经典的用于人脸识别的数据库,含有来自40个不同人的400张灰度人脸图像主成分分析(Principal Component Analysis,简称PCA)是一种常用的降维方法,通过找到输入数据中的主要特征,将高维数据映射到低维空间。在人脸识别中,使用PCA可以将图像降维,提取出图像中的主要信息。 首先,我们将ORL数据集中的图像进行预处理。预处理包括将图像转换为灰度图像、对图像进行直方图均衡化等操作,以增强图像的对比度和亮度。 然后,我们使用PCA来对预处理后的图像进行降维PCA的步骤如下: 1. 将所有预处理后的图像展开为一维向量,作为输入数据。 2. 计算输入数据的协方差矩阵。 3. 对协方差矩阵进行特征值分解,得到特征值和特征向量。 4. 根据特征值的大小,选择前k个特征向量作为主成分,k表示降维后的维度。 5. 将输入数据映射到主成分空间,得到降维后的数据。 最后,我们可以使用降维后的数据进行人脸识别。比如,可以使用最近邻算法(Nearest Neighbor)对新输入的人脸进行分类。首先,我们将新输入的人脸映射到主成分空间,得到降维后的数据。然后,将降维后的数据与ORL数据集中的每个人脸进行比较,选择与之距离最近的人脸作为最终的分类结果。 基于主成分分析的人脸识别在实际应用中具有较高的准确率和鲁棒性。它可以广泛应用于人脸识别、安全验证等领域。同时,它的计算复杂度相对较低,适用于大规模人脸数据的处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值