图像特征——下篇
图像特征
在图像特征系列,我们列举了这几年kaggle竞赛平台上90%以上最为常用的图像特征,对应的框架如下,很多特征已经在之前的上篇和中篇介绍完了,此处我们弥补上剩下的一些常用图像特征:
1.图像色彩特征
图像色彩有许多实际用途,包括评估压缩算法、评估给定相机传感器模块对颜色的敏感度、计算图像的“美学质量”等等,图像色彩越高的话往往图片越加亮丽更能吸引用户。此处我们借鉴2003年的论文"Measuring colorfulness in natural images"使用OpenCV和Python实现色彩度量的计算。
-
import imutils
-
import cv2
-
def image_colorfulness(image):
-
# split the image into its respective RGB components
-
(B, G, R) = cv2.split(image.astype("float"))
-
# compute rg = R - G
-
rg = np.absolute(R - G)
-
# compute yb = 0.5 * (R + G) - B
-
yb = np.absolute(0.5 * (R + G) - B)
-
# compute the mean and standard deviation of both `rg` and `yb`
-
(rbMean, rbStd) = (np.mean(rg), np.std(rg))
-
(ybMean, ybStd) = (np.mean(yb), np.std(yb))
-
# combine the mean and standard deviations
-
stdRoot = np.sqrt((rbStd ** 2) + (ybStd ** 2))
-
meanRoot = np.sqrt((rbMean ** 2) + (ybMean ** 2))
-
# derive the "colorfulness" metric and return it
-
return stdRoot + (0.3 * meanRoot)
-
-
imagePath = './imgs/chapter7/img_example.jpeg'
-
image = cv2.imread(imagePath)
-
image = imutils.resize(image, width=250)
-
C = image_colorfulness(image)
-
C
52.681127440780195
2.不同色度空间中图像的统计特征
在不同色度空间中,例如YUV色度空间,HSV色度空间中图像的统计特征。
-
import cv2
-
from matplotlib import pyplot as plt
-
imagePath = './imgs/chapter7/img_example.jpeg'
-
image = cv2.imread(imagePath)
-
plt.figure(figsize=(15, 8))
-
plt.subplot(221)
-
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
-
plt.imshow(gray)
-
plt.subplot(222)
-
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) # RGB转换为HSV
-
plt.imshow(hsv)
-
plt.subplot(223)
-
yuv = cv2.cvtColor(image, cv2.COLOR_RGB2YUV) # RGB转换为YUV
-
plt.imshow(yuv)
-
plt.subplot(224)
-
Ycrcb = cv2.cvtColor(image, cv2.COLOR_RGB2YCrCb) # RGB转换为YCrCb
-
plt.imshow(Ycrcb)
<matplotlib.image.AxesImage at 0x7f911272b040>
-
print('mean sts: gray {}, hsv {}, yuv {}, Ycrcb {}'.format(gray.mean(),hsv.mean(),yuv.mean(),Ycrcb.mean()))
-
print('std sts: gray {}, hsv {}, yuv {}, Ycrcb {}'.format(gray.std(),hsv.std(),yuv.std(),Ycrcb.std()))
-
mean sts: gray 131.0327031893004, hsv 110.55873914037494, yuv 128.7515240626429, Ycrcb 129.03808127572017
-
std sts: gray 62.02471104426188, hsv 68.03890817377417, yuv 37.85379451513613, Ycrcb 37.73100132814874
3.图像差值变化直方图特征
和图像直方图特征类似,不同的地方在于此处我们对图像中相邻像素先进行差值计算,然后再进行分箱操作,用来统计相邻像素之间的关系。
-
import pandas as pd
-
import cv2
-
-
df = pd.DataFrame()
-
df['image'] = ['./imgs/chapter7/img_example.jpeg']
-
-
def get_histogram_diff_features(image):
-
path = image
-
image = cv2.imread(path)
-
image_diff = (image[:,1:,:] - image[:,:-1,:])
-
hist, bins = np.histogram(image_diff.ravel(), bins=50)
-
-
return hist / image_diff.ravel().shape
-
-
hist_diff = df['image'].apply(get_histogram_diff_features)
-
hist_diff[0]
-
array([6.95175548e-01, 2.09816488e-02, 5.69239613e-03, 2.42595309e-03,
-
1.39728950e-03, 9.40868287e-04, 7.48690935e-04, 6.41735087e-04,
-
5.65950863e-04, 5.04465550e-04, 5.11329027e-04, 3.71199707e-04,
-
3.38884170e-04, 3.11144285e-04, 2.66531685e-04, 2.30212453e-04,
-
2.14483652e-04, 1.79308333e-04, 1.70443009e-04, 1.55858120e-04,
-
1.69871052e-04, 1.36983559e-04, 1.14677259e-04, 1.16679107e-04,
-
1.10673564e-04, 1.12103455e-04, 1.07813782e-04, 1.29262148e-04,
-
1.30978017e-04, 1.42703123e-04, 1.85599854e-04, 1.63579532e-04,
-
1.75876595e-04, 1.94751156e-04, 2.36217995e-04, 2.59096252e-04,
-
3.03422873e-04, 3.44031778e-04, 3.83496770e-04, 4.50415669e-04,
-
6.16283027e-04, 5.74244231e-04, 6.47740629e-04, 7.42971371e-04,
-
8.91108080e-04, 1.22942029e-03, 2.04760393e-03, 4.53704419e-03,
-
1.52071769e-02, 2.37714233e-01])
4.基于预训练特征的K近邻&聚类特征
基于预训练的图像模型,我们往往可以得到每个图像的向量表示,这里就和文本特征类似,我们可以对其进行距离的计算,计算K近邻特征或者进行聚类,具体的细节可以直接参考文本特征的内容。
5.图片中人脸的个数
人脸的多少可以帮助我们判别某些图片是否是人物相关的还是自然景观等等,这在一些推荐问题中能带来一些帮助,例如有些人喜欢看山水风景图片,这个时候人脸数为0的图片能带来些许帮助。目前图片中人脸的个数可以直接使用opencv的库进行识别。
-
import cv2
-
import os
-
-
photopath ='XXX.jpg'
-
classifier ='haarcascade_frontalface_default.xml'
-
-
#读取图片
-
image = cv2.imread(photopath)
-
#灰度转换
-
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
-
-
#获取人脸识别训练数据
-
face_casacade = cv2.CascadeClassifier(classifier)
-
#探测人脸
-
faces = face_casacade.detectMultiScale(image)
6.颜值特征
颜值特征一般是在人脸图像中,在许多视频相关的推荐问题中,视频的封面人物的颜值特征是非常重要的信息,这在一些视频推荐数据竞赛问题中曾今出现过此类问题,一般高颜值的视频封面点击率会高很多。而目前也存在非常多的工具可以直接计算颜值的特征。例如旷世就有类似的工具。
小结
基于图像的特征是非常多的,本章节主要列举了在过往的数据竞赛中常用的一些有效的特征,在这边我们主要将其归纳为了两类特征,①.全局的特征,包括图像的大小、图像的格式、图像的创建时间、亮度等等;②.局部特征,例如SIFT、SURF等等以及基于这些特征的聚类特征,还有图像的人脸数等等。在实际问题中,图像相关的特征非常多,我们可以依据不同的问题对其进行归类,例如纹理特征;区域特征;空间关系特征等等。
文章来源: wanghao.blog.csdn.net,作者:AI浩,版权归原作者所有,如需转载,请联系作者。
原文链接:wanghao.blog.csdn.net/article/details/116292714
- 点赞
- 收藏
- 关注作者
评论(0)